如何在 LangChain ReAct Agent 中集成向量嵌入检索能力
如何在 LangChain ReAct Agent 中集成向量嵌入检索能力 本文详解如何将 pinecone 等向量数据库的检索能力作为工具注入 langchain 结构化聊天 agent,使 react 智能体既能自主规划调用工具,又能实时获取外部知识库中的语义相关上下文。 想让你的LangCha
如何在 LangChain ReAct Agent 中集成向量嵌入检索能力
本文详解如何将 pinecone 等向量数据库的检索能力作为工具注入 langchain 结构化聊天 agent,使 react 智能体既能自主规划调用工具,又能实时获取外部知识库中的语义相关上下文。

想让你的LangChain智能体变得更“博学”吗?一个常见的挑战是:如何让一个能自主规划、调用工具的ReAct Agent,同时具备实时查询外部知识库的能力。好消息是,这并不需要复杂的架构改造,核心思路其实相当直接。
关键在于理解LangChain的设计哲学。像create_structured_chat_agent这类ReAct Agent,其本身并不直接接收检索器或向量索引。但它的强大之处在于,支持接入任何符合LangChain Tool协议的工具。这意味着,你只需要把向量检索器“包装”成一个标准工具,就能让它无缝融入Agent的决策与执行流程。这样一来,智能体就能在推理过程中,自主决定何时去知识库“查资料”了。
整个实现路径非常清晰:利用create_retriever_tool函数,将vector_store.as_retriever()转换成一个具备名称、描述和可调用接口的Tool对象,然后把它丢进Agent的工具列表里。剩下的事情,Agent会自己搞定。
下面,我们就来拆解具体的实现步骤。
✅ 步骤 1:准备 LLM 与向量检索器
首先,准备好你的大语言模型和已经构建好的向量检索器。这里以OpenAI和Pinecone为例。
from langchain_openai import ChatOpenAI
from langchain_community.vectorstores import Pinecone
llm = ChatOpenAI(temperature=0.1, model_name="gpt-4")
# 假设 vector_store 已连接 Pinecone 索引
retriever = vector_store.as_retriever(
search_type="similarity",
search_kwargs={"k": 3} # 检索 top-3 相关文档
)
✅ 步骤 2:将检索器封装为 Agent 工具
接下来是最关键的一步:把检索器“变身”为Agent能识别的工具。这里要用到create_retriever_tool。
from langchain.tools.retriever import create_retriever_tool
retriever_tool = create_retriever_tool(
retriever=retriever,
name="knowledge_base_search",
description=(
"用于查询公司内部知识库的语义检索工具。"
"当用户问题涉及产品文档、API 说明、历史案例或领域专有概念时,应使用此工具。"
"输入应为简洁、明确的自然语言查询词(无需添加前缀如'请检索...')。"
)
)
⚠️ 这里有几点必须注意:
- 工具名称(name)必须是一个合法的标识符(只包含字母、数字、下划线),并且不能和其他工具重名。
- 工具描述(description)至关重要,它直接决定了Agent能否正确理解何时该调用这个工具。务必清晰地说明适用场景和输入格式。
- 如果需要从多个来源检索(比如同时查文档库和数据库),完全可以创建多个不同的
retriever_tool,然后一起加入到工具列表中。
✅ 步骤 3:构建并运行结构化聊天 Agent
工具封装好后,构建Agent就水到渠成了。从Hub拉取预设的提示模板,传入工具列表,创建执行器,然后就可以提问了。
from langchain import hub
from langchain.agents import create_structured_chat_agent, AgentExecutor
prompt = hub.pull("hwchase17/structured-chat-agent")
tools = [retriever_tool] # ✅ 关键:此处传入封装好的检索工具
agent = create_structured_chat_agent(llm, tools, prompt)
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True)
result = agent_executor.invoke({
"input": "LangChain v0.1 中 DocumentLoader 的异步加载方式有哪些?",
"chat_history": chat_history
})
print(result["output"])
运行后,你将看到Agent自动执行以下完美协作:
1. 分析问题语义 → 判断当前问题需要查阅知识库。
2. 调用检索工具 → 自动选择并调用knowledge_base_search工具,并将原始问题作为查询词传入。
3. 接收检索结果 → 获取返回的相关Document列表(包含内容和元数据)。
4. 整合信息并生成回答 → 将检索到的文档内容作为上下文,辅助LLM给出最终准确、有据的回答。
✅ 补充建议
为了让这个方案更强大,这里有几个进阶优化思路:
- 提升检索质量:可以在检索器(retriever)中启用重排序(如CohereRerank)或混合搜索(结合关键词和向量),以获取更精准的结果。
- 处理长上下文:如果返回的文档片段较长,建议在工具描述中明确提示Agent“返回结果已按相关性排序,请优先参考前两条”,引导其高效利用信息。
- 优化查询本身:可以结合
RunnablePassthrough或自定义Tool,在检索前对用户查询进行预处理,比如重写或同义词扩展,这能有效提升召回率。
通过这套方案,你不再需要在功能单一的问答链(ConversationalRetrievalChain)和“手无寸铁”的ReAct Agent之间艰难抉择。现在,你的Agent成为了一个既懂检索、又会推理、还能行动的统一智能接口,能力边界得到了实质性的拓展。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















