弁言
LangChain 总结了 9 种经典的复杂模子交互模式,每种都针对特定使命计划,兼具独特上风与实用场景,内容涵盖: ReAct、Function Call、知识库、搜刮等,利用这些模式可以大大简化这些场景开发难度。这些模式可以利用Agent情势来利用,并以AgentType来做区分,详见下面实例。在开发时,选择符合的 AgentType 是成功的关键,本文将逐一分析这些署理类型,结合特性分析、应用场景和代码示例,助你在现实项目中快速找到最优解。
1. ZERO_SHOT_REACT_DESCRIPTION
特点
- 基于 ReAct 模子:推理(Reasoning)与行动(Action)结合。
- 无需训练样本即可完成使命(零样本)。
上风
简朴直接,适合快速推理与操作。
范围性
对复杂使命的处置惩罚本领有限。
应用场景
底子盘算、逻辑推理或单步查询。
代码示例
- from langchain.agents import initialize_agent, AgentType
- from langchain.chat_models import ChatOpenAI
- from langchain.tools import Tool
- # 定义工具:计算平方
- def square_number(n: str):
- return int(n) ** 2
- square_tool = Tool(name="Square Calculator", func=square_number, description="计算一个数的平方")
- # 初始化代理
- agent = initialize_agent(
- tools=[square_tool],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,
- verbose=True
- )
- # 执行任务
- response = agent.run("计算 5 的平方")
- print(response) # 输出: 25
复制代码 2. REACT_DOCSTORE
特点
- 在 ReAct 底子上集成文档存储(DocStore)。
- 先检索文档,再推理答复。
上风
加强了对知识库的支持,适合信息麋集型使命。
范围性
需要预先准备文档库,初始化成本较高。
应用场景
知识库问答、RAG 系统。
代码示例
- from langchain.vectorstores import FAISS
- from langchain.embeddings import OpenAIEmbeddings
- from langchain.document_loaders import TextLoader
- from langchain.tools import Tool
- # 加载文档并创建向量存储
- loader = TextLoader("knowledge.txt")
- docs = loader.load()
- vectorstore = FAISS.from_documents(docs, OpenAIEmbeddings())
- # 定义检索工具
- def retrieve_docs(query: str):
- return vectorstore.similarity_search(query, k=3)
- docstore_tool = Tool(name="Document Retriever", func=retrieve_docs, description="检索文档内容")
- # 初始化代理
- agent = initialize_agent(
- tools=[docstore_tool],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.REACT_DOCSTORE,
- verbose=True
- )
- response = agent.run("查找人工智能相关资料")
- print(response)
复制代码 3. SELF_ASK_WITH_SEARCH
特点
- 将复杂问题拆解为子问题,通过搜刮工具逐一解决。
- 动态获取外部信息。
上风
适合需要实时数据的使命。
范围性
依赖搜刮工具质量,相应时间可能较长。
应用场景
时事查询、专业资料搜集。
代码示例
- from langchain.tools import Tool
- from langchain.utilities import GoogleSearchAPIWrapper
- # 配置 Google 搜索工具(需 API Key)
- search = GoogleSearchAPIWrapper()
- search_tool = Tool(name="Google Search", func=search.run, description="通过 Google 搜索信息")
- # 初始化代理
- agent = initialize_agent(
- tools=[search_tool],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.SELF_ASK_WITH_SEARCH,
- verbose=True
- )
- response = agent.run("爱因斯坦哪年获得诺贝尔奖?")
- print(response) # 输出: 1921
复制代码 4. CONVERSATIONAL_REACT_DESCRIPTION
特点
- 支持多轮对话,具备上下文记忆。
- 融合 ReAct 的推理与操作本领。
上风
动态适应用户需求,交互性强。
范围性
对内存管理要求较高。
应用场景
聊天机器人、智能客服。
代码示例
- from langchain.memory import ConversationBufferMemory
- # 配置上下文记忆
- memory = ConversationBufferMemory(memory_key="chat_history")
- # 初始化代理
- agent = initialize_agent(
- tools=[],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.CONVERSATIONAL_REACT_DESCRIPTION,
- memory=memory,
- verbose=True
- )
- print(agent.run("中国的 GDP 是多少?"))
- print(agent.run("比去年增长了多少?")) # 利用上下文回答
复制代码 5. CHAT_ZERO_SHOT_REACT_DESCRIPTION
特点
- 为聊天场景优化的零样本 ReAct。
- 注重天然语言表达。
上风
对话流畅,适合轻量交互。
范围性
不支持复杂工具调用。
应用场景
简朴聊天助手。
代码示例
- agent = initialize_agent(
- tools=[],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
- verbose=True
- )
- response = agent.run("介绍 Python 语言的特点。")
- print(response)
复制代码 6. CHAT_CONVERSATIONAL_REACT_DESCRIPTION
特点
- 结合聊天优化与上下文记忆。
- 支持更复杂的多轮对话。
上风
实用于长时间、连贯的交互。
范围性
配置稍复杂,盘算资源需求较高。
应用场景
高级客服、交互式问答。
代码示例
- agent = initialize_agent(
- tools=[],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
- verbose=True
- )
- response = agent.run("什么是机器学习?")
- print(response)
复制代码 7. STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION
特点
- 支持多工具调用,返回结构化数据。
- 使命处置惩罚更具条理性。
上风
适合复杂使命的综合处置惩罚。
范围性
对工具定义要求较高。
应用场景
天气查询、综合信息整合。
代码示例
- from langchain.tools import Tool
- # 定义天气工具
- def get_weather(city: str):
- return f"{city} 当前温度为 25°C"
- weather_tool = Tool(name="Weather Tool", func=get_weather, description="获取城市天气")
- # 初始化代理
- agent = initialize_agent(
- tools=[weather_tool],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTION,
- verbose=True
- )
- response = agent.run("查询北京的天气")
- print(response)
复制代码 8. OPENAI_FUNCTIONS
特点
- 利用 OpenAI 的 function calling 机制。
- 直接调用外部 API,返回结构化结果。
上风
调用精准,相应高效。
范围性
依赖 OpenAI 模子支持。
应用场景
API 驱动使命,如航班查询。
代码示例
- from langchain.tools import StructuredTool
- from pydantic import BaseModel
- # 定义查询结构
- class FlightQuery(BaseModel):
- origin: str
- destination: str
- def search_flights(query: FlightQuery):
- return f"从 {query.origin} 到 {query.destination} 的航班价格约为 1500 元"
- flight_tool = StructuredTool.from_function(func=search_flights, name="Flight Search", description="查询航班价格")
- # 初始化代理
- agent = initialize_agent(
- tools=[flight_tool],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.OPENAI_FUNCTIONS,
- verbose=True
- )
- response = agent.run("查询从北京到上海的航班价格。")
- print(response)
复制代码 9. OPENAI_MULTI_FUNCTIONS
特点
- 支持多个 OpenAI 函数调用。
- 可整合多源数据。
上风
处置惩罚多使命本领强。
范围性
配置复杂,依赖多工具协作。
应用场景
综合查询,如航班与汇率结合。
代码示例
- from langchain.tools import Tool
- # 定义汇率工具
- def get_exchange_rate():
- return "当前 1 USD = 7.2 CNY"
- exchange_tool = Tool(name="Exchange Rate Checker", func=get_exchange_rate, description="获取美元兑人民币汇率")
- # 初始化代理
- agent = initialize_agent(
- tools=[flight_tool, exchange_tool],
- llm=ChatOpenAI(model="gpt-4"),
- agent=AgentType.OPENAI_MULTI_FUNCTIONS,
- verbose=True
- )
- response = agent.run("查询从北京到上海的航班价格,并获取最新美元汇率。")
- 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企服之家,中国第一个企服评测及商务社交产业平台。 |