使用LangChain实现基于LLM和RAG的PDF问答体系

打印 上一主题 下一主题

主题 1006|帖子 1006|积分 3018


前言

本文将介绍 LLM 和 RAG 的根本概念,并通过一个实际的代码示例,展示如何使用 LangChain 构建一个基于 PDF 文档的问答体系。

提示:以下是本篇文章正文内容,下面案例可供参考
一.大语言模子(LLM)

1. 什么是LLM?

LLM,即大型语言模子(Large Language Model),是一种基于深度学习的天然语言处理模子。它通过海量文本数据的训练,学习语言的统计规律和语义信息,从而可以或许理解和天生人类语言。近年来,随着计算本领的提升和数据量的爆炸式增长,LLM 取得了突破性进展,比方 OpenAI 的 GPT 系列、Google 的 LaMDA 和 PaLM 等。
2. LLM 的本领与特点

LLM 拥有强大的语言理解和天生本领,其特点主要表现在以下几个方面:


  • 强大的文本天生本领: LLM 可以或许天生流畅、连贯、语法正确的文本,包括新闻、故事、诗歌、代码等多种形式。比方,GPT-3 可以天生高质量的新闻报道,甚至可以模仿特定作家的写作风格。
  • 广泛的语言理解本领: LLM 可以或许理解人类语言的语义、语境和感情,并完成问答、翻译、摘要等使命。比方,LaMDA 可以进行开放域对话,并展现出一定的逻辑推理本领。
  • 强大的学习本领: LLM 可以或许从海量数据中学习,并不断改进其性能。比方,通过 fine-tuning,LLM 可以适应特定范畴的使命,比方医疗、法律等。
  • 可扩展性强: LLM 的规模越大,其性能通常也越强。随着计算资源的不断提升,LLM 的潜力也将不断被发掘。
二、增强检索天生(RAG)

检索增强天生(Retrieval-Augmented Generation, RAG)是一种结合检索和天生的技能,可以或许从外部知识库中检索相干信息,并将其作为上下文输入到天生模子中。RAG的流程图如下所示。
我将RAG 的焦点思想概括为以下三个步调:


  • 知识准备阶段:先通过嵌入(embedding)模子将文档、图片或其他格式的数据转为向量格式,然后创建向量存储索引,将文本或其他信息与向量对应起来。末了存到外部知识库中。
  • 查询阶段:根据用户的题目,从向量数据库中检索最相干的信息并返回。
  • 天生阶段:将检索到的信息作为上下文,输入到天生(generate)模子中,天生最终的答复。
    RAG 的优势
    动态知识更新:通过检索外部知识库,RAG 可以实时获取最新信息。
    减少幻觉题目:天生模子的答复基于检索到的真实信息,减少了错误天生的可能性。
    扩展性强:可以轻松集成多种数据源(如 PDF、网页、数据库)。

三. 什么是 LangChain?

LangChain 是一个用于构建基于大语言模子(LLM)应用的框架。它提供了一套模块化的工具和抽象层,帮助开发者更高效地构建复杂的 LLM 应用。无论是问答体系、对话机器人,照旧主动化使命,LangChain 都能明显简化开发流程。
1. LangChain 的焦点功能

LangChain 的焦点功能包括:


  • 使命链(Chains):支持将多个使命(如检索、天生、工具调用)串联起来,形成复杂的使命链。提供了多种预界说链(如 RetrievalQA、ConversationalRetrievalChain),简化常见使命的开发。
  • 模子抽象:提供统一的接口,支持多种 LLM 提供商(如 OpenAI、Hugging Face、Anthropic 等)。支持将多个 LLM 调用串联起来,形成复杂的使命链(Chain)。
  • 上下文管理:提供多种影象模块(如 ConversationBufferMemory、ConversationSummaryMemory),用于管理多轮对话的上下文。主动维护对话汗青,确保 LLM 可以或许基于上下文天生连贯的答复。
  • 检索增强:支持从多种数据源(如 PDF、网页、数据库)加载文档。集成了多种向量数据库(如 FAISS、Pinecone、Weaviate),用于存储和检索文档嵌入。提供了基于向量检索的接口,方便开发者实现检索增强天生(RAG)。
  • 工具集成:支持将外部工具(如搜索引擎、API、数据库)与 LLM 结合,扩展 LLM 的本领。提供了署理框架,允许 LLM 根据使命动态选择工具并执行操作。
   综上,LangChain 的特点:
  

  • 强大的使命链功能,支持将多个使命串联起来,形成复杂的使命流。比方:RAG和多步推理。
  • 模块化设计,开发者可以根据需求自由组合。
  • 多种影象模块,用于管理对话汗青和多轮上下文。
  • 署理框架,允许 LLM 根据使命动态选择工具并执行操作
  • 工具集成
  2. LangChain 的优势

