基于大语言模型LangChain框架:知识库问答系统实践

news2025/1/21 0:49:41

ChatGPT 所取得的巨大成功,使得越来越多的开发者希望利用 OpenAI 提供的 API 或私有化模型开发基于大语言模型的应用程序。然而,即使大语言模型的调用相对简单,仍需要完成大量的定制开发工作,包括 API 集成、交互逻辑、数据存储等。
在这里插入图片描述

为了解决这个问题,从 2022 年开始,多家机构和个人陆续推出了大量开源项目,帮助开发者快速创建基于大语言模型的端到端应用程序或流程,其中较为著名的是 LangChain 框架。
LangChain 框架是一种利用大语言模型的能力开发各种下游应用的开源框架,旨在为各种大语言模型应用提供通用接口,简化大语言模型应用的开发难度。它可以实现数据感知和环境交互,即能够使语言模型与其他数据源连接起来,并允许语言模型与其环境进行交互。本文将重点介绍 LangChain 框架的核心模块,以及使用 LangChain 框架搭建知识库问答系统的实践。

LangChain框架核心模块

使用 LangChain 框架的核心目标是连接多种大语言模型(如 ChatGPT、LLaMA 等)和外部资源(如 Google、Wikipedia、Notion 及 Wolfram 等),提供抽象组件和工具以在文本输入和输出之间进行接口处理。大语言模型和组件通过“链(Chain)”连接,使得开发人员可以快速开发原型系统和应用程序。LangChain 的主要价值体现在以下几个方面。

(1)组件化:LangChain 框架提供了用于处理大语言模型的抽象组件,以及每个抽象组件的一系列实现。这些组件具有模块化设计,易于使用,无论是否使用 LangChain 框架的其他部分,都可以方便地使用这些组件。

(2)现成的链式组装:LangChain 框架提供了一些现成的链式组装,用于完成特定的高级任务。这些现成的链式组装使得入门变得更加容易。对于更复杂的应用程序,LangChain 框架也支持自定义现有链式组装或构建新的链式组装。

(3)简化开发难度:通过提供组件化和现成的链式组装,LangChain 框架可以大大简化大语言模型应用的开发难度。开发人员可以更专注于业务逻辑,而无须花费大量时间和精力处理底层技术细节。

LangChain 提供了以下 6 种标准化、可扩展的接口,并且可以外部集成:模型输入/输出(Model I/O),与大语言模型交互的接口;数据连接(Data connection),与特定应用程序的数据进行交互的接口;链(Chain),用于复杂应用的调用序列;记忆(Memory),用于在链的多次运行之间持久化应用程序状态;智能体(Agent),语言模型作为推理器决定要执行的动作序列;回调(Callback),用于记录和流式传输任何链式组装的中间步骤。

知识库问答系统实践

大语言模型虽然可以很好地回答很多领域的各种问题,但是由于其知识是通过语言模型训练及指令微调等方式注入模型参数中的,因此针对本地知识库中的内容,大语言模型很难通过此前的方式有效地进行学习。通过 LangChain 框架,可以有效地融合本地知识库内容与大语言模型的知识问答能力。

基于 LangChain 的知识库问答系统框架如下图所示。

在这里插入图片描述

知识库问答系统的工作流程主要包含以下几个步骤。

(1)收集领域知识数据构造知识库,这些数据应当能够尽可能地全面覆盖问答需求。

(2)对知识库中的非结构数据进行文本提取和文本分割,得到文本块。

(3)利用嵌入向量表示模型给出文本块的嵌入表示,并利用向量数据库进行保存。

(4)根据用户输入信息的嵌入表示,通过向量数据库检索得到最相关的文本片段,将提示词模板与用户提交问题及历史消息合并输入大语言模型。

(5)将大语言模型结果返回给用户。

上述过程的代码示例如下:

from langchain.document_loaders import DirectoryLoader
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import Chroma
from langchain.chains import ChatVectorDBChain, ConversationalRetrievalChain
from langchain.chat_models import ChatOpenAI
from langchain.chains import RetrievalQA

