打造企业专属人工智能助理
简介
而在前面介绍React 推理提示的时候讲到了,目前的大语言模型本身不具备任何的执行能力,只具备理解自然语言的能力。
而如果要打造企业专属的人工智能助理,这个助理除了要具备“听懂人话的能力”,还需要具备执行动作的能力。要不然和问答机器人就没有任何区别了。所以本章节要完成的一个实践示例,就是让大模型具备“听懂人话”+“执行动作”的能力。
应用场景
智能助理由于具备“听懂人话”+“执行动作”的能力,所以其可拓展性是非常强的。理论上来说,所有的操作都能通过智能助理实现。比如如下几个场景。
- 智能查天气助理。
- 智能提 bug 助理。
- 其他操作场景。
只是越复杂的应用场景,中间牵涉到的工具和执行步骤也就越多越复杂。
实践演练
那么如果要实现打造企业专属人工智能助理,其实也是有多种方式的:
- openai 官方提供的 assistant。
- 人工智能应用框架,比如 LangChain。
assistant 目前相比于 LangChain。因为和 ChatGPT 强绑定,所以自然有一定的局限性。但是优点就是非常的简单且容易上手,如果可以接受 token 比较昂贵的消费。那么使用 assistant 也是一个非常好的选择。
而 LangChain 其灵活性则更强,会在后面的章节进行进一步的介绍。
使用官方的 assistant
点击查看官方 assistant 使用教程
假设我们现在的需求,是要让人工智能助理编造一条笑话,并且使用邮箱进行发送,那么整体流程应该如下:
对应代码:
import json import os import time import requests from openai import OpenAI client = OpenAI(api_key=os.environ.get("OPENAI_API_KEY")) # 一个发送邮件的函数工具 def send_email(quote, recipient="霍格沃兹测试开发学社@email.com"): # Print the quote and recipient for debugging purposes print(f"生成消息:\n {quote}\n\n发送邮件给: {recipient}") # Return a success message return "发送邮件给" + recipient # 工具的提示词。为了让大模型更好理解工作的作用。 tools = [{ "type": "function", "function": { "name": "send_email", "description": "Sends a quote via email", "parameters": { "type": "object", "properties": { "quote": { "type": "string", "description": "A generated funny quote" } }, "required": [ "quote" ] } } }] # 1. 创建助手 assistant = client.beta.assistants.create( name="Wise Guy", instructions="你是一位聪明的哲学家,会产生有趣的引言。", model="gpt-3.5-turbo-1106", tools=tools ) # 2. 创建线程 thread = client.beta.threads.create() # 3. 传入 prompt 并执行线程 message = client.beta.threads.messages.create( thread_id=thread.id, role="user", content="创建一个笑话并且使用邮件发送", ) # 4. 执行消息 run_res = client.beta.threads.runs.create( thread_id=thread.id, assistant_id=assistant.id, ) # 5. 等待回复 def wait_on_run(run): while run.status == "queued" or run.status == "in_progress": run = client.beta.threads.runs.retrieve( thread_id=thread.id, run_id=run.id, ) print(f"执行的状态为:{run.status}") time.sleep(0.5) return run # 6. 获取回复的结果 run_res = wait_on_run(run_res) # 7. 如果回复的结果需要调用工具 if run_res.status == "requires_action": # 提交工具的返回信息 tool_call = run_res.required_action.submit_tool_outputs.tool_calls[0] name = tool_call.function.name arguments = json.loads(tool_call.function.arguments) print("等待返回的参数:", name) print(f"函数参数为:{arguments}") # 调用发送邮件工具 task = send_email(**arguments) # 提交工具执行后的结果信息。 run = client.beta.threads.runs.submit_tool_outputs( thread_id=thread.id, run_id=run_res.id, tool_outputs=[ { "tool_call_id": tool_call.id, "output": "done", } ], ) print("==========调用 chatgpt 执行内容") run = wait_on_run(run) print("==========获取返回信息") print(client.beta.threads.messages.list(thread_id=thread.id, order="asc").model_dump_json(indent=2))
其他方式
- 结合 LangChain 等人工智能应用框架完成。
总结
- 企业专属人工智能助理的产品需求。
- 企业专属人工智能助理的实现方案。
- 使用官方 assistant 实现企业专属人工智能助理。