LangChain教程 - Agent - 支持 9 种 ReAct 交互

打印 上一主题 下一主题

主题 982|帖子 982|积分 2956

弁言

LangChain 总结了 9 种经典的复杂模子交互模式,每种都针对特定使命计划,兼具独特上风与实用场景,内容涵盖: ReAct、Function Call、知识库、搜刮等,利用这些模式可以大大简化这些场景开发难度。这些模式可以利用Agent情势来利用,并以AgentType来做区分,详见下面实例。在开发时,选择符合的 AgentType 是成功的关键,本文将逐一分析这些署理类型,结合特性分析、应用场景和代码示例,助你在现实项目中快速找到最优解。

1. ZERO_SHOT_REACT_DESCRIPTION

特点



  • 基于 ReAct 模子:推理(Reasoning)与行动(Action)结合。
  • 无需训练样本即可完成使命(零样本)。
上风

简朴直接,适合快速推理与操作。
范围性

对复杂使命的处置惩罚本领有限。
应用场景

底子盘算、逻辑推理或单步查询。
代码示例

  1. from langchain.agents import initialize_agent, AgentType
  2. from langchain.chat_models import ChatOpenAI
  3. from langchain.tools import Tool
  4. # 定义工具:计算平方
  5. def square_number(n: str):
  6.     return int(n) ** 2
  7. square_tool = Tool(name="Square Calculator", func=square_number, description="计算一个数的平方")
  8. # 初始化代理
  9. agent = initialize_agent(
  10.     tools=[square_tool],
  11.     llm=ChatOpenAI(model="gpt-4"),
  12.     agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
  13.     verbose=True
  14. )
  15. # 执行任务
  16. response = agent.run("计算 5 的平方")
  17. print(response)  # 输出: 25
复制代码

2. REACT_DOCSTORE

特点



  • 在 ReAct 底子上集成文档存储(DocStore)。
  • 先检索文档,再推理答复。
上风

加强了对知识库的支持,适合信息麋集型使命。
范围性

需要预先准备文档库,初始化成本较高。
应用场景

知识库问答、RAG 系统。
代码示例

  1. from langchain.vectorstores import FAISS
  2. from langchain.embeddings import OpenAIEmbeddings
  3. from langchain.document_loaders import TextLoader
  4. from langchain.tools import Tool
  5. # 加载文档并创建向量存储
  6. loader = TextLoader("knowledge.txt")
  7. docs = loader.load()
  8. vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())
  9. # 定义检索工具
  10. def retrieve_docs(query: str):
  11.     return vectorstore.similarity_search(query, k=3)
  12. docstore_tool = Tool(name="Document Retriever", func=retrieve_docs, description="检索文档内容")
  13. # 初始化代理
  14. agent = initialize_agent(
  15.     tools=[docstore_tool],
  16.     llm=ChatOpenAI(model="gpt-4"),
  17.     agent=AgentType.REACT_DOCSTORE,
  18.     verbose=True
  19. )
  20. response = agent.run("查找人工智能相关资料")
  21. print(response)
复制代码

3. SELF_ASK_WITH_SEARCH

特点



  • 将复杂问题拆解为子问题,通过搜刮工具逐一解决。
  • 动态获取外部信息。
上风

适合需要实时数据的使命。
范围性

依赖搜刮工具质量,相应时间可能较长。
应用场景

时事查询、专业资料搜集。
代码示例

  1. from langchain.tools import Tool
  2. from langchain.utilities import GoogleSearchAPIWrapper
  3. # 配置 Google 搜索工具(需 API Key)
  4. search = GoogleSearchAPIWrapper()
  5. search_tool = Tool(name="Google Search", func=search.run, description="通过 Google 搜索信息")
  6. # 初始化代理
  7. agent = initialize_agent(
  8.     tools=[search_tool],
  9.     llm=ChatOpenAI(model="gpt-4"),
  10.     agent=AgentType.SELF_ASK_WITH_SEARCH,
  11.     verbose=True
  12. )
  13. response = agent.run("爱因斯坦哪年获得诺贝尔奖?")
  14. print(response)  # 输出: 1921
复制代码

4. CONVERSATIONAL_REACT_DESCRIPTION

特点



  • 支持多轮对话,具备上下文记忆。
  • 融合 ReAct 的推理与操作本领。
上风

动态适应用户需求,交互性强。
范围性

对内存管理要求较高。
应用场景

聊天机器人、智能客服。
代码示例

  1. from langchain.memory import ConversationBufferMemory
  2. # 配置上下文记忆
  3. memory = ConversationBufferMemory(memory_key="chat_history")
  4. # 初始化代理
  5. agent = initialize_agent(
  6.     tools=[],
  7.     llm=ChatOpenAI(model="gpt-4"),
  8.     agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
  9.     memory=memory,
  10.     verbose=True
  11. )
  12. print(agent.run("中国的 GDP 是多少?"))
  13. print(agent.run("比去年增长了多少?"))  # 利用上下文回答
复制代码

5. CHAT_ZERO_SHOT_REACT_DESCRIPTION

特点



  • 为聊天场景优化的零样本 ReAct。
  • 注重天然语言表达。
上风

对话流畅,适合轻量交互。
范围性

不支持复杂工具调用。
应用场景

简朴聊天助手。
代码示例

  1. agent = initialize_agent(
  2.     tools=[],
  3.     llm=ChatOpenAI(model="gpt-4"),
  4.     agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
  5.     verbose=True
  6. )
  7. response = agent.run("介绍 Python 语言的特点。")
  8. print(response)
