Assistant API 支持函数调用(Function Calling),让智能体能够根据您的需求自动调用外部函数。例如,智能体可以调用函数进行文本翻译或处理其他任务。本文介绍了一个简单的"翻译助手"示例,帮助您快速上手函数调用的基本方法。
快速开始
在这个示例中,我们将创建一个翻译助手,并创建一个函数translate_text作为智能体可以调用的工具。在这个示例中,我们将询问智能体将"Hello world"翻译成中文。
在您开始前
首先,确保您已经安装了必要的依赖库,如 requests 和 dashscope。您可以通过以下命令安装它们:
第一步:创建"翻译文本"函数
我们首先创建一个简单的翻译函数,用于演示目的,它使用预定义的翻译对照表。
- 翻译功能:通过预定义的翻译对照表来模拟翻译功能,支持多种语言之间的转换。
- 错误处理:包含了基本的错误处理机制,确保函数在各种情况下都能返回合适的响应。
第二步:描述"翻译文本"函数
您需要向智能体描述"翻译文本"函数。智能体会根据描述信息正确调用翻译函数。
- name: 函数的名称为 translate_text,将在智能体中被调用。
- description: 提供了该工具的描述,帮助用户理解其用途。
- parameters: 定义了函数的参数,包括要翻译的文本和目标语言。
第三步:创建智能体
现在我们可以创建一个 Assistant 实例,它是一个智能体,并且将会使用我们定义的翻译工具。
- model: 使用的模型类型,这里是 qwen-plus,它支持语言理解和任务处理。
- name: 给智能体命名为"Translation Assistant"。
- description: 描述了智能体的功能,它能够帮助用户进行文本翻译。
- tools: 注册了我们之前定义的 translation_tool,使得智能体可以调用该工具。
第四步:创建对话线程并与智能体互动
创建一个新的对话线程,并向其中添加用户消息,然后运行智能体,处理用户的问题。
- Threads.create(): 创建一个新的对话线程,后续的消息将在此线程中进行。
- Messages.create(): 向线程添加用户消息,这里用户请求将"Hello world"翻译成中文。
- Runs.create(): 触发智能体开始处理用户消息。
- Runs.wait(): 等待智能体处理完毕。
第五步:处理函数调用并返回结果
如果智能体在处理过程中需要调用工具,我们将调用 translate_text 函数进行翻译,并将结果返回给用户。
- 检查函数调用:如果智能体需要调用某个函数,我们检查它调用的是否是 translate_text,并通过之前定义的函数进行翻译。
- 提交结果:将翻译结果通过 Runs.submit_tool_outputs 返回给智能体,并继续等待智能体的下一步回复。
第六步:获取智能体的回复
智能体处理完成后,我们可以从对话线程中获取智能体的回复并展示给用户。
总结
通过以上步骤,您已经成功创建了一个智能体,它可以处理用户的翻译请求,并使用翻译函数来完成文本转换。Assistant API 使得构建复杂的任务驱动型智能体变得简单且高效。
您可以根据需求进一步扩展智能体的功能,例如增加更多工具或修改智能体的行为指令。
快速生成业务函数的描述信息
在快速入门案例中,您需要向智能体描述“翻译文本”函数,而这一过程比较繁琐。因此,我们提供了一个简单的转换函数,帮助您快速描述业务函数。
使用流式输出
推荐您先了解流式输出的基本用法,再阅读本章节内容。在流式输出下,您需要修改第五步:处理函数调用并返回结果的代码逻辑,这是因为 Runs 现在返回的是 Assistant 事件流。 当 Assistant 决定调用函数时,Runs 会返回事件
thread.run.requires_action和大模型给出的入参信息 data.required_action.submit_tool_outputs.tool_calls,您需要在此时提交函数输出结果。
请注意,在提交函数输出run = Runs.submit_tool_outputs时,也需启用流式输出。