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

引言

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

参考:LangChain教程 - Agent -之 ZERO_SHOT_REACT_DESCRIPTION


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文档检索 + 推理知识库支持强需预置文档知识库问答、RAG
SELF_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_DESCRIPTIONCHAT_ZERO_SHOT_REACT_DESCRIPTION
  • 知识密集型:选择 REACT_DOCSTORESELF_ASK_WITH_SEARCH
  • 多轮交互:推荐 CONVERSATIONAL_REACT_DESCRIPTIONCHAT_CONVERSATIONAL_REACT_DESCRIPTION
  • 复杂工具调用:使用 STRUCTURED_CHAT_ZERO_SHOT_REACT_DESCRIPTIONOPENAI_MULTI_FUNCTIONS

希望这篇优化后的指南能为你的 LangChain 项目提供清晰指引!如需更具体案例或代码调试建议,请随时告诉我。

### Langchain Chatchat Agent 使用指南 #### 创建和激活虚拟环境 为了确保开发环境中软件包的一致性和兼容性,在开始之前建议创建一个新的 Conda 虚拟环境并安装最新版本的 `langchain-chatchat`[^1]: ```bash conda create -n chatchat python=3.10 conda activate chatchat pip install langchain-U ``` #### 初始化Agent配置 对于想要利用内置代理功能的应用开发者来说,初始化过程至关重要。这通常涉及到加载必要的依赖项以及定义如何处理输入数据流的方式。 在实际应用中,可以参照如下Python脚本作为起点来设置自己的agent实例: ```python from langchain_chatchat import Agent, load_config config = load_config() # 加载默认配置文件 agent = Agent(config=config) response = agent.run("Translate 'Hello world' into Chinese.") print(response) ``` 这段代码展示了怎样通过调用`run()`方法向代理发送指令,并接收其执行后的反馈信息。这里使用的命令是让代理将英文短语转换成中文表达形式[^3]。 #### 常见问题解答 当遇到与代理有关的问题时,下面列举了一些可能的情况及其解决方案: - **无法启动代理服务** 如果尝试运行上述示例程序却收到错误提示,则可能是由于缺少某些必需组件或是路径设置不正确所引起的。此时应仔细检查已安装模块列表,并确认所有前提条件都得到了满足。 - **性能低下或响应时间过长** 对于大型查询请求而言,可能会观察到较慢的速度表现。优化措施包括调整参数配置、升级硬件设施或者考虑采用分布式架构部署方案以提高效率。 - **特定任务失败** 当针对某一具体操作(如翻译)出现问题时,可以通过查看日志记录获取更多线索;另外也可以参考官方文档中的故障排查部分寻找对应指导说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值