由Langchain的特点可见,LangChain 的优势主要包括:


  • 简化开发流程:LangChain 提供了丰富的模块化组件,开发者无需从头实现 LLM 的集成、上下文管理、检索增强等功能,可以专注于业务逻辑。
  • 灵活性强:LangChain 支持多种 LLM 提供商、向量数据库和外部工具,开发者可以根据需求灵活选择组件。
  • 扩展性强:LangChain 的模块化设计使得它易于扩展。开发者可以轻松集成新的数据源、工具或使命链。
  • 社区支持:LangChain 拥有活跃的社区和丰富的文档,开发者可以快速上手并办理遇到的题目。
3. LangChain 的应用场景

LangChain的应用场景非常广泛,涵盖了问答体系、对话机器人、数据增强应用和主动化使命等多个范畴。无论是基于文档的智能问答、上下文感知的多轮对话,照旧结合外部数据源的复杂使命主动化,LangChain都能通过其模块化设计和强大的工具集成本领,帮助开发者快速构建高效、灵活的 LLM 应用。
4. 总结

LangChain 是一个强大的框架,可以或许明显简化基于 LLM 应用的开发流程。它的模块化设计、灵活性和扩展性使得它成为构建复杂 LLM 应用的抱负选择。无论是问答体系、对话机器人,照旧主动化使命,LangChain 都能帮助你快速实现目标。
四.使用 LangChain 实现基于 PDF 的问答体系

条件是你已经安装好了langchain的包
  1. from langchain.chains import RetrievalQA
  2. from langchain_ollama import OllamaLLM
  3. from langchain_ollama import OllamaEmbeddings
  4. from langchain_community.vectorstores import FAISS
  5. from langchain_community.document_loaders import PyPDFLoader
  6. from langchain.text_splitter import RecursiveCharacterTextSplitter
  7. from langchain.prompts import PromptTemplate
  8. class PDFQASystem:
  9.     def __init__(self, pdf_path: str):
  10.         """初始化 PDF 问答系统。"""
  11.         # 初始化 LLM 和嵌入模型
  12.         self.llm = OllamaLLM(model="qwen2.5:7b")
  13.         self.embeddings = OllamaEmbeddings(model="nomic-embed-text")
  14.         
  15.         # 加载 PDF 文件并生成嵌入向量
  16.         self.vector_store = self.load_pdf_and_generate_embeddings(pdf_path)
  17.         # 初始化提示模板
  18.         self.prompt_template = PromptTemplate(
  19.             input_variables=["context", "question"],
  20.             template=(
  21.                 "你是一个助手,帮助用户解答问题。\n"
  22.                 "请根据以下背景资料回答问题:\n"
  23.                 "背景资料:\n{context}\n\n"
  24.                 "用户的问题:\n{question}"
  25.             )
  26.         )
  27.         # 初始化检索增强生成链
  28.         self.qa_chain = RetrievalQA.from_chain_type(
  29.             llm=self.llm,
  30.             chain_type="stuff",
  31.             retriever=self.vector_store.as_retriever(),
  32.             chain_type_kwargs={"prompt": self.prompt_template}
  33.         )
  34.     def load_pdf_and_generate_embeddings(self, pdf_path: str):
  35.         """加载 PDF 文件并生成嵌入向量。"""
  36.         # 加载 PDF 文件
  37.         loader = PyPDFLoader(pdf_path)
  38.         documents = loader.load()
  39.         # 将文档拆分为小块
  40.         text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=200)
  41.         texts = text_splitter.split_documents(documents)
  42.         # 生成嵌入向量并构建 FAISS 索引
  43.         vector_store = FAISS.from_documents(texts, self.embeddings)
  44.         return vector_store
  45.     def ask(self, query: str) -> str:
  46.         """接收用户的问题,检索相关文本并生成答案。"""
  47.         result = self.qa_chain.invoke({"query": query})
  48.         return result["result"]
  49. # 主程序
  50. if __name__ == "__main__":
  51.     pdf_path = "E:/dcit/files/贷款.pdf"
  52.     qa_system = PDFQASystem(pdf_path)
  53.     # 循环对话
  54.     while True:
  55.         query = input("\n请输入您的问题(输入 'exit' 退出):")
  56.         if query.lower() in ["exit", "quit"]:
  57.             print("对话结束。")
  58.             break
  59.         result = qa_system.ask(query)
  60.         print(f"问题:{query}")
  61.         print(f"答案:{result}")
