Skip to content

低级别代理 API#

我们提供了一个低级别的代理 API,除了简单地执行用户查询之外,还提供了许多功能。

这些功能让您可以以更精细的方式逐步跟踪和控制代理。最终目标是,您可以在您的数据上创建可靠的代理软件系统。

我们从 Agent ProtocolOpenAI Assistants API 以及一系列 代理 研究 论文 中汲取了灵感。

注意:这仍在开发中,因此接口可能会发生变化。事实上,我们很乐意听取您的反馈,以改进这一点。

高级代理架构#

我们的“代理”由与“代理工作者”交互的AgentRunner对象组成:

  • AgentRunner 是编排者,负责存储状态(包括对话记忆)、创建和维护任务、通过每个任务运行步骤,并为用户提供面向用户的高级接口。
  • AgentWorker 控制任务的逐步执行。给定一个输入步骤,代理工作者负责生成下一个步骤。它们可以使用参数进行初始化,并根据从任务/任务步骤对象传递下来的状态进行操作,但本身并不固有地存储状态。外部的AgentRunner负责调用AgentWorker并收集/聚合结果。

一些辅助类:

  • Task:高级任务,接收用户查询并传递其他信息,如记忆
  • TaskStep:表示单个步骤。将其作为输入提供给AgentWorker,得到一个TaskStepOutput。完成一个Task可能涉及多个TaskStep
  • TaskStepOutput:给定步骤执行的输出。输出任务是否完成。

好处#

以下是使用这个低级别 API 的一些关键好处:

  • 将任务创建与执行分离 - 控制何时执行给定任务。
  • 获得对每个步骤执行的更大调试能力。
  • 获得更大的可见性:查看已完成的步骤和下一步。
  • [即将推出] 可操纵性:通过注入人类反馈直接控制/修改中间步骤
  • 放弃任务:如果任务在执行过程中出现偏离,可以放弃,而不影响核心代理记忆。
  • [即将推出] 撤销步骤。
  • 更容易定制:通过实现AgentWorker,可以轻松地对代理算法进行子类化/实现(包括 ReAct、OpenAI,以及 plan+solve、LLMCompiler)。

使用模式#

您可以使用OpenAIAgentReActAgent,或通过AgentRunnerAgentWorker创建自己的代理:

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))

注意:旧的OpenAIAgentReActAgent的遗留实现(不允许逐步执行)仍然可以通过以下方式使用:

from llama_index.core.agent import OldOpenAIAgent, OldReActAgent

附加模块指南#

查看我们的低级别代理模块指南以获取更多详细信息!