我正在参加「豆包MarsCode AI练中学体验活动」详情请看:掘金小册上线 AI练中学功能 | 你的 AI 编程助教喊你免费领小册啦!
代理
我们可以将代理 (Agents) 视为 LLMs 的工具 (Tools) 。就像人类使用计算器进行数学计算或在 Google 中搜索信息一样,代理 (Agents) 允许 LLM 做同样的事情。
代理 (Agents) 是可以使用计算器、搜索或执行代码的 LLMs。
使用代理 (Agents) ,LLM 可以编写和执行 Python 代码。它可以搜索信息,甚至查询 SQL 数据库。
代理工具
要使用代理 (Agents) ,我们需要三样东西:
- 一个基本的 LLM,
- 我们将要进行交互的工具 Tools,
- 一个控制交互的代理 (Agents) 。
代理类型
Zero Shot ReAct
我们使用此代理 (Agents) 在某些输入上执行 “zero-shot” 任务。这意味着代理 (Agents) 仅考虑与代理 (Agents) 的 一次 交互——它将没有 记忆。
初始化:
from langchain.agents import initialize_agent
zero_shot_agent = initialize_agent(
agent = "zero-shot-react-description",
tools = tools,
llm = llm,
verbose = True,
max_iterations = 3,
)
Answer the following questions as best you can. You have access to the following tools:
Calculator: Useful for when you need to answer questions about math.
Stock DB: Useful for when you need to answer questions about stocks and their prices.
Use the following format:
Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [Calculator, Stock DB]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can repeat N times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question
Begin!
Question: {input}
Thought:{agent_scratchpad}
我们首先告诉 LLM 它可以使用的工具(Calculator 和 Stock DB)。在此之后,定义了一个示例格式,它遵循 Question(来自用户)、Thought(思考)、Action(动作)、Action Input(动作输入)、Observation(观察结果)的流程 - 并重复这个流程直到达到 Final Answer(最终答案)。
这些工具和思考过程将 LangChain 中的 agents 与 chains 分开。而 chain 定义了一种即时的输入/输出过程,agents 的逻辑允许一步一步地进行思考。这种一步一步的过程的优势在于 LLM 可以通过多个推理步骤或工具来得出更好的答案。
agent_scratchpad 是我们添加代理 (Agents) 已经执行的 每个 思考或动作的地方。所有的思考和动作(在 当前 代理 (Agents) 执行器链中)都可以被 下一个 思考-动作-观察循环访问,从而实现代理 (Agents) 动作的连续性。
会话式 ReAct Conversational ReAct
Zero-shot 代理 (Agents) 的效果很好,但缺乏会话式记忆。 这种缺乏记忆的情况对于需要在对话中 记住 以前的交互的聊天机器人类型的用例来说可能是有问题的。
我们可以使用 conversational-react-description 代理 (Agents) 来 记住 交互。
我们可以将这个代理 (Agents) 看作是我们之前的 Zero Shot ReAct 代理 (Agents) ,但具有 对话记忆。
初始化:
from langchain.memory import ConversationBufferMemory
memory = ConversationBufferMemory(memory_key =" chat_history ")
ReAct 文档存储
另一个常见的代理 (Agents) 是 react-docstore 代理 (Agents) 。与之前一样,它使用 ReAct 方法,但现在明确地用于使用 LangChain 的 docstore 进行信息搜索和查找。
LangChain docstore 允许我们使用传统的检索方法存储和检索信息。其中一个 docstore 是维基百科,它使我们能够访问站点上的信息。
共有两种 docstore 方法来实现这个代理 (Agents), 分别是: Search 和 Lookup。
- 使用
Search,我们的代理 (Agents) 将搜索相关文章; - 使用
Lookup,代理 (Agents) 将在检索到的文章中找到相关的信息块。
初始化这工具:
from langchain import Wikipedia
from langchain.agents.react.base import DocstoreExplorer
docstore = DocstoreExplorer(Wikipedia())
tools = [
Tool(
name = "Search",
func = docstore.search,
description ='search wikipedia'
),
Tool(
name = "Lookup",
func = docstore.lookup,
description ='lookup a term in wikipedia'
)
]
初始化代理:
docstore_agent = initialize_agent(
tools,
llm,
agent = "react-docstore",
verbose = True,
max_iterations = 3
)