复制代码
PDF内容:
   银行贷款的五级分类:
一、 正常贷款: 借款人可以或许履行合同,一直能正常还本付息,不存在任何影响贷款本息及时全额偿还的消极因素,银行对借款人按时足额偿还贷款本息有充分把握。 贷款损失的概率为 0。
二、 关注贷款:尽管借款人有本领偿还贷款本息,但存在一些可能对偿还产生倒霉影响的因 素,如这些因素继续下去,借款人的偿还本领受到影响,贷款损失的概率不会凌驾 5%。
三、 次级贷款: 借款人的还款本领出现明显题目,完全依赖其正常营业收入无法足额偿还贷 款本息,必要通过处分资产或对外融资乃至执行抵押包管来还款付息。贷款损失的概率在 30%-50%。
四、 可疑贷款: 借款人无法足额偿还贷款本息,纵然执行抵押或包管,也肯定要造成一部分损失,只是由于存在借款人重组、兼并、合并、抵押物处理和未决诉讼等待定因素, 损失金 额的多少还不能确定,贷款损失的概率在50%-75%之间。
五、 损失贷款: 指借款人已无偿还本息的可能,无论采取什么步调和履行什么程序,贷款都注定要损失了,或者固然能收回极少部分,但其价值也是微乎其微,从银行的角度看,也没有意义和必要再将其作为银行资产在账目上生存下来,对于这类贷款在履行了必要的法律程 序之后应立即予以注销,其贷款损失的概率在75%-100%。
银行贷款的流程:
一、贷款申请借款人必要向银行提出借款申请,并提交相干资料。这些资料通常包括有效的身份证明(如身份证)、户口本、婚姻状态证明(如完婚证)、收入证明以及银行流水等。这些资料有助于银行评估借款人的名誉状态和还款本领。
二、贷款调查银行在收到借款申请后,会对借款人的合法性、安全性、红利性等情况进行调查。这一步调主要是为了进一步核实借款人提供的资料,并评估贷款的风险。
三、贷款审批银行会根据审贷分离、分级审批的贷款管理制度进行贷款审批。在此过程中,银行会综合考虑借款人的名誉记载、还款本领、包管情况等因素,决定是否允许贷款申请以及贷款的额度、期限和利率等。
四、签署合同若银行允许了贷款申请,下一步便是与银行签署借款合同。合同会详细列明贷款金额、期限、利率、还款方式等关键条款。签署合同是两边达成法律束缚的重要环节。
五、贷款发放一旦合同签署完毕,银行会根据约定将贷款金额发放到借款人指定的账户。这标志着贷款流程的正式完成,借款人可以开始使用贷款资金。
六、贷后检查与贷款归还在贷款发放后,银行会定期对借款人执行借款合怜悯况及经营情况进行追踪调查和检查,以确保贷款按照合同规定使用并按时归还。借款人必要按照约定的还款计规定期偿还本金和利息。如果借款人必要展期,应在借款到期日之前向银行提出贷款延 期申请,由银行决定是否允许延期。
综上所述,银行贷款的详细流程包括贷款申请、贷款调查、贷款审批、签署合同、贷款发放
以及贷后检查与贷款归还等步调。在整个流程中,借款人必要配合银行提供必要的资料和信 息,并确保按照合同约定使用贷款并按时还款
  运行结果:

以上就是全部内容了,欢迎各位评论区提问。末了祝各位小伙伴学习顺利,结业都能进大厂~

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

去皮卡多

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表