核心模块(Modules)
代理(Agents)
代理类型(AgentTypes)
React

ReAct

本次演示展示了如何使用一个 agent 来实现 ReAct (opens in a new tab) 的逻辑。

from langchain import hub
from langchain.agents import AgentExecutor, create_react_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_openai import OpenAI

初始化工具

让我们加载一些要使用的工具。

tools = [TavilySearchResults(max_results=1)]

创建 Agent

# 获取要使用的提示 - 您可以修改这个!
prompt = hub.pull("hwchase17/react")
# 选择要使用的 LLM
llm = OpenAI()
 
# 构建 ReAct agent
agent = create_react_agent(llm, tools, prompt)

运行 Agent

# 通过传入 agent 和 tools 来创建一个 agent executor
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
agent_executor.invoke({"input": "LangChain是什么?"})
 > 进入新的 AgentExecutor 链...
[32; 1m[1; 3m 我应该研究一下 LangChain 以了解更多信息。
动作: tavily_search_results_json
动作输入: "LangChain"  [0m[36; 1m[1; 3m[{'url': 'https://www.ibm.com/topics/langchain', 'content': 'LangChain 主要是 Python 和 Javascript 的抽象库,用于表示常见的步骤和概念  LangChain 是一个用于开发使用大型语言模型的应用程序的开源编排框架  其他 LangChain 功能,如同名的链条。  LangChain 提供了超过 25 种不同的嵌入方法的集成,以及超过 50 种不同的向量存储方式 LangChain 是一种使用大型语言模型(LLM)构建应用程序的工具,如聊天机器人和虚拟代理。它简化了编程和与外部数据源和软件工作流程的集成过程。它支持 Python 和 Javascript 语言,并支持各种 LLM 提供商,包括 OpenAI、Google 和 IBM。'}] [32; 1m[1; 3m 我应该阅读摘要并查看 LangChain 的不同功能和集成。
动作: tavily_search_results_json
动作输入: "LangChain 的功能和集成"  [0m[36; 1m[1; 3m[{'url': 'https://www.ibm.com/topics/langchain', 'content': "LangChain 提供了超过 25 种不同的嵌入方法的集成,以及超过 50 种不同的向量存储方式  LangChain 是一个用于开发使用大型语言模型的应用程序的开源编排框架  其他 LangChain 功能,如同名的链条。  LangChain 主要是 Python 和 Javascript 的抽象库,用于表示常见的步骤和概念由 Harrison Chase 于 2022 年 10 月推出,《LangChain》在 2023 年 6 月成为 Github 上增长最快的开源项目。   在接下来的一个月,随着 OpenAI 的 ChatGPT 的重大推出,LangChain 在促进生成 AI 的普及方面发挥了重要作用。"}] [32; 1m[1; 3m 我应该注意 LangChain 的发布日期和受欢迎程度。
动作: tavily_search_results_json
动作输入: "LangChain 的发布日期和受欢迎程度"  [0m[36; 1m[1; 3m[{'url': 'https://www.ibm.com/topics/langchain', 'content': "LangChain 是一个用于开发使用大型语言模型的应用程序的开源编排框架  其他 LangChain 功能,如同名的链条。  LangChain 提供了超过 25 种不同的嵌入方法的集成,以及超过 50 种不同的向量存储方式  LangChain 主要是 Python 和 Javascript 的抽象库,用于表示常见的步骤和概念由 Harrison Chase 于 2022 年 10 月推出,《LangChain》在 2023 年 6 月成为 Github 上增长最快的开源项目。   在接下来的一个月,随着 OpenAI 的 ChatGPT 的重大推出,LangChain 在促进生成 AI 的普及方面发挥了重要作用。"}] [32; 1m[1; 3m 我现在知道最终的答案了。
最终答案: LangChain 是一个使用大型语言模型(LLMs)构建应用程序的开源编排框架,例如聊天机器人和虚拟代理。它是由 Harrison Chase 于 2022 年 10 月推出的,2023 年 6 月,在 Github 上是增长最快的开源项目。

 > 完成链。





{'input': 'LangChain 是什么?',
 'output': 'LangChain 是一个使用大型语言模型(LLMs)构建应用程序的开源编排框架,例如聊天机器人和虚拟代理。它是由 Harrison Chase 于 2022 年 10 月推出的,2023 年 6 月,在 Github 上是增长最快的开源项目。'}

使用聊天历史

在使用聊天历史时,我们需要一个能考虑到这一点的提示。

# 获取要使用的提示 - 您可以修改这个!
prompt = hub.pull("hwchase17/react-chat")
# 构建 ReAct agent
agent = create_react_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
from langchain_core.messages import AIMessage, HumanMessage
 
agent_executor.invoke(
    {
        "input": "我的名字是什么?如果需要,请使用工具,否则用最终答案作出回应",
        # 注意,聊天历史是一个字符串,因为这个提示是针对 LLMs 而不是聊天模型的
        "chat_history": "Human: 你好!我的名字是Bob\nAI: 你好Bob!很高兴认识你",
    }
)
 > 进入新的 AgentExecutor 链...
[32; 1m[1; 3m 思考: 我是否需要使用工具?不需要
最终答案: 你的名字是 Bob。

 > 完成链。
    {'input': '我的名字是什么?如果需要,请使用工具,否则用最终答案作出回应',
     'chat_history': 'Human: 你好!我的名字是Bob\nAI: 你好Bob!很高兴认识你',
     'output': '你的名字是Bob。'}