低级别代理 API#
我们提供了一个低级别的代理 API,除了简单地执行用户查询之外,还提供了许多功能。
这些功能让您可以以更精细的方式逐步跟踪和控制代理。最终目标是,您可以在您的数据上创建可靠的代理软件系统。
我们从 Agent Protocol、OpenAI Assistants API 以及一系列 代理 研究 论文 中汲取了灵感。
注意:这仍在开发中,因此接口可能会发生变化。事实上,我们很乐意听取您的反馈,以改进这一点。
高级代理架构#
我们的“代理”由与“代理工作者”交互的AgentRunner
对象组成:
AgentRunner
是编排者,负责存储状态(包括对话记忆)、创建和维护任务、通过每个任务运行步骤,并为用户提供面向用户的高级接口。AgentWorker
控制任务的逐步执行。给定一个输入步骤,代理工作者负责生成下一个步骤。它们可以使用参数进行初始化,并根据从任务/任务步骤对象传递下来的状态进行操作,但本身并不固有地存储状态。外部的AgentRunner
负责调用AgentWorker
并收集/聚合结果。
一些辅助类:
Task
:高级任务,接收用户查询并传递其他信息,如记忆TaskStep
:表示单个步骤。将其作为输入提供给AgentWorker
,得到一个TaskStepOutput
。完成一个Task
可能涉及多个TaskStep
。TaskStepOutput
:给定步骤执行的输出。输出任务是否完成。
好处#
以下是使用这个低级别 API 的一些关键好处:
- 将任务创建与执行分离 - 控制何时执行给定任务。
- 获得对每个步骤执行的更大调试能力。
- 获得更大的可见性:查看已完成的步骤和下一步。
- [即将推出] 可操纵性:通过注入人类反馈直接控制/修改中间步骤
- 放弃任务:如果任务在执行过程中出现偏离,可以放弃,而不影响核心代理记忆。
- [即将推出] 撤销步骤。
- 更容易定制:通过实现
AgentWorker
,可以轻松地对代理算法进行子类化/实现(包括 ReAct、OpenAI,以及 plan+solve、LLMCompiler)。
使用模式#
您可以使用OpenAIAgent
或ReActAgent
,或通过AgentRunner
和AgentWorker
创建自己的代理:
from llama_index.core.agent import AgentRunner
from llama_index.agent.openai import OpenAIAgentWorker
# 从工具构建 OpenAIAgent
openai_step_engine = OpenAIAgentWorker.from_tools(tools, llm=llm, verbose=True)
agent = AgentRunner(openai_step_engine)
# 创建任务
task = agent.create_task("What is (121 * 3) + 42?")
# 执行步骤
step_output = agent.run_step(task)
# 如果 step_output 完成,完成响应
if step_output.is_last:
response = agent.finalize_response(task.task_id)
# 列出任务
task.list_tasks()
# 获取已完成的步骤
task.get_completed_steps(task.task_id)
print(str(response))
注意:旧的OpenAIAgent
和ReActAgent
的遗留实现(不允许逐步执行)仍然可以通过以下方式使用:
from llama_index.core.agent import OldOpenAIAgent, OldReActAgent
附加模块指南#
查看我们的低级别代理模块指南以获取更多详细信息!