LangChain学习(七)

105 阅读3分钟

我正在参加「豆包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
)