首页 > 其他分享 >基于大语言模型LangChain框架:知识库问答系统实践

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

时间:2024-06-21 16:30:01浏览次数:24  
标签:语言 框架 AI 模型 知识库 LangChain 问答

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

图片

为了解决这个问题,从 2022 年开始,多家机构和个人陆续推出了大量开源项目,帮助开发者快速创建基于大语言模型的端到端应用程序或流程,其中较为著名的是 LangChain 框架。

LangChain 框架是一种利用大语言模型的能力开发各种下游应用的开源框架,旨在为各种大语言模型应用提供通用接口,简化大语言模型应用的开发难度。它可以实现数据感知和环境交互,即能够使语言模型与其他数据源连接起来,并允许语言模型与其环境进行交互。本文将重点介绍 LangChain 框架的核心模块,以及使用 LangChain 框架搭建知识库问答系统的实践

LangChain 框架核心模块

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

组件化

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

现成的链式组装

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

简化开发难度

通过提供组件化和现成的链式组装,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 APIllm=ChatOpenAI(temperature=0.1, max_tokens=2048)# 初始化问答链qa = Conversational
RetrievalChain.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'])

如何学习AI大模型?

作为一名热心肠的互联网老兵,我决定把宝贵的AI知识分享给大家。 至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、全套AGI大模型学习路线

AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!

img

二、640套AI大模型报告合集

这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。

img

三、AI大模型经典PDF籍

随着人工智能技术的飞速发展,AI大模型已经成为了当今科技领域的一大热点。这些大型预训练模型,如GPT-3、BERT、XLNet等,以其强大的语言理解和生成能力,正在改变我们对人工智能的认识。 那以下这些PDF籍就是非常不错的学习资源。

img

四、AI大模型商业化落地方案

img

作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。

标签:语言,框架,AI,模型,知识库,LangChain,问答
From: https://blog.csdn.net/python1234_/article/details/139850460

相关文章

  • LangChain:如何高效管理 LLM 聊天历史记录?
    LangChain团队发布了一篇关于使用DragonflyDB来有效管理LangChain应用程序聊天历史记录的教程。该教程旨在解决用户在使用LangChain应用程序时普遍遇到的一个问题:如何高效地管理聊天历史记录。LangChain团队在推文中强调了DragonflyDB在管理聊天历史记录中的......
  • 5分钟了解LangChain的路由链
    上上篇文章《5分钟理透LangChain的Chain》里用到了顺序链SequentialChain,它可以将多个链按顺序串起来。本文介绍LangChain里的另外1个重要的链:路由链。1.路由链概念**路由链(RouterChain)**是由LLM根据输入的Prompt去选择具体的某个链。路由链中一般会存在多个Prompt,Prompt结合LL......
  • 基于RAG的私人知识库聊天机器人
    随着人工智能的快速发展,特别是大语言模型的惊艳表现,让我们见证了信息检索和知识管理系统的重大进步。在这篇文章中,将探讨如何利用Retrieval-AugmentedGeneration(RAG)技术,结合MongoDB数据库和LangChain框架,来构建一个先进的私人知识聊天机器人。大模型聊天机器人的不......
  • langchain入门
    LangChain为各种大型语言模型应用提供通用接口,从而简化应用程序的开发流程,轻松地构建如下所示的RAG应用 理解langchain的运作机制LangChain是一个为构建大型语言模型(LLMs)驱动的应用程序而设计的框架。它的核心目标是简化从开发到生产的整个应用程序生命周期。模块化构......
  • 2024 年最新 Python 基于 LangChain 框架基础案例详细教程(更新中)
    LangChain框架搭建安装langchainpipinstalllangchain-ihttps://mirrors.aliyun.com/pypi/simple/安装langchain-openaipipinstalllangchain-openai-ihttps://mirrors.aliyun.com/pypi/simple/ChatOpenAI配置环境变量环境变量OPENAI_API_KEY=OpenAIAP......
  • zabbix“专家坐诊”第242期问答
    问题一Q:snmp检查用的什么性能啊?设备多了就检测失败,实际是能通的。A:把大批量请求取消,把异常获取不到的监控项都禁用Q:是这个吧,显示不一样。A:什么版本?用的是v3吗?把异常获取不到的监控项都禁用。Q:appliance6.4,用的v3,获取异常的也是我要监控的,我都得开启。A:这几台原本是通的是......
  • (26-4-02)基于OpenAI和LangChain的上市公司估值系统:OpenAI API和Langchain探索(2)Langch
    10.5.2 Langchain和OpenAI处理编写文件summarizer.py,定义了使用Langchain和OpenAI处理文本和文档的功能处。其中,类UnstructuredStringLoader用于加载未结构化的字符串内容,将其分割成适当大小的块。方法split_text_in_chunks和方法split_doc_in_chunks分别用于将文本......
  • 构建LangChain应用程序的示例代码:35、如何使用假设性文档嵌入(HyDE)技术来改善文档索引
    使用假设性文档嵌入(HyDE)改善文档索引摘要本文介绍了如何使用假设性文档嵌入(HypotheticalDocumentEmbeddings,简称HyDE),这是根据一篇论文中描述的技术。HyDE是一种嵌入技术,它接收查询,生成一个假设性的答案,然后嵌入该生成的文档,并将其作为最终示例使用。代码及注释froml......
  • 知识库的创建(1) - KnowledgeFile文件加载和分割
    文章目录前言一、类的初始化方法`__init__`1.参数解析2.初始化步骤二、方法`file2docs`1.功能2.参数3.步骤三、方法`docs2texts`1.功能2.参数3.步骤四、方法`file2text`1.功能2.参数3.步骤五、方法`file_exist`1.功能2.返回3.方法`get_mtim......
  • 如何手撸一个自有知识库的RAG系统
    RAG通常指的是"Retrieval-AugmentedGeneration",即“检索增强的生成”。这是一种结合了检索(Retrieval)和生成(Generation)的机器学习模型,通常用于自然语言处理任务,如文本生成、问答系统等。我们通过一下几个步骤来完成一个基于京东云官网文档的RAG系统数据收集建立知识库向......