Agents
代理的核心思想是使用LLM来选择要采取的一系列动作。 在链式结构中,一系列动作是硬编码的(在代码中)。 在代理中,使用语言模型作为推理引擎来确定要采取的动作及其顺序。
这里有几个关键组件:
代理
这是负责决定下一步采取什么动作的类。 这是由语言模型和提示驱动的。 该提示可以包括以下内容:
- 代理的个性(对于以某种方式响应很有用)
- 代理的背景上下文(对于给予其更多关于所要求完成的任务类型的上下文很有用)
- 调用更好推理的提示策略(最著名/广泛使用的是ReAct)
LangChain提供了几种不同类型的代理来入门。 即使如此,您可能还希望使用部分(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
虽然这看起来很简单,但此运行时为您处理了几个复杂性,包括:
- 处理代理选择不存在的工具的情况
- 处理工具发生错误的情况
- 处理代理生成无法解析为工具调用的输出的情况
- 在所有级别上记录和可观察性(代理决策,工具调用)-可以输出到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."