一、引言:AI Agent 开启自动化新时代
在数字化飞速发展的当下,AI Agent 的横空出世,宛如一颗璀璨的新星,照亮了自动化领域前行的道路。它以强大的自主决策和任务执行能力,在众多领域掀起了自动化变革的浪潮,让人们对工作和生活的智能化有了全新的认知。
AI Agent,即人工智能智能体,能够感知环境、自主决策并执行相应的动作。与传统 AI 相比,它最大的亮点在于无需人类详细指令,仅凭借给定目标,就能自行思考并规划出实现路径,通过不断与环境交互来调整策略,直至达成目标。这一特性使得 AI Agent 在处理复杂任务时,展现出无与伦比的灵活性和高效性。
以日常生活中的订票和支付场景为例,以往我们需要手动打开订票网站或 APP,依次输入出发地、目的地、出行日期等信息,在众多航班或车次中筛选合适的选项,然后再跳转到支付页面完成付款操作。整个过程繁琐且耗时,若遇到出行高峰期,还可能因手速不够快而抢不到心仪的票。但有了 AI Agent 的助力,这一切都将变得轻松简单。只需向它下达 “预订 X 月 X 日从 A 地到 B 地的机票并完成支付” 的指令,它就能自动完成从查询航班信息、比较价格和座位、选择最优方案,到完成支付的一系列操作,全程无需人工干预,真正实现了自动化。
而 Python 作为一门简洁高效、功能强大的编程语言,拥有丰富的库和工具,为实现 AI Agent 的自动化流程提供了坚实的技术支撑。它在数据处理、网络请求、自动化操作等方面的卓越表现,使得我们能够借助其力量,将 AI Agent 与订票和支付系统紧密相连,打造出自主订票 + 支付的全自动工作流。
接下来,本文将深入探讨如何运用 Python 搭建这一神奇的全自动工作流,从前期准备到具体实现步骤,再到可能遇到的问题及解决方法,都将一一为你揭晓。无论你是编程新手,还是经验丰富的技术达人,相信都能从本文中收获满满,开启自动化领域的全新探索之旅。
二、AI Agent 是什么
(一)定义与概念
AI Agent,即人工智能智能体,是一种能够感知环境、自主决策并执行相应动作,以实现特定目标的智能化系统。它就像是一个拥有自主意识的数字助手,能够理解任务需求,主动规划行动步骤,并利用各种工具完成任务 。与传统 AI 单纯依赖预定义规则或模型进行被动响应不同,AI Agent 具有更强的自主性和适应性,能够在复杂多变的环境中灵活应对各种挑战。
以常见的智能客服为例,传统的智能客服往往只能根据预设的问题模板和答案库进行回复,对于一些超出预设范围的问题,就难以给出准确有效的回答。而基于 AI Agent 的智能客服则可以理解用户问题背后的真实意图,通过自主搜索知识库、调用相关工具,甚至与其他系统进行交互,为用户提供更加全面、个性化的解决方案。
(二)核心能力与特点
- 深度思考与推理能力:AI Agent 具备强大的推理和规划能力,能够将复杂任务分解为多个子任务,并制定合理的执行计划。它可以通过思维链(Chain of Thought, CoT)、ReAct (Reasoning and Acting) 和问题分解 (Problem Decomposition) 等逻辑框架,对任务进行深入分析和思考,从而做出更加明智的决策。例如,在制定旅行计划时,AI Agent 不仅能考虑到目的地、出行日期、预算等基本因素,还能根据实时的交通状况、景点人流量等信息,动态调整行程安排,确保旅行的顺利进行。
- 感知世界与理解能力:它能够通过多种方式感知周围环境,包括自然语言、图像、声音等多模态信息,并对这些信息进行理解和分析。通过语言交互,AI Agent 能够理解用户的指令和需求,提出问题、表达观点和情感,进行复杂的对话。例如,集成多模态模型的 AI Agent 可以通过观察一张图片,理解图片中的情感和社会动态,或者听到声音理解语气和情绪。同时,AI Agent 还具备整合不同感官信息的能力,能够将来自不同渠道的信息融合为一个统一的理解,从而更准确地把握环境状态。
- 工具使用与拓展能力:AI Agent 的一大显著特点是可以调用各种外部工具和 API,从而拓展自身的能力范围。它能够与各种系统进行交互,通过调用应用程序接口(API)来执行各种任务,如获取数据、发送指令或处理信息。例如,在进行数据分析时,AI Agent 可以调用专业的数据分析工具和库,对大量数据进行快速处理和分析;在预订机票时,它可以直接调用航空公司的订票 API,完成机票的查询和预订操作。这种工具使用能力使得 AI Agent 能够完成许多传统 AI 难以胜任的复杂任务。
- 记忆与持续学习能力:AI Agent 拥有记忆功能,能够存储和检索过去的交互信息和经验,形成 “长期记忆”。这使得它在与用户的多次交互中,能够保持连贯性,记住用户的偏好、习惯、重要日期等信息,并在新的对话中主动利用这些信息,提供更加个性化的服务。同时,AI Agent 还具备持续学习的能力,能够通过不断从交互中学习新信息,优化自身的行为模式,使其适应动态环境的变化。例如,在推荐系统中,AI Agent 可以根据用户的历史购买记录和浏览行为,不断学习用户的兴趣偏好,为用户推荐更加符合其需求的商品和服务。
(三)在自动化工作流中的作用
在自动化工作流中,AI Agent 扮演着至关重要的角色,它就像一个智能的指挥官,能够协调和控制各个环节的执行,实现任务的自动化完成。以订票和支付场景为例,AI Agent 可以实现以下功能:
- 任务理解与规划:用户只需向 AI Agent 下达简单的自然语言指令,如 “预订 X 月 X 日从 A 地到 B 地的机票并完成支付”,AI Agent 就能理解用户的需求,并将其分解为多个子任务,如查询航班信息、比较价格和座位、选择最优方案、填写订票信息、完成支付等。然后,它会根据任务的优先级和依赖关系,制定详细的执行计划。
- 信息获取与处理:AI Agent 可以通过调用航空公司的官方网站或第三方票务平台的 API,获取最新的航班信息,包括航班时间、价格、剩余座位等。它还能对这些信息进行分析和比较,根据用户的偏好(如价格优先、时间优先、直飞优先等)筛选出最合适的航班。例如,如果用户更注重价格,AI Agent 会优先推荐价格较低的航班,并在有优惠活动时及时通知用户;如果用户对出行时间有严格要求,AI Agent 会重点筛选符合时间要求的航班。
- 交互与操作执行:在订票过程中,AI Agent 需要与用户进行交互,获取一些必要的信息,如乘客姓名、身份证号码、联系方式等。同时,它会自动填写订票表单,提交订单,并根据支付渠道的要求,跳转到相应的支付页面完成支付操作。整个过程无需用户手动干预,AI Agent 会按照预定的计划和流程,自动完成每一个步骤。
- 异常处理与反馈:如果在订票或支付过程中遇到异常情况,如航班售罄、支付失败等,AI Agent 会及时做出响应,采取相应的解决措施。例如,当遇到航班售罄时,AI Agent 会自动搜索其他相近时间的航班,并向用户提供替代方案;当支付失败时,它会检查支付信息,提示用户可能存在的问题,并尝试重新支付或提供其他支付方式。同时,AI Agent 会将整个操作过程和结果反馈给用户,让用户随时了解任务的进展情况。
三、准备工作:Python 环境与工具
(一)Python 安装与配置
- 下载 Python 安装包:访问 Python 官方网站(https://www.python.org/downloads/ ),根据你的操作系统(Windows、MacOS 或 Linux)选择对应的 Python 版本进行下载。建议下载最新的稳定版本,以获取更好的性能和功能支持。
- 安装 Python:
-
- Windows 系统:双击下载的安装包,在安装向导中,勾选 “Add Python to PATH” 选项,这将自动将 Python 添加到系统环境变量中,方便后续在命令行中使用 Python 命令。然后按照提示完成安装过程。
-
- MacOS 系统:运行安装包,按照安装向导的指示进行操作。安装完成后,Python 会自动配置到系统路径中。
-
- Linux 系统:大多数 Linux 发行版都默认安装了 Python,但版本可能不是最新的。你可以通过包管理器(如 apt-get、yum 等)来安装或更新 Python。例如,在 Ubuntu 系统中,可以使用以下命令安装 Python 3:
sudo apt-get update
sudo apt-get install python3 python3 - pip
- 验证安装:打开命令行终端,输入python --version,如果显示安装的 Python 版本号,说明 Python 已成功安装。例如,输出Python 3.10.6,表示安装的是 Python 3.10.6 版本。
(二)相关库的安装
- Selenium:Selenium 是一个用于自动化浏览器操作的库,通过它可以模拟用户在浏览器中的各种行为,如点击、输入、提交表单等。使用以下命令安装 Selenium:
pip install selenium
安装完成后,还需要下载对应浏览器的驱动程序,如 ChromeDriver(对应 Chrome 浏览器)、GeckoDriver(对应 Firefox 浏览器)等,并将驱动程序的路径添加到系统环境变量中,或者在代码中指定驱动程序的路径。例如,使用 Chrome 浏览器时,可以这样指定驱动路径:
from selenium import webdriver
driver = webdriver.Chrome(executable_path='path/to/chromedriver')
- BeautifulSoup:BeautifulSoup 是一个用于解析 HTML 和 XML 文档的库,它可以帮助我们轻松地从网页中提取所需的数据。安装命令如下:
pip install beautifulsoup4
使用时,先导入库,然后将网页内容传递给 BeautifulSoup 进行解析。例如:
from bs4 import BeautifulSoup
import requests
url = 'http://example.com'
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
- Requests:Requests 库用于发送 HTTP 请求,获取网页内容。安装命令为:
pip install requests
通过 Requests 库,我们可以方便地发送 GET、POST 等请求,并处理响应数据。例如,发送一个 GET 请求并获取响应内容:
import requests
url = 'http://example.com'
response = requests.get(url)
if response.status_code == 200:
print(response.text)
(三)订票与支付平台分析
- 12306:12306 是中国铁路客户服务中心官方网站和 APP,是购买火车票的主要平台。它的优势在于数据准确、实时性强,且购票过程安全可靠,没有额外的手续费。但 12306 的反爬虫机制较为严格,网站在应对高并发时,可能会出现卡顿或响应缓慢的情况。此外,其网页结构和交互逻辑相对复杂,对于自动化操作的实现有一定难度。
- 携程:携程是一家知名的在线旅游服务平台,除了火车票,还提供机票、酒店、旅游度假等多种服务。携程的用户体验较好,界面设计友好,操作相对简单,并且提供了丰富的筛选和排序功能,方便用户快速找到合适的出行方案。同时,携程在技术上对自动化操作的限制相对较少,更适合作为自动化订票和支付的目标平台。不过,携程作为商业平台,可能会收取一定的服务费,且在价格和票源方面可能与 12306 存在细微差异。
综合考虑,我们选择携程作为本次自动化工作流的目标平台,利用其丰富的功能和相对友好的自动化环境,实现自主订票和支付的功能 。
四、自主订票工作流实现
(一)模拟登录
在实现自主订票的过程中,模拟登录是第一步,也是至关重要的一步。以携程为例,我们可以利用 Python 的 Selenium 库来实现这一功能。Selenium 能够模拟用户在浏览器中的操作,如输入账号密码、点击登录按钮等 。
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
import time
# 初始化浏览器驱动
driver = webdriver.Chrome()
driver.get('https://passport.ctrip.com/user/login')
# 输入账号和密码
account_input = driver.find_element(By.ID, 'nloginname')
account_input.send_keys('your_account')
password_input = driver.find_element(By.ID, 'npwd')
password_input.send_keys('your_password')
# 处理验证码(如果有)
# 这里以使用第三方打码平台超级鹰为例
from chaojiying import Chaojiying_Client
# 初始化超级鹰客户端
chaojiying = Chaojiying_Client('username', 'password', 'soft_id')
# 定位验证码图片元素并截图
captcha_element = driver.find_element(By.ID, 'captcha_image')
captcha_element.screenshot('captcha.png')
# 读取验证码图片
with open('captcha.png', 'rb') as f:
im = f.read()
# 调用超级鹰识别验证码
result = chaojiying.PostPic(im, 1902)
captcha_text = result['pic_str']
# 输入验证码
captcha_input = driver.find_element(By.ID, 'captcha_input')
captcha_input.send_keys(captcha_text)
# 点击登录按钮
login_button = driver.find_element(By.ID, 'login_submit')
login_button.click()
# 等待登录完成
time.sleep(5)
在上述代码中,首先初始化 Chrome 浏览器驱动,然后打开携程的登录页面。通过find_element方法定位到账号、密码和验证码输入框以及登录按钮,使用send_keys方法输入相应的信息,最后点击登录按钮完成登录。如果遇到验证码,通过 Selenium 的截图功能获取验证码图片,利用第三方打码平台(如超级鹰)进行识别,并将识别结果输入到验证码输入框中。
(二)车次查询与筛选
登录成功后,接下来就是查询车次并筛选出符合需求的车次。我们可以通过向携程的车次查询接口发送 HTTP 请求来获取车次信息,也可以利用 Selenium 直接在网页上进行操作。这里以使用requests库发送请求为例:
import requests
import json
# 构造查询参数
params = {
'from': '北京',
'to': '上海',
'date': '2024-12-31'
}
# 发送请求获取车次信息
response = requests.get('https://trains.ctrip.com/TrainBooking/SearchTrain.aspx', params=params)
if response.status_code == 200:
train_data = json.loads(response.text)
# 筛选车次,例如筛选出高铁车次
high_speed_trains = [train for train in train_data if train['train_type'] == '高铁']
for train in high_speed_trains:
print(f"车次: {train['train_number']}, 出发时间: {train['departure_time']}, 到达时间: {train['arrival_time']}")
else:
print('车次查询失败')
在这段代码中,首先构造了查询参数,包括出发地、目的地和出行日期。然后使用requests.get方法向携程的车次查询接口发送请求,获取车次信息。如果请求成功,将返回的 JSON 数据解析为 Python 字典,通过列表推导式筛选出高铁车次,并打印出车次、出发时间和到达时间等关键信息。
(三)座位选择与订单提交
筛选出合适的车次后,就需要选择座位并提交订单。同样可以使用 Selenium 来模拟这些操作:
# 假设已经获取到目标车次的链接
train_url = 'https://trains.ctrip.com/TrainBooking/TrainDetail.aspx?train_no=xxx'
driver.get(train_url)
# 选择座位,例如选择二等座
second_class_seat = driver.find_element(By.CSS_SELECTOR, '.second-class-seat')
second_class_seat.click()
# 填写乘车人信息
passenger_name = driver.find_element(By.ID, 'passenger_name')
passenger_name.send_keys('张三')
# 填写其他乘车人信息,如身份证号、联系方式等
# 提交订单
submit_button = driver.find_element(By.ID, 'submit_order')
submit_button.click()
# 处理支付页面(这里简单模拟点击支付按钮)
payment_button = driver.find_element(By.ID, 'payment_button')
payment_button.click()
在上述代码中,首先打开目标车次的详情页面,通过 CSS 选择器定位到二等座座位并点击选择。然后填写乘车人的相关信息,如姓名、身份证号等。最后点击提交订单按钮和支付按钮,完成订单提交和支付操作。在实际应用中,支付环节可能需要更复杂的处理,如处理不同的支付方式、输入支付密码等 。
五、自主支付工作流实现
(一)支付接口对接
在实现自主支付功能时,对接常见的支付接口是关键的一步。以支付宝和微信支付为例,下面将介绍具体的对接步骤:
- 支付宝支付接口对接:
-
- 注册与获取信息:首先,需要在支付宝开放平台(支付宝开放平台 )注册成为开发者,并创建应用。在创建应用过程中,会获取到应用的 AppID,这是标识应用的唯一 ID,在后续的接口调用中会用到。
-
- 生成密钥对:为了保证支付的安全性,需要生成 RSA2 密钥对。可以使用工具(如 OpenSSL)生成应用私钥和应用公钥,然后将应用公钥上传到支付宝开放平台。同时,在平台上获取支付宝公钥,用于验证支付宝返回的签名。
-
- 安装 SDK:使用pip install python - alipay - sdk命令安装支付宝 SDK,它提供了一系列方便的方法来调用支付宝的接口。
-
- 调用接口:以创建支付订单为例,代码示例如下:
from alipay import AliPay
import uuid
# 初始化AliPay对象
alipay = AliPay(
appid='your_app_id',
app_notify_url=None, # 默认回调url,如果采用同步通知就不传
app_private_key_string='your_app_private_key',
alipay_public_key_string='your_alipay_public_key',
sign_type='RSA2',
debug=True # 指定是否是开发环境,True为开发环境,False为正式环境
)
# 生成唯一的订单号
order_id = str(uuid.uuid4())
# 订单金额,单位为元
total_amount = 100.00
# 订单主题
subject = '机票预订'
# 调用支付宝接口生成支付链接
order_string = alipay.api_alipay_trade_page_pay(
out_trade_no=order_id,
total_amount=total_amount,
subject=subject,
return_url='http://your_redirect_url', # 支付成功后的跳转链接
notify_url='http://your_notify_url' # 支付结果通知回调地址
)
# 拼接支付链接
pay_url = 'https://openapi.alipaydev.com/gateway.do?' + order_string
print(pay_url)
- 微信支付接口对接:
-
- 注册与获取信息:在微信支付商户平台(微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式 )注册并开通商户号,获取商户号(MCHID)和 API 密钥。同时,在微信开放平台注册应用,获取 AppID。
-
- 安装 SDK:可以使用pip install wechatpay - py安装微信支付 SDK。
-
- 调用接口:同样以创建支付订单为例,代码示例如下:
from wechatpay import WeChatPay
# 初始化WeChatPay对象
wechatpay = WeChatPay(
appid='your_appid',
mchid='your_mchid',
api_key='your_api_key',
mch_cert_path='path/to/your_mch_cert.pem', # 商户证书路径
mch_key_path='path/to/your_mch_key.pem' # 商户私钥路径
)
# 生成唯一的订单号
out_trade_no = 'your_unique_order_id'
# 订单金额,单位为分
total_fee = 10000
# 订单描述
body = '机票预订'
# 调用微信支付接口生成支付链接
params = {
'body': body,
'out_trade_no': out_trade_no,
'total_fee': total_fee,
'notify_url': 'http://your_notify_url', # 支付结果通知回调地址
'trade_type': 'NATIVE' # 生成二维码支付,可根据需求选择其他类型
}
result = wechatpay.create_order(params)
# 获取支付链接或二维码
pay_url = result['code_url']
print(pay_url)
(二)支付信息处理
- 支付金额处理:在获取到支付金额时,需要确保金额的准确性和一致性。首先,要对金额进行类型转换和精度处理,确保金额以正确的格式传递给支付接口。例如,在 Python 中,通常将金额转换为浮点数类型,并保留两位小数。在传递给支付接口时,要注意支付接口对金额单位的要求,如支付宝和微信支付通常以元为单位,而有些接口可能要求以分为单位。因此,需要根据接口要求进行相应的转换。
# 假设获取到的金额为字符串类型
amount_str = '100.50'
# 转换为浮点数类型
amount_float = float(amount_str)
# 如果支付接口要求以分为单位
amount_cents = int(amount_float * 100)
- 支付方式选择:根据用户的需求或系统的默认设置,确定支付方式。可以提供多种支付方式供用户选择,如支付宝支付、微信支付、银行卡支付等。在代码中,可以通过用户输入、配置文件或其他方式获取用户选择的支付方式,并根据不同的支付方式调用相应的支付接口。例如,通过一个字典来映射支付方式名称和对应的支付处理函数:
payment_methods = {
'alipay': alipay_payment_handler,
'wechat': wechat_payment_handler,
'bank_card': bank_card_payment_handler
}
# 假设用户选择的支付方式为支付宝
selected_method = 'alipay'
if selected_method in payment_methods:
payment_methods[selected_method]()
else:
print('不支持的支付方式')
- 订单信息关联:将支付信息与订单信息进行关联,确保支付操作与对应的订单相对应。可以在订单创建时生成一个唯一的订单号,并将该订单号传递给支付接口。在支付成功后,通过订单号来更新订单的支付状态和相关信息。例如,在数据库中,可以通过订单号作为主键,将支付结果、支付时间等信息更新到对应的订单记录中。
# 假设订单号为order_id,支付结果为payment_result
import sqlite3
conn = sqlite3.connect('orders.db')
cursor = conn.cursor()
# 更新订单支付状态和结果
update_query = "UPDATE orders SET payment_status =?, payment_result =? WHERE order_id =?"
cursor.execute(update_query, ('paid', payment_result, order_id))
conn.commit()
conn.close()
(三)支付结果验证与反馈
- 验证支付结果:当支付完成后,支付平台会将支付结果通知发送给我们的应用。为了确保支付结果的真实性和完整性,需要对支付结果进行验证。以支付宝为例,支付宝会在回调通知中包含签名信息,我们可以使用支付宝公钥对签名进行验证。
from alipay import AliPay
# 初始化AliPay对象,传入支付宝公钥等信息
alipay = AliPay(
appid='your_app_id',
app_notify_url=None,
app_private_key_string='your_app_private_key',
alipay_public_key_string='your_alipay_public_key',
sign_type='RSA2',
debug=True
)
# 获取支付宝回调通知中的参数
params = request.POST.dict()
# 验证签名
result = alipay.verify(params, params.get('sign'))
if result:
# 签名验证通过,处理支付结果
trade_status = params.get('trade_status')
if trade_status == 'TRADE_SUCCESS':
print('支付成功')
else:
print('支付失败或其他状态')
else:
print('签名验证失败,支付结果可能被篡改')
微信支付同样会在回调通知中包含签名,我们可以使用微信支付提供的验证方法来验证签名:
from wechatpay import WeChatPay
# 初始化WeChatPay对象,传入商户号、API密钥等信息
wechatpay = WeChatPay(
appid='your_appid',
mchid='your_mchid',
api_key='your_api_key',
mch_cert_path='path/to/your_mch_cert.pem',
mch_key_path='path/to/your_mch_key.pem'
)
# 获取微信支付回调通知中的参数
result = request.json
# 验证签名
if wechatpay.verify_sign(result):
# 签名验证通过,处理支付结果
return_code = result.get('return_code')
result_code = result.get('result_code')
if return_code == 'SUCCESS' and result_code == 'SUCCESS':
print('支付成功')
else:
print('支付失败或其他状态')
else:
print('签名验证失败,支付结果可能被篡改')
- 反馈给用户:在验证支付结果后,需要将支付结果反馈给用户。可以通过多种方式进行反馈,如在网页上显示支付结果页面、发送短信通知、推送消息等。以在网页上显示支付结果为例,可以在支付成功或失败后,跳转到相应的结果页面,并在页面上显示支付结果信息。
from flask import Flask, redirect, render_template_string
app = Flask(__name__)
@app.route('/payment_result')
def payment_result():
# 假设通过查询数据库或其他方式获取支付结果
payment_status = 'paid' # 支付成功或其他状态
if payment_status == 'paid':
result_message = '支付成功!您的订单已完成。'
else:
result_message = '支付失败,请检查您的支付信息并重试。'
return render_template_string('''
<html>
<head>
<title>支付结果</title>
</head>
<body>
<h1>{{ result_message }}</h1>
</body>
</html>
''', result_message=result_message)
通过上述步骤,我们可以实现自主支付工作流,确保支付过程的安全、准确和用户体验的友好 。
六、整合 AI Agent 实现全自动流程
(一)AI Agent 与 Python 代码集成
将 AI Agent 集成到 Python 订票和支付代码中,是实现全自动工作流的关键一步。我们可以使用 Langchain 库来简化这一过程。Langchain 提供了丰富的工具和接口,能够方便地将大型语言模型(LLM)与外部工具和代码进行整合 。
首先,需要安装 Langchain 库和相应的模型。以使用 OpenAI 的 GPT-4 模型为例,安装命令如下:
pip install langchain openai
安装完成后,在代码中导入所需的模块:
from langchain.agents import initialize_agent, Tool
from langchain.agents.agent_types import AgentType
from langchain.chat_models import ChatOpenAI
import os
接下来,定义 AI Agent 可以使用的工具。在订票和支付场景中,这些工具可以是前面实现的订票和支付函数。例如,将查询车次的函数search_trains和提交订单并支付的函数submit_order_and_pay定义为工具:
def search_trains(from_location, to_location, travel_date):
# 实现查询车次的逻辑,返回车次信息
pass
def submit_order_and_pay(train_number, passenger_info, payment_method):
# 实现提交订单和支付的逻辑,返回支付结果
pass
tools = [
Tool(
name="Search Trains",
func=search_trains,
description="Use this tool to search for available trains. Input should be the departure location, arrival location, and travel date."
),
Tool(
name="Submit Order and Pay",
func=submit_order_and_pay,
description="Use this tool to submit a train ticket order and complete the payment. Input should be the train number, passenger information, and payment method."
)
]
然后,初始化 AI Agent,传入工具列表和语言模型:
# 设置OpenAI API密钥
os.environ["OPENAI_API_KEY"] = "your_openai_api_key"
# 初始化语言模型
llm = ChatOpenAI(temperature=0)
# 初始化AI Agent
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
这样,AI Agent 就与 Python 代码集成在一起了。用户可以通过向 AI Agent 发送自然语言指令,如 “预订明天从北京到上海的火车票,使用支付宝支付”,AI Agent 会根据指令调用相应的工具,完成订票和支付的操作 。
(二)任务调度与执行
为了实现全自动流程,需要设置任务调度,让 AI Agent 按照预定的时间或条件执行任务。可以使用 APScheduler 库来实现任务调度功能。
首先,安装 APScheduler 库:
pip install apscheduler
然后,在代码中导入并配置 APScheduler:
from apscheduler.schedulers.background import BackgroundScheduler
# 创建调度器
scheduler = BackgroundScheduler()
假设我们需要在每天早上 8 点自动查询并预订当天晚上从 A 地到 B 地的火车票,可以添加如下任务:
# 定义任务
def auto_book_ticket():
agent.run("预订今天晚上从A地到B地的火车票,使用微信支付")
# 添加任务到调度器,每天早上8点执行
scheduler.add_job(auto_book_ticket, 'cron', hour=8)
最后,启动调度器:
# 启动调度器
scheduler.start()
这样,每天早上 8 点,AI Agent 会自动执行订票和支付任务,实现了全自动的流程。在任务执行过程中,可以通过日志记录任务的执行情况,方便后续的调试和监控。例如,使用 Python 的 logging 模块记录日志:
import logging
# 配置日志
logging.basicConfig(filename='scheduler.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
# 在任务函数中记录日志
def auto_book_ticket():
try:
logging.info('开始执行自动订票任务')
agent.run("预订今天晚上从A地到B地的火车票,使用微信支付")
logging.info('自动订票任务执行成功')
except Exception as e:
logging.error(f'自动订票任务执行失败: {str(e)}')
(三)异常处理与优化
在全自动流程的执行过程中,可能会出现各种异常情况,需要进行有效的处理,以确保流程的稳定性和可靠性。
- 网络异常:在查询车次、提交订单或支付过程中,可能会遇到网络连接失败、超时等问题。可以使用try - except语句捕获异常,并进行相应的处理。例如,在查询车次的函数中添加网络异常处理:
import requests
def search_trains(from_location, to_location, travel_date):
try:
# 构造请求参数
params = {
'from': from_location,
'to': to_location,
'date': travel_date
}
# 发送请求获取车次信息
response = requests.get('https://trains.ctrip.com/TrainBooking/SearchTrain.aspx', params=params)
response.raise_for_status() # 检查请求是否成功
train_data = response.json()
return train_data
except requests.RequestException as e:
print(f'网络异常: {str(e)}')
return []
- 数据异常:如果获取到的车次信息、支付结果等数据格式不正确或不符合预期,可能会导致后续处理出错。可以在数据处理阶段添加数据校验和清洗的步骤。例如,在处理支付结果时,检查返回的结果是否包含必要的字段:
def process_payment_result(result):
if not isinstance(result, dict) or'result_code' not in result or'return_msg' not in result:
print('支付结果数据异常')
return False
result_code = result.get('result_code')
if result_code!='success':
print(f'支付失败: {result.get("return_msg")}')
return False
return True
- 优化建议:
-
- 缓存机制:为了减少重复查询和提高效率,可以引入缓存机制。例如,将查询到的车次信息缓存起来,在一定时间内如果再次查询相同条件的车次,可以直接从缓存中获取数据,而不需要重新发送请求。可以使用functools.lru_cache装饰器实现简单的缓存功能:
import functools
@functools.lru_cache(maxsize=128)
def search_trains(from_location, to_location, travel_date):
# 查询车次的逻辑
pass
- 并发处理:在查询车次和支付等操作中,可以考虑使用并发处理来提高执行效率。例如,使用asyncio库实现异步请求,同时查询多个车次的信息,或者同时处理多个支付请求:
import asyncio
import aiohttp
async def search_train_async(from_location, to_location, travel_date):
async with aiohttp.ClientSession() as session:
params = {
'from': from_location,
'to': to_location,
'date': travel_date
}
async with session.get('https://trains.ctrip.com/TrainBooking/SearchTrain.aspx', params=params) as response:
train_data = await response.json()
return train_data
async def main():
tasks = []
from_locations = ['北京', '上海', '广州']
to_locations = ['深圳', '成都', '杭州']
travel_date = '2024-12-31'
for from_loc, to_loc in zip(from_locations, to_locations):
task = asyncio.create_task(search_train_async(from_loc, to_loc, travel_date))
tasks.append(task)
results = await asyncio.gather(*tasks)
print(results)
if __name__ == "__main__":
asyncio.run(main())
通过以上的异常处理和优化措施,可以使自主订票 + 支付的全自动工作流更加稳定、高效地运行 。
七、实际应用案例展示
(一)案例背景与需求
在当今快节奏的生活中,人们对于出行便利性的要求越来越高。以一位经常出差的商务人士小李为例,他每月需要多次往返于不同城市之间进行商务活动。以往,他需要在繁忙的工作间隙手动预订火车票和支付,不仅耗费大量时间和精力,还容易因疏忽错过合适的车次或支付时间,给出行带来不便。
为了解决这一问题,小李决定尝试使用基于 Python 和 AI Agent 实现的自主订票 + 支付全自动工作流。他希望能够通过简单的自然语言指令,让系统自动完成从查询车次、选择合适的座位,到完成支付的一系列操作,从而节省时间和精力,专注于更重要的工作。
(二)使用效果与优势
在使用了自主订票 + 支付的全自动工作流后,小李的出行预订变得轻松高效。他只需在需要订票时,向 AI Agent 下达如 “预订下周五从上海到北京的高铁票,选择二等座,使用支付宝支付” 的指令,AI Agent 便会迅速响应,自动完成整个订票和支付流程。
通过这种方式,小李节省了大量原本用于手动操作的时间,平均每次订票节省了约 30 分钟。而且,由于 AI Agent 能够快速筛选车次和座位,并自动完成支付,大大提高了订票的成功率,避免了因手动操作不及时而导致的票源紧张问题。同时,自动化流程还减少了人为疏忽的可能性,确保了订票和支付信息的准确性。
(三)用户反馈与评价
小李对这一自动化流程给予了高度评价。他表示:“这个自主订票 + 支付系统简直是我的救星!以前每次出差订票都让我头疼不已,现在只需要一句话,一切都搞定了,太方便了!不仅节省了时间,还让我的出行更加顺利,再也不用担心错过车次或者支付问题了。”
除了小李,还有许多其他用户也对该自动化流程表示满意。他们纷纷反馈,这一系统的出现,让出行预订变得更加简单、快捷、可靠,真正实现了智能化的生活体验 。这些用户的反馈和评价,充分证明了基于 Python 和 AI Agent 的自主订票 + 支付全自动工作流在实际应用中的价值和优势。
八、总结与展望
(一)总结成果
通过本文的探索与实践,我们成功利用 Python 和 AI Agent 打造出了自主订票 + 支付的全自动工作流。从前期对 Python 环境的搭建、相关库的安装以及对订票和支付平台的分析,到逐步实现自主订票工作流中的模拟登录、车次查询与筛选、座位选择与订单提交,再到自主支付工作流的支付接口对接、支付信息处理以及支付结果验证与反馈,最后将 AI Agent 与 Python 代码集成,实现任务调度与执行,并对异常情况进行有效处理和优化,每一个环节都凝聚着技术的力量与智慧的结晶。
这一全自动工作流的实现,极大地提高了订票和支付的效率,将人们从繁琐的手动操作中解放出来。它不仅能够快速准确地完成订票和支付任务,还能根据用户的需求和偏好,智能地筛选出最合适的车次和座位,提供个性化的服务。同时,通过自动化流程,减少了人为错误的发生,提高了操作的准确性和可靠性 。
(二)未来发展方向
展望未来,AI Agent 在自动化领域有着广阔的发展前景。随着技术的不断进步,AI Agent 将具备更强的智能和自主决策能力,能够处理更加复杂的任务和场景。在订票和支付领域,AI Agent 可能会实现以下突破:
- 多平台融合:AI Agent 将能够同时对接多个订票和支付平台,综合比较不同平台的价格、服务和票源信息,为用户提供更加全面和优质的选择。例如,它可以在 12306、携程、飞猪等多个平台之间进行智能切换和信息整合,帮助用户找到性价比最高的出行方案。
- 智能推荐与预测:借助大数据分析和机器学习技术,AI Agent 能够根据用户的历史出行数据、偏好以及实时的市场动态,为用户提供更加精准的智能推荐。例如,预测用户可能感兴趣的车次、座位类型,提前为用户推荐合适的出行方案,甚至根据用户的习惯和需求,自动调整订票和支付策略。
- 跨领域应用拓展:AI Agent 的应用将不仅仅局限于订票和支付,还会拓展到整个出行领域,如酒店预订、租车服务、景点门票预订等。它可以为用户打造一站式的出行服务体验,根据用户的行程安排,自动协调各个环节的服务,实现无缝对接。