如何在LangChain Agent中使用本地PDF文档替代Wikipedia工具
如何将本地PDF集成到LangChain Agent中替代Wikipedia工具
要把本地PDF替换原有Wikipedia工具接入Agent,需要完成文档处理→向量存储→创建检索工具→集成Agent这几个步骤,具体实现如下:
1. 加载并拆分PDF文档
加载PDF后,直接用大段文本无法高效检索,需要先拆分成语义连贯的小片段:
from langchain.document_loaders import PyPDFium2Loader from langchain.text_splitter import RecursiveCharacterTextSplitter # 加载PDF loader = PyPDFium2Loader("hunter-350-dual-channel.pdf") data = loader.load() # 拆分文档(可根据PDF内容调整chunk_size和chunk_overlap) text_splitter = RecursiveCharacterTextSplitter( chunk_size=1000, chunk_overlap=200, length_function=len ) split_docs = text_splitter.split_documents(data)
2. 创建向量存储与检索工具
将拆分后的文档存入向量数据库,再封装成Agent可调用的检索工具:
from langchain.vectorstores import Chroma from langchain.embeddings import OpenAIEmbeddings # 也可替换为本地开源embedding模型 from langchain.tools.retriever import create_retrieval_tool # 初始化embedding模型(需配置OpenAI API密钥,或替换如HuggingFaceEmbeddings) embeddings = OpenAIEmbeddings() # 创建向量存储 vector_store = Chroma.from_documents(documents=split_docs, embedding=embeddings) # 创建检索工具,指定工具名称和描述(Agent会根据描述判断何时调用) retriever_tool = create_retrieval_tool( vector_store.as_retriever(), name="pdf_document_retriever", description="用于查询本地PDF文档中的信息,回答关于文档内容的因果关系、技术参数等问题" )
3. 替换原有工具并初始化Agent
把原来的Wikipedia工具换成刚创建的PDF检索工具,然后初始化Agent运行:
from langchain.agents import initialize_agent, AgentType # 替换工具列表,只保留PDF检索工具 tools = [retriever_tool] # 初始化Agent(保持原有Agent类型和参数,仅替换tools) agent = initialize_agent( tools, llm, agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION, handle_parsing_errors=True, verbose=False ) # 执行查询 out = agent(f"Does {var_1} cause {var_2} or the other way around?.") print(out['output'])
关键注意事项
- 如果使用本地开源embedding模型(如BAAI/bge-small-en-v1.5),需替换
OpenAIEmbeddings为HuggingFaceEmbeddings,并配置模型路径。 - 调整
chunk_size和chunk_overlap时,需兼顾检索精度和效率:PDF内容专业术语多可减小chunk_size,通用内容可适当增大。 - 工具描述要清晰明确,Agent会根据描述决定是否调用该工具,模糊的描述可能导致Agent无法正确触发检索。
内容的提问来源于stack exchange,提问作者merkle
相关产品推荐
相关产品推荐

