当前位置: 首页 > news >正文

Langchain入门:构建一个PDF摄取和问答系统

需要安装pypdf包
文档:https://s1.q4cdn.com/806093406/files/doc_downloads/2023/414759-1-_5_Nike-NPS-Combo_Form-10-K_WR.pdf

from langchain_community.document_loaders import PyPDFLoader
file_path = "./414759-1-_5_Nike-NPS-Combo_Form-10-K_WR.pdf"
loader = PyPDFLoader(file_path)docs = loader.load()
print(len(docs))

在这里插入图片描述

print(docs[0].page_content[:100])
print(docs[0].metadata)

在这里插入图片描述

  • 加载器将指定路径的PDF读取到内存中。
  • 然后,它使用 pypdf 包提取文本数据。
  • 最后,它为PDF的每一页创建一个LangChain 文档,包含该页的内容和一些关于文本来源于文档的元数据。

使用RAG进行问答

使用文本分割器,您将把加载的文档分割成更小的文档,以便更容易适应LLM的上下文窗口,然后将它们加载到向量存储中。然后,您可以从向量存储中创建一个检索器以在我们的RAG链中使用

from langchain_chroma import Chroma
from langchain_openai import OpenAIEmbeddings
from langchain_text_splitters import RecursiveCharacterTextSplittertext_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
splits = text_splitter.split_documents(docs)
vector_store = Chroma.from_documents(splits, embedding=OpenAIEmbeddings(openai_api_base="https://api.siliconflow.cn/v1/",openai_api_key=os.environ["siliconFlow"],model="Qwen/Qwen3-Embedding-8B"
))retriever = vector_store.as_retriever()

最后,您将使用一些内置助手构建最终的 rag_chain:

from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
from langchain_core.prompts import ChatPromptTemplatesystem_prompt = ("You are an assistant for question-answering tasks. ""Use the following pieces of retrieved context to answer ""the question. If you don't know the answer, say that you ""don't know. Use three sentences maximum and keep the ""answer concise.""\n\n""{context}"
)prompt = ChatPromptTemplate.from_messages([("system", system_prompt),("human", "{input}"),]
)question_answer_chain = create_stuff_documents_chain(llm, prompt=prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)results = rag_chain.invoke({"input": "What was Nike's revenue in 2023?"})results

进一步检查 context 下的值,您可以看到它们是每个包含摄取页面内容块的文档。值得注意的是,这些文档还保留了您最初加载时的原始元数据:

print(results["context"][0].page_content)
print(results["context"][0].metadata)
http://www.dtcms.com/a/328267.html

相关文章:

  • 51 单片机分层架构的模块依赖关系图
  • 解决ROS编译顺序不对,需要内部依赖,因此要多次编译的问题
  • Python初学者笔记第二十二期 -- (JSON数据解析)
  • MySQL 数据库表操作与查询实战案例
  • 双十一美妆数据分析:洞察消费趋势与行业秘密
  • 机械臂的智能升维:当传统机械臂遇见Deepoc具身智能大模型从自动化工具到具身智能体的范式革命
  • Element用法---Loading 加载
  • C++的异常的使用和规范
  • 【盘古100Pro+开发板实验例程】FPGA学习 | 均值滤波 | 图像实验指导手册
  • 【代码随想录day 18】 力扣 501.二叉搜索树中的众数
  • 免费播客翻译与转录:用中文收听全球播客
  • Langchain入门:文本摘要
  • C++学习之数据结构:AVL树
  • java八股文-MySql面试题-参考回答
  • GPFS api
  • 在 C语言 中构建安全泛型容器:使用 maybe 实现安全除法
  • 【PCB设计经验】去耦电容如何布局?
  • 力扣top100(day01-04)
  • 企业级的即时通讯平台怎么保护敏感行业通讯安全?
  • 电竞 体育数据 API 应用场景全解析
  • Day50--图论--98. 所有可达路径(卡码网),797. 所有可能的路径
  • Quartz
  • Mybatis源码解读-SqlSession 会话源码和Executor SQL操作执行器源码
  • 谷歌云代理商:用 AI 启航,Gemini 重塑旅游酒店行业新体验
  • 【SpringBoot】07 容器功能 - SpringBoot底层注解的应用与实战 - @ConfigurationProperties配置绑定
  • 从0入门LangGraph,手搓高质量Agent
  • 【自动化运维神器Ansible】playbook文件内变量定义全流程解析
  • 谷歌ADK接入文件操作MCP
  • Linux中Https配置与私有CA部署指南
  • Java 工厂方法模式