4、AI能力接入:调用百度AI开放平台API(文字识别)、调用OpenAI API(文本生成)、在RPA流程中集成AI服务。
好,咱们进入第四讲。前面几章我们把RPA的基础操作和流程设计讲透了,但说实话,纯RPA能干的事是有天花板的。你想想看,遇到一张模糊的发票照片,或者需要根据上下文写一段回复,传统RPA就抓瞎了。这时候,就得请AI出场。
这一章,我带你亲手把两个最常用的AI服务——百度的文字识别和OpenAI的文本生成——接入到RPA流程里。说白了,就是给机器人装上「眼睛」和「大脑」。
4.1 调用百度AI开放平台API(文字识别)
先聊文字识别。我在项目里遇到过最头疼的场景:客户发来一堆手机拍的合同照片,要提取里面的关键字段。人工录入?几百页,眼睛会瞎。用OCR?嗯,百度这个接口,我用了好几年,稳定且便宜。
4.1.1 准备工作:获取API Key
你得先去百度AI开放平台注册个账号,创建一个应用。拿到三个东西:AppID、API Key、Secret Key。这三个玩意儿就像你家的门牌号、钥匙和密码,缺一不可。
拿到之后,咱们用Python写个获取Access Token的函数。百度API的认证机制是先用这三个参数换一个临时令牌(Access Token),再用令牌去调识别接口。令牌有效期大概一个月,过期了重新换就行。
import requests
import base64
def get_access_token(api_key, secret_key):
url = "https://aip.baidubce.com/oauth/2.0/token"
params = {
"grant_type": "client_credentials",
"client_id": api_key,
"client_secret": secret_key
}
response = requests.post(url, params=params)
return response.json().get("access_token")
4.1.2 调用通用文字识别接口
拿到Token后,就可以调真正的OCR接口了。我个人习惯把图片转成base64格式传过去,这样不用管文件路径,更灵活。
def ocr_image(image_path, access_token):
url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"
with open(image_path, "rb") as f:
img_base64 = base64.b64encode(f.read()).decode("utf-8")
params = {
"access_token": access_token,
"image": img_base64
}
headers = {"Content-Type": "application/x-www-form-urlencoded"}
response = requests.post(url, headers=headers, data=params)
result = response.json()
# 提取所有文字
words = [item["words"] for item in result.get("words_result", [])]
return "\n".join(words)
这里有个小坑:百度返回的字段叫 words_result,不是 words。我第一次调的时候直接取错了字段,debug了半天。你记住,返回结构是个列表,每个元素里有个 words 键。
4.1.3 在RPA中集成
在RPA工具里(比如UiPath或影刀),你只需要用一个「执行Python脚本」的活动,把上面这段代码嵌进去。输入参数是图片路径,输出就是识别出来的文本字符串。然后RPA拿到这个字符串,就可以做后续的录入、比对、存档了。
4.2 调用OpenAI API(文本生成)
OCR解决了「看」的问题,那「写」呢?比如自动生成产品描述、回复客户邮件、总结会议纪要。这时候OpenAI的GPT模型就派上用场了。
4.2.1 环境准备与API调用
首先,你得有OpenAI的API Key。去platform.openai.com申请,充个几美元够用很久。然后安装 openai 库:
pip install openai
调用方式很简单,但要注意:OpenAI的API版本更新很快。我写这段时用的是 v1.0.0 之后的版本,接口风格变了,不再是 openai.Completion.create,而是用 client.chat.completions.create。
from openai import OpenAI
client = OpenAI(api_key="你的API_KEY")
def generate_text(prompt, model="gpt-3.5-turbo"):
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": "你是一个专业的自动化助手。"},
{"role": "user", "content": prompt}
],
temperature=0.7,
max_tokens=500
)
return response.choices[0].message.content
为什么用 chat.completions 而不是 completions?因为Chat模型更便宜、更听话。你想想看,给它一个system prompt设定角色,它就知道自己是「自动化助手」而不是「诗人」,输出会更可控。
4.2.2 实际场景:自动生成邮件回复
我在做客服自动化时,经常需要根据客户的问题生成回复草稿。RPA先抓取客户留言,传给OpenAI,拿到回复后再粘贴到邮件系统里。流程大概这样:
- RPA读取Excel中的客户问题
- 拼接prompt:「请根据以下客户问题,生成一封礼貌且专业的回复邮件:{问题}」
- 调用
generate_text()获取回复 - RPA将回复填入邮件正文,点击发送
4.3 在RPA流程中集成AI服务
好,现在两个API都会调了。但怎么把它们无缝嵌入到RPA流程里?总不能让人手动跑Python脚本吧。这里我分享三种集成方式,按复杂度排序。
4.3.1 方式一:直接调用Python脚本
最直接的方法。RPA工具基本都支持「运行Python脚本」或「执行命令行」。你把上面两个功能封装成两个函数,保存为 ai_services.py。然后在RPA里这样调用:
- 步骤1:获取图片路径 → 调用
python ai_services.py ocr 图片路径 - 步骤2:拿到OCR结果 → 调用
python ai_services.py generate "请总结以下内容:{OCR结果}" - 步骤3:把生成结果写入Excel或数据库
这种方式适合快速验证。缺点是需要本地有Python环境,而且RPA和Python之间的数据传递靠标准输出,容易出编码问题。我建议统一用UTF-8,并在Python脚本里用 sys.stdout.reconfigure(encoding='utf-8') 强制指定。
4.3.2 方式二:封装为HTTP微服务
如果流程复杂,或者要多人共用,我推荐把AI能力封装成一个Web服务。用Flask写个简单的API:
from flask import Flask, request, jsonify
import your_ai_module # 刚才写的OCR和GPT函数
app = Flask(__name__)
@app.route('/ocr', methods=['POST'])
def ocr():
image_data = request.json.get('image_base64')
result = your_ai_module.ocr_base64(image_data)
return jsonify({"text": result})
@app.route('/generate', methods=['POST'])
def generate():
prompt = request.json.get('prompt')
result = your_ai_module.generate_text(prompt)
return jsonify({"text": result})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
然后在RPA里用「HTTP请求」活动,POST数据到这个服务。好处是RPA端不需要装Python,只需要能发HTTP请求就行。而且这个服务可以部署在服务器上,多个机器人共享。
4.3.3 方式三:使用RPA内置的AI活动(如果有)
像UiPath 2023以后的版本,内置了「AI Center」和「OpenAI连接器」。你可以在UiPath里直接拖一个「调用OpenAI模型」的活动,填上API Key和Prompt就行。连代码都不用写。
但说实话,这种方式灵活性差一些。比如你想在调用前对图片做预处理,或者想自定义错误重试逻辑,还是得回到代码方式。我个人习惯:简单场景用内置活动,复杂场景用HTTP微服务。
4.4 避坑指南与最佳实践
最后,分享几个我踩过的坑,你遇到了能少走弯路。
- API调用频率限制: 百度OCR免费版每秒只能调2次。我曾在处理批量发票时没加延时,直接被封了10分钟。解决方案:在RPA循环里加
Delay(500)毫秒,或者用队列控制并发。 - OpenAI的Token消耗: 每次调用都计费,长文本尤其贵。我建议在prompt里限制
max_tokens,别让它自由发挥写一篇论文出来。另外,把常用的system prompt缓存起来,别每次都传一大段。 - 错误处理: 网络请求一定会失败。我在每个API调用外面都套了try-except,失败后重试3次,每次间隔2秒。RPA流程里再加一个「如果失败则发送告警邮件」的分支。
- 数据隐私: 调用外部API意味着数据离开你的电脑。如果处理的是客户身份证、合同金额等敏感信息,建议先脱敏,或者用私有化部署的模型。百度有私有化OCR方案,OpenAI也有Azure版本,数据不出境。
好了,这一章的内容就这些。你掌握了百度OCR和OpenAI GPT的调用方法,也知道了三种集成方式。下一章,我们会把这些能力组合起来,做一个真正的智能自动化助手——能看、能想、能干活的机器人。到时候你会发现,RPA+AI的组合拳,威力远超你想象。