Redian新闻
>
基于大语言模型LangChain框架:知识库问答系统实践|文末赠书

基于大语言模型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 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 的桂冠,可想大家对本书的认可和支持!

活动推荐

AI 前线为粉丝准备了纸质书籍 3 本!长按识别下图小程序,参与抽奖活动,由小程序随机抽出 3 位,每人赠送一本书。开奖时间:2 月 2 日(下周五) 18:30




你也「在看」吗? 👇

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
OpenAI科学家Andrej Karpathy力荐,23年必读的大语言模型论文清单万字长文再论大语言模型的位置编码及其外推性高球场面积与梵蒂冈国土诗小说【无佩玲案】北京/深圳内推 | 腾讯游戏AI大语言模型团队招聘LLM算法工程师/研究员gin框架路由讲解NeurIPS 2023 | 基于双重结构知识图的视觉语言模型高效迁移卓世科技COO李伟伟:AI大模型驱动商业转化的多元实践|甲子引力大语言模型引领内容生产方式变革北京内推 | ​默沙东高阶分析团队招聘大语言模型方向NLP算法实习生家居修理系列:屋顶篇(1)登高安全后来的我们WWW 2024 | 阿里等提出GraphTranslator,将图模型对齐大语言模型用跑1个LoRA微调大语言模型的延迟跑10个!北京获准的大模型占全国近半;OpenAI CEO筹建AI芯片公司;零一万物多模态语言模型上线丨AIGC大事日报hé bàng?hé bèng?中澳家长对感冒发烧的不同态度NIPS2023 | 评估大语言模型的事实性五种资源类别,如何提高大语言模型的资源效率,超详细综述来了Meta 宣布改组旗下 AI 部门,正训练自家下一代大语言模型 Llama 3;国内首个网络安全大模型评测平台发布丨AIGC日报谷歌发布Prompt Expansion框架,让文生图更轻松!对标 OpenAI GPT-4,MiniMax 国内首个 MoE 大语言模型全量上线OSCHINA&Gitee:2023大语言模型LLM技术报告“多巴胺”的“胺”应读为àn,“2023年十大语文差错”发布对标OpenAI GPT-4,MiniMax 国内首个 MoE 大语言模型全量上线面向超长上下文,大语言模型如何优化架构,这篇综述一网打尽了大Batch训练大语言模型的探索与实践东北大学发布TechGPT2.0大语言模型HaluEval 2.0:大语言模型事实性幻象的实验性分析Google开放域问答系统新突破!多粒度评估提升近20个点FuseLLM:大语言模型的知识融合!视觉模型+大语言模型:首个支持10K+帧长视频理解任务的新型框架今日Arxiv最热NLP大模型论文:清华大学让大语言模型自动并行自回归解码,速度提升高达4倍!最佳实践|一文讲解端线程死循环的治理拆解大语言模型RLHF中的PPO算法
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。