Skip to main content

代理人

一些应用程序需要的不仅是预先确定的调用LLMs/其他工具的链,但可能是依赖于用户输入的未知链。在这些类型的链中,存在一个“代理人”,其可以访问一组工具。根据用户输入,代理人可以决定是否以及如何调用这些工具。

目前有两种主要类型的代理人:

  1. 动作代理人: 这些代理人决定要采取的行动并一步一步地采取这些行动
  2. 计划执行代理人: 这些代理人首先决定要执行的一系列行动计划,然后逐一执行这些行动。

你应该何时使用它们?

  • 动作代理人更为常规,适合处理小任务。
  • 对于更复杂或长期运行的任务,计划执行代理人的初始规划步骤有助于保持长期目标和关注点,但通常需要更多的调用和更高的延迟。

这两种代理人也不是互斥的 - 实际上,通常最好由动作代理人负责执行计划和执行代理人。

动作代理人

一个动作代理人的高级伪代码如下:

  • 接收一些用户输入
  • 代理人决定使用哪个工具(如果有的话),以及该工具的输入应该是什么。

使用工具输入调用那个工具,并记录观察结果(这只是调用该工具输入的输出)。 将工具的历史记录、工具输入观察结果传回到代理程序,然后它决定下一步该怎么做。 重复上述步骤,直到代理程序决定不再需要使用工具,然后直接回应用户。

interface AgentStep {

action: AgentAction;

observation: string;

}



interface AgentAction {

tool: string; // Tool.name

toolInput: string; // Tool.call argument

}



interface AgentFinish {

returnValues: object;

}



class Agent {

plan(steps: AgentStep[], inputs: object): Promise<AgentAction | AgentFinish>;

}

计划和执行代理

计划和执行代理的高级伪代码大致如下:

  • 接收到一些用户输入
  • 计划者列出要采取的步骤
  • 执行者逐个执行步骤,直到输出最终结果

当前实现的方式是使用LLMChain作为计划者,使用Action Agent作为执行者。

深入了解