Skip to main content

Agents

代理的核心思想是使用LLM来选择要采取的一系列动作。 在链式结构中,一系列动作是硬编码的(在代码中)。 在代理中,使用语言模型作为推理引擎来确定要采取的动作及其顺序。

这里有几个关键组件:

代理

这是负责决定下一步采取什么动作的类。 这是由语言模型和提示驱动的。 该提示可以包括以下内容:

  1. 代理的个性(对于以某种方式响应很有用)
  2. 代理的背景上下文(对于给予其更多关于所要求完成的任务类型的上下文很有用)
  3. 调用更好推理的提示策略(最著名/广泛使用的是ReAct

LangChain提供了几种不同类型的代理来入门。 即使如此,您可能还希望使用部分(1)和(2)自定义这些代理。 有关代理类型的完整列表,请参见代理类型

工具

工具是代理调用的函数。 这里有两个重要的考虑因素:

  1. 给代理访问正确工具的权限
  2. 以对代理最有帮助的方式描述工具

如果没有这两者,您想要构建的代理将无法工作。 如果您不给代理访问正确工具的权限,它将永远无法完成目标。 如果您不正确描述工具,代理将不知道如何正确使用它们。

LangChain提供了一系列广泛的工具来入门,同时也可以轻松定义自己的工具(包括自定义描述)。 有关工具的完整列表,请参见这里

工具包

代理可以访问的工具集合通常比单个工具更重要。 为此,LangChain提供了工具包的概念-用于实现特定目标所需的一组工具。 通常一个工具包中有3-5个工具。

LangChain提供了一系列广泛的工具包来入门。 有关工具包的完整列表,请参见这里

代理执行器

代理执行器是代理的运行时。 这是实际调用代理并执行其选择的动作的部分。 以下是此运行时的伪代码:

next_action = agent.get_action(...)
while next_action != AgentFinish:
observation = run(next_action)
next_action = agent.get_action(..., next_action, observation)
return next_action

虽然这看起来很简单,但此运行时为您处理了几个复杂性,包括:

  1. 处理代理选择不存在的工具的情况
  2. 处理工具发生错误的情况
  3. 处理代理生成无法解析为工具调用的输出的情况
  4. 在所有级别上记录和可观察性(代理决策,工具调用)-可以输出到stdout或LangSmith

其他类型的代理运行时

AgentExecutor类是LangChain支持的主要代理运行时。 然而,我们还支持其他更实验性的运行时。 包括:

入门

from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI

首先,让我们加载我们要用来控制代理的语言模型。

llm = OpenAI(temperature=0)

接下来,让我们加载一些要使用的工具。请注意,llm-math 工具使用了一个 LLM,所以我们需要传递它。

tools = load_tools(["serpapi", "llm-math"], llm=llm)

最后,让我们使用这些工具、语言模型和我们想要使用的代理类型来初始化一个代理。

agent = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)

现在让我们来测试一下!

agent.run("Who is Leo DiCaprio's girlfriend? What is her current age raised to the 0.43 power?")
    

> Entering new AgentExecutor chain...
I need to find out who Leo DiCaprio's girlfriend is and then calculate her age raised to the 0.43 power.
Action: Search
Action Input: "Leo DiCaprio girlfriend"
Observation: Camila Morrone
Thought: I need to find out Camila Morrone's age
Action: Search
Action Input: "Camila Morrone age"
Observation: 25 years
Thought: I need to calculate 25 raised to the 0.43 power
Action: Calculator
Action Input: 25^0.43
Observation: Answer: 3.991298452658078

Thought: I now know the final answer
Final Answer: Camila Morrone is Leo DiCaprio's girlfriend and her current age raised to the 0.43 power is 3.991298452658078.

> Finished chain.





"Camila Morrone is Leo DiCaprio's girlfriend and her current age raised to the 0.43 power is 3.991298452658078."