从本地读取相关数据

loader = DirectoryLoader(
‘./Langchain/KnowledgeBase/’, glob=‘**/*.pdf’, show_progress=True
)
docs = loader.load()

将文本进行分割

text_splitter = CharacterTextSplitter(
chunk_size=1000,
chunk_overlap=0
)
docs_split = text_splitter.split_documents(docs)

初始化OpenAI Embeddings

embeddings = OpenAIEmbeddings()

将数据存入Chroma向量存储

vector_store = Chroma.from_documents(docs, embeddings)

初始化检索器,使用向量存储

retriever = vector_store.as_retriever()

system_template = “”"
Use the following pieces of context to answer the users question.
If you don’t know the answer, just say that you don’t know, don’t try to make up an answer.
Answering these questions in Chinese.

{question}

{chat_history}
“”"

构建初始消息列表

messages = [
SystemMessagePromptTemplate.from_template(system_template),
HumanMessagePromptTemplate.from_template(‘{question}’)
]

初始化Prompt对象

prompt = ChatPromptTemplate.from_messages(messages)

初始化大语言模型,使用OpenAI API

llm=ChatOpenAI(temperature=0.1, max_tokens=2048)

初始化问答链

qa = ConversationalRetrievalChain.from_llm(llm,retriever,condense_question_prompt=prompt)

chat_history = []
while True:
question = input(’ 问题:')

开始发送问题chat_history为必须参数,用于存储历史消息

result = qa({‘question’: question, ‘chat_history’: chat_history})
chat_history.append((question, result[‘answer’]))
print(result[‘answer’])

在这里插入图片描述

▊《大规模语言模型:从理论到实践》

张奇,桂韬,郑锐,黄萱菁 著

解码大语言模型奥秘,引领机器智能新时代

详细介绍构建LLM的四个主要阶段:预训练、有监督微调、奖励建模和强化学习

解读ChatGPT背后的核心技术

配全书PPT课件

为了使更多的自然语言处理研究人员和对大语言模型感兴趣的读者能够快速了解大模型的理论基础,并开展大模型实践,复旦大学张奇教授团队结合他们在自然语言处理领域的研究经验,以及分布式系统和并行计算的教学经验,在大模型实践和理论研究的过程中,历时8个月完成本书的撰写。希望这本书能够帮助读者快速入门大模型的研究和应用,并解决相关技术问题。

本书详细介绍了构建大语言模型的四个主要阶段:预训练、有监督微调、奖励建模和强化学习。每个阶段都有算法、代码、数据、难点及实践经验的详细讨论。

本书以大语言模型的基础理论开篇,探讨了大语言模型预训练数据的构建方法,以及大语言模型如何理解并服从人类指令,介绍了大语言模型的应用和评估方法,为读者提供了更全面的视野。

本书旨在为对大语言模型感兴趣的读者提供入门指南,也可作为高年级本科生和研究生自然语言处理相关课程的补充教材!

本书一经上市,便摘得京东新书日榜销售TOP1的桂冠,可想大家对本书的认可和支持!

在这里插入图片描述

↑限时五折优惠↑

在这里插入图片描述

▊《LangChain入门指南:构建高可复用、可扩展的LLM应用程序》

李特丽 康轶文 著

全面介绍LangChain技术

逐步构建自己的LLM应用程序

内容注重高可复用性和可扩展性

实用案例和示例代码助你快速上手

与社区互动,共享经验与解决难题

本书由LangChain中文网联合创始人李特丽与创始人康轶文共同编著!

本书专门为那些对自然语言处理技术感兴趣的读者提供了系统的LLM应用开发指南。全书分为11章,从LLM基础知识开始,通过LangChain这个开源框架为读者解读整个LLM应用开发流程。第1~2章概述LLM技术的发展背景和LangChain框架的设计理念。从第3章开始,分章深入介绍LangChain的6大模块,包括模型I/O、数据增强、链、记忆等,通过大量代码示例让读者了解其原理和用法。第9章通过构建PDF问答程序,帮助读者将之前学习的知识应用于实践。第10章则介绍集成,可拓宽LangChain的用途。第11章为初学者简要解析LLM的基础理论,如Transformer模型等。

本书以LangChain这个让人熟悉的框架为主线,引导读者一步一步掌握LLM应用开发流程,适合对大语言模型感兴趣的开发者、AI应用程序开发者阅读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1344579.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么 export 导出一个字面量会报错而使用 export default 不会报错

核心 其实总的来说就是 export 导出的是变量的句柄(或者说符号绑定、近似于 C 语言里面的指针,C里面的变量别名),而 export default 导出的是变量的值。 需要注意的是:模块里面的内容只能在模块内部修改,…

canvas绘制红绿灯路口

无图不欢&#xff0c;先上图 使用方法&#xff08;以vue3为例&#xff09; <template><canvas class"lane" ref"laneCanvas"></canvas> </template><script setup> import { ref, onMounted } from vue import Lane from …

IDEA中允许开启多个客户端

这个时候不要在客户端里创建socket对象时指定端口号了&#xff0c;否则会报错BindException

普通人如何月入过万?2024普通人创业适合干什么?

如果你的月收入不到1万块&#xff0c;也从来没有体验过一天就赚1万块是什么感觉的话&#xff0c;你还想创业&#xff1f;你如果想通过创业逆天改命&#xff0c;麻烦你一定要看完这篇文章。 普通人你要是想赚钱&#xff0c;一定要去赚那种能看得见的钱。 什么叫看得见的钱&…

35.搜索插入位置

给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 示例 1: 输入: nums [1,3,5,6], target 5 输出: 2示例 2: 输入:…

服务器运行状况监控工具

服务器运行状况监视提供了每个服务器状态和性能的广泛概述&#xff0c;通过监控服务器指标&#xff0c;如 CPU 使用率、内存消耗、I/O、磁盘使用率、进程等&#xff0c;服务器运行状况监控可以避免服务器停机。 服务器性能监控指标 服务器是网络中最重要的组件之一&#xff0…

Android studio课程设计开发实现---日记APP

Android studio课程设计开发实现—日记APP 文章目录 Android studio课程设计开发实现---日记APP前言一、效果二、功能介绍1.主要功能2.涉及知识点 三、实现思路下载链接总结 前言 你们好&#xff0c;我是oy&#xff0c;介绍一个简易日记APP。 一、效果 1.启动页、引导页及登…

【北亚服务器数据恢复】san环境下LUN Mapping出错导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境&#xff1a; san环境下的存储上一组由6块硬盘组建的RAID6&#xff0c;划分为若干LUN&#xff0c;MAP到跑不同业务的服务器上&#xff0c;服务器上层是SOLARIS操作系统UFS文件系统。 服务器故障&#xff1a; 业务需求需要增加一台服务器跑新增的应用&#xf…

社区医院挂号预约服务管理系统95an6

社区医院管理服务系统具有社区医院信息管理功能的选择。社区医院管理服务系统采用p[ython技术&#xff0c;基于django框架&#xff0c;mysql数据库进行开发&#xff0c;实现了首页、个人中心、用户管理、医生管理、预约医生管理、就诊信息管理、诊疗方案管理、病历信息管理、健…

人工智能工程师的前景怎么样

人工智能是未来的发展趋势&#xff0c;因此&#xff0c;人工智能工程师也将成为就业爆款。人工智能工程师负责创建和开发自动化系统、算法和机器学习模型&#xff0c;以实现自主决策和任务执行。由于人工智能在可穿戴设备、家庭自动化、智能城市和自动驾驶等领域都有广泛应用&a…

北斗卫星助力物流企业,打造智慧运输新时代

北斗卫星助力物流企业&#xff0c;打造智慧运输新时代 北斗卫星系统作为我国自主研发的卫星导航系统&#xff0c;近年来在智慧物流领域发挥了重要作用。通过北斗卫星系统的应用&#xff0c;物流企业可以实现智能化管理&#xff0c;提高运输效率&#xff0c;降低物流成本。越来…

前端三件套html/css/js的基本认识以及示例程序

简介 本文简要讲解了html,css,js.主要是让大家简要了解网络知识 因为实际开发中很少直接写html&css,所以不必过多纠结,了解一下架构就好 希望深度学习可以参考MDN和w3school HTML 基础 HTML (Hyper Text Markup Language) 不是一门编程语言,而是一种用来告知浏览器如…

微服务(1)

目录 1.什么是微服务&#xff1f;谈谈你对微服务的理解&#xff1f; 2.什么是Spring Cloud&#xff1f; 3.Springcloud中的组件有哪些&#xff1f; 3.具体说说SpringCloud主要项目&#xff1f; 5.SpringCloud项目部署架构&#xff1f; 1.什么是微服务&#xff1f;谈谈你对微…

OpenCV-Python(30):Harris角点检测

目标 理解Harris角点检测的概念掌握函数cv2.cornerHarris()、cv2.cornerSubPix()的用法 Harris算法原理 通过前面的图像特征介绍&#xff0c;我们知知道了角点的一个特性&#xff1a;向任何方向移动变化都很大。Chris_Harris 和Mike_Stephens 在1988 年的文章《A Combined Co…

【滑动窗口】C++算法:K 个不同整数的子数组

作者推荐 动态规划 多源路径 字典树 LeetCode2977:转换字符串的最小成本 本题涉及知识点 滑动窗口 LeetCoe992 K 个不同整数的子数组 给定一个正整数数组 nums和一个整数 k&#xff0c;返回 nums 中 「好子数组」 的数目。 如果 nums 的某个子数组中不同整数的个数恰好为 …

【DevOps 工具链】日志管理工具 - 22种 选型(读这一篇就够了)

文章目录 1、简述2、内容分类3、归纳对比表&#xff08;排序不分先后&#xff09;4、日志管理主要目的5、日志管理工具 22种 详细&#xff08;排序不分先后&#xff09;5.1、ManageEngine EventLog Analyzer5.1.1、简介5.1.2、效果图5.1.3、日志管理架构5.1.4、EventLog Analyz…

进行VMware日志管理

随着公司转向虚拟化其 IT 空间&#xff0c;虚拟环境日志监控正在占据日志管理的很大一部分,除了确保网络安全外&#xff0c;虚拟机日志监控还有助于管理虚拟化工具&#xff0c;这是最复杂的任务之一。 对虚拟环境日志的监控分析 当今公司中最受欢迎的虚拟平台之一是 VMware。…

基于SSM的蛋糕甜品店管理系统的设计与开发论文

基于SSM的蛋糕甜品店管理系统的设计与开发 摘要 如今&#xff0c;科学技术的力量越来越强大&#xff0c;通过结合较为成熟的计算机技术&#xff0c;促进了学校、医疗、商城等许多行业领域的发展。为了顺应时代的变化&#xff0c;各行业结合互联网、人工智能等技术&#xff0c…

软件工程导论——(为什么要学习软件工程?软件工程能学到什么?如何学习软件工程?)

导论&#xff08;引言&#xff09;&#xff1a; 1.为什么要学习软件工程&#xff1f; 软件工程知识并不只是项目管理可以用&#xff0c;同样适用于开发岗。比如开发也要做需求分析和架构设计&#xff0c;也要做计划。学习软件工程后也可以帮助开发人员更好的理解软件项目的整个…

Solidworks学习笔记

本内容为solidworks的学习笔记&#xff0c;根据自己的理解进行记录&#xff0c;部分可能不正确&#xff0c;请自行判断。 学习视频参考&#xff1a;【SolidWorks2018视频教程 SW2018中文版软件基础教学知识 SolidWorks自学教程软件操作教程 sw视频教程 零基础教程 视频教程】 h…