复制代码

6. CHAT_CONVERSATIONAL_REACT_DESCRIPTION

特点



  • 结合聊天优化与上下文记忆。
  • 支持更复杂的多轮对话。
上风

实用于长时间、连贯的交互。
范围性

配置稍复杂,盘算资源需求较高。
应用场景

高级客服、交互式问答。
代码示例

  1. agent = initialize_agent(
  2.     tools=[],
  3.     llm=ChatOpenAI(model="gpt-4"),
  4.     agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
  5.     verbose=True
  6. )
  7. response = agent.run("什么是机器学习?")
  8. print(response)
复制代码

7. STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION

特点



  • 支持多工具调用,返回结构化数据。
  • 使命处置惩罚更具条理性。
上风

适合复杂使命的综合处置惩罚。
范围性

对工具定义要求较高。
应用场景

天气查询、综合信息整合。
代码示例

  1. from langchain.tools import Tool
  2. # 定义天气工具
  3. def get_weather(city: str):
  4.     return f"{city} 当前温度为 25°C"
  5. weather_tool = Tool(name="Weather Tool", func=get_weather, description="获取城市天气")
  6. # 初始化代理
  7. agent = initialize_agent(
  8.     tools=[weather_tool],
  9.     llm=ChatOpenAI(model="gpt-4"),
  10.     agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
  11.     verbose=True
  12. )
  13. response = agent.run("查询北京的天气")
  14. print(response)
复制代码

8. OPENAI_FUNCTIONS

特点



  • 利用 OpenAI 的 function calling 机制。
  • 直接调用外部 API,返回结构化结果。
上风

调用精准,相应高效。
范围性

依赖 OpenAI 模子支持。
应用场景

API 驱动使命,如航班查询。
代码示例

  1. from langchain.tools import StructuredTool
  2. from pydantic import BaseModel
  3. # 定义查询结构
  4. class FlightQuery(BaseModel):
  5.     origin: str
  6.     destination: str
  7. def search_flights(query: FlightQuery):
  8.     return f"从 {query.origin} 到 {query.destination} 的航班价格约为 1500 元"
  9. flight_tool = StructuredTool.from_function(func=search_flights, name="Flight Search", description="查询航班价格")
  10. # 初始化代理
  11. agent = initialize_agent(
  12.     tools=[flight_tool],
  13.     llm=ChatOpenAI(model="gpt-4"),
  14.     agent=AgentType.OPENAI_FUNCTIONS,
  15.     verbose=True
  16. )
  17. response = agent.run("查询从北京到上海的航班价格。")
  18. print(response)
复制代码

9. OPENAI_MULTI_FUNCTIONS

特点



  • 支持多个 OpenAI 函数调用。
  • 可整合多源数据。
上风

处置惩罚多使命本领强。
范围性

配置复杂,依赖多工具协作。
应用场景

综合查询,如航班与汇率结合。
代码示例

  1. from langchain.tools import Tool
  2. # 定义汇率工具
  3. def get_exchange_rate():
  4.     return "当前 1 USD = 7.2 CNY"
  5. exchange_tool = Tool(name="Exchange Rate Checker", func=get_exchange_rate, description="获取美元兑人民币汇率")
  6. # 初始化代理
  7. agent = initialize_agent(
  8.     tools=[flight_tool, exchange_tool],
  9.     llm=ChatOpenAI(model="gpt-4"),
  10.     agent=AgentType.OPENAI_MULTI_FUNCTIONS,
  11.     verbose=True
  12. )
  13. response = agent.run("查询从北京到上海的航班价格,并获取最新美元汇率。")
  14. print(response)
复制代码
总结与选择指南

署理类型核心特点上风范围性实用场景ZERO_SHOT_REACT_DESCRIPTION零样本推理与操作简朴高效不适合复杂使命底子盘算、逻辑推理REACT_DOCSTORE文档检索 + 推理知识库支持强需预置文档知识库问答、RAGSELF_ASK_WITH_SEARCH问题拆解 + 搜刮实时信息获取依赖搜刮质量时事、专业查询CONVERSATIONAL_REACT_DESCRIPTION多轮对话 + 上下文交互性强内存需求高聊天机器人、智能客服CHAT_ZERO_SHOT_REACT_DESCRIPTION聊天优化零样本对话流畅无复杂工具支持简朴聊天助手CHAT_CONVERSATIONAL_REACT_DESCRIPTION聊天 + 上下文记忆连贯性好配置复杂高级客服、多轮问答STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION多工具 + 结构化输出处置惩罚复杂使命工具定义要求高天气、综合查询OPENAI_FUNCTIONS单函数调用调用精准依赖 OpenAIAPI 驱动使命OPENAI_MULTI_FUNCTIONS多函数调用数据整合本领强配置复杂综合多使命查询 选择发起



  • 轻量使命:优先 ZERO_SHOT_REACT_DESCRIPTION 或 CHAT_ZERO_SHOT_REACT_DESCRIPTION。
  • 知识麋集型:选择 REACT_DOCSTORE 或 SELF_ASK_WITH_SEARCH。
  • 多轮交互:推荐 CONVERSATIONAL_REACT_DESCRIPTION 或 CHAT_CONVERSATIONAL_REACT_DESCRIPTION。
  • 复杂工具调用:利用 STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION 或 OPENAI_MULTI_FUNCTIONS。
盼望这篇优化后的指南能为你的 LangChain 项目提供清晰指引!如需更具体案例或代码调试发起,请随时告诉我。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

泉缘泉

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表