You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ReAct LangChain框架中为agent.run传递上下文并集成PDF检索工具

将LangChain PDF检索Chain与Agent集成的实现方法

核心思路是把你的PDF检索Chain封装成LangChain的Tool,让Agent可以自主判断是否需要调用该工具获取PDF上下文,再生成回答。以下是具体实现步骤:

1. 封装PDF检索Chain为Tool

你的现有Chain通过chain.run(input_documents=..., question=...)调用,需要把它包装成符合Agent调用规范的Tool。注意Tool的调用函数需接收单个字符串参数(用户问题),因此要把获取相关PDF文档的逻辑(比如向量库检索)内嵌进去:

from langchain.tools import Tool

# 假设你已定义好PDF检索chain(pdf_retrieval_chain)和向量存储(vector_store)
def pdf_retrieval_func(query):
    # 从向量库检索与问题相关的PDF文档片段
    relevant_docs = vector_store.similarity_search(query)
    # 调用原有chain获取结果
    return pdf_retrieval_chain.run(input_documents=relevant_docs, question=query)

# 创建Tool实例
pdf_tool = Tool(
    name="PDF文档检索工具",
    func=pdf_retrieval_func,
    description="当用户的问题需要从已上传的PDF文档中提取信息时使用,直接输入用户的问题即可返回对应内容。"
)

2. 初始化包含该Tool的Agent

将封装好的Tool加入Agent的工具列表,选择合适的Agent类型初始化(推荐根据场景选择,比如对话场景用CHAT_CONVERSATIONAL_REACT_DESCRIPTION):

from langchain.agents import initialize_agent, AgentType
from langchain.chat_models import ChatOpenAI

# 初始化大语言模型(以GPT-3.5为例)
llm = ChatOpenAI(temperature=0, model_name="gpt-3.5-turbo")

# 构建Agent
agent = initialize_agent(
    tools=[pdf_tool],
    llm=llm,
    agent=AgentType.CHAT_CONVERSATIONAL_REACT_DESCRIPTION,
    verbose=True  # 开启日志可查看Agent的思考和工具调用过程
)

3. 使用Agent提问

现在可以直接用agent.run()调用,Agent会自动判断是否需要调用PDF检索工具:

# 示例提问
response = agent.run("PDF中关于数据加密的具体流程是什么?")
print(response)

关键注意事项

  • Tool描述要精准:Agent依赖Tool的描述判断是否调用,所以要明确说明工具的适用场景,避免Agent误判。
  • 文档检索逻辑内嵌:Agent调用工具时仅传递问题字符串,因此必须把获取input_documents的逻辑(比如向量检索)放到Tool的调用函数中。
  • Agent类型适配:单轮提问场景可选择ZERO_SHOT_REACT_DESCRIPTION,多轮对话场景优先用CHAT_CONVERSATIONAL_REACT_DESCRIPTION。

内容的提问来源于stack exchange,提问作者Aditya Bansal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:26:09