LangChain,一个强大的工具,允许根据用户输入创建对语言模型和其他工具的复杂调用链。就像拥有一个私人助理,可以根据手头的任务做出决定。本文来分享一下在 LangChain 中使用 Agents 的心路历程。
LangChain中代理的概念
在 LangChain 中,代理是一个组件,可以访问一套工具,并可以根据用户的输入决定使用哪个工具。有两种主要类型的代理:行为代理 Action Agents
和 计划和执行代理 Plan-and-Execute Agents
。
行为代理 Action Agents
决定采取的动作并一次一步地执行该动作。它们更传统,适用于小型任务。计划和执行代理 Plan-and-Execute Agents
首先决定要采取的行动计划,然后一次执行这些行动。它们非常适合更复杂或长期运行的任务,因为初始规划步骤有助于保持长期目标和重点。然而,这伴随着更多调用和更高延迟的权衡。
Agent剖析
LangChain 中的代理由几个关键组件组成:
- 代理:这是应用程序逻辑所在的地方。它接受用户输入以及代理已采取的先前步骤的列表,并返回 AgentAction 或 AgentFinish。
- 工具:这些是代理可以采取的行动。为代理提供的工具在很大程度上取决于希望代理做什么。
- 工具包:这些是为特定用例设计的工具组。
- 代理执行器:这包装了一个代理和一系列工具。它负责迭代地运行代理,直到满足停止条件。
Agents 体验
现在来动手看看如何在实践中使用代理。为此,将使用 LangChain 提供的最简单、最高级别的 API。
首先,需要了解几个关键概念:
- 工具:执行特定任务的功能。这可以是 Google 搜索、数据库查找、Python REPL 和其他链。工具的接口目前是一个函数,期望将字符串作为输入,将字符串作为输出。
- LLM:为代理提供支持的语言模型。
- 代理:要使用的代理。这应该是一个引用支持代理类的字符串。
下面是一个如何初始化和运行代理的简单示例:
from langchain.agents import load_tools from langchain.agents import initialize_agent from langchain.agents import AgentType from langchain.llms import OpenAI # Load the language model llm = OpenAI(temperature=0) # Load some tools to use tools = load_tools(["serpapi", "llm-math"], llm=llm) # 使用工具、语言模型和代理类型初始化代理 agent = initialize_agent( tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True) # Test the agent NBA东部决赛比赛结果如何? 如何评价这场比赛? 如何评价这场比赛? agent.run( "What was the outcome of the NBA Eastern Conference finals? How to evaluate the match? How do you comment on the match?")
这个代理会给出答案,这场NBA东部决赛的比赛刚结束,Agent给出了正确的答案。
总结
总之,LangChain 中的代理是一个强大的工具,可以帮助创建对语言模型和其他工具的复杂调用链。它们可以定制以满足特定需求,无论是针对小型任务还是更复杂的长期运行任务。关键是要了解代理的不同组件以及它们如何协同工作以根据用户输入做出决策。