初步了解LangChain| 豆包MarsCode AI刷题

125 阅读4分钟

一,LangChain:

一个基于大语言模型(LLMs)用于构建端到端语言模型应用的框架,它可以让开发者使用语言模型来实现各种复杂的任务,例如文本到图像的生成、文档问答、聊天机器人等。

二,两个特性:

  1. 数据感知: 能够将语言模型与其他数据源连接起来,从而实现对更丰富、更多样化数据的理解和利用。
  2. 具有代理性: 能够让语言模型与其环境进行交互,使得模型能够对其环境有更深入的理解,并能够进行有效的响应。

三,LangChain框架的设计目标

1.是使这种AI类型的应用成为可能,并帮助我们最大限度地释放大语言模型的潜能。

四,LangChain中的具体组件包括:

  • 模型(Models) ,包含各大语言模型的LangChain接口和调用细节,以及输出解析机制。
  • 提示模板(Prompts) ,使提示工程流线化,进一步激发大语言模型的潜力。
  • 数据检索(Indexes) ,构建并操作文档的方法,接受用户的查询并返回最相关的文档,轻松搭建本地知识库。
  • 记忆(Memory) ,通过短时记忆和长时记忆,在对话过程中存储和检索数据,让ChatBot记住你是谁。
  • 链(Chains) ,是LangChain中的核心机制,以特定方式封装各种功能,并通过一系列的组合,自动而灵活地完成常见用例。
  • 代理(Agents) ,是另一个LangChain中的核心机制,通过“代理”让大模型自主调用外部工具和内部工具,使强大的“智能化”自主Agent成为可能!你的 App 将产生自驱力!

五,项目: 易速鲜花内部员工知识库问答系统

(一)项目背景

“易速鲜花”是一个大型在线鲜花销售平台,拥有自己的业务流程和员工手册。但这些信息分散在内部网络和HR部门目录中,不便于查询。为了解决信息分散、查询困难、版本更新不同步的问题,我们开发了一个基于LangChain框架的“Doc-QA”系统,使得员工可以方便、准确地查询所需的信息。

(二)实现框架

数据源 (Data Sources)

  • 非结构化数据:PDF、Word、TXT格式的文档
  • 结构化数据:SQL等
  • 代码:Python、Java等

(三)大模型应用 (Application)

  • 使用大模型(如OpenAI GPT)作为逻辑引擎,生成所需的回答。

(四)数据处理管道 (Pipeline)

  1. Loading:文档加载器将Documents加载为LangChain能读取的形式。
  2. Splitting:文本分割器将Documents切分为指定大小的文档块。
  3. Storage:将文档块嵌入并存储到向量数据库中,形成嵌入片。
  4. Retrieval:从存储中检索分割后的文档,找到与输入问题相似的嵌入片。
  5. Output:将问题和检索到的嵌入片传递给语言模型,生成答案。

(五)具体实现步骤

1.数据的准备和载入

使用LangChain中的document_loaders加载PDF、Word和TXT格式的文档。

2.文本的分割

使用RecursiveCharacterTextSplitter将文本分割成更小的块

3.向量数据库存储

使用OpenAIEmbeddings生成嵌入,并将其存储在Qdrant向量数据库中。

from langchain.vectorstores import Qdrant
from langchain.embeddings import OpenAIEmbeddings

vectorstore = Qdrant.from_documents( 
documents=chunked_documents, 
embedding=OpenAIEmbeddings(), 
location=":memory:", 
collection_name="my_documents",
)

4.相关信息的获取

使用RetrievalQA链,创建一个检索式问答模型。

import logging
from langchain.chat_models import ChatOpenAI
from langchain.retrievers.multi_query import MultiQueryRetriever
from langchain.chains import RetrievalQA

logging.basicConfig()
logging.getLogger('langchain.retrievers.multi_query').setLevel(logging.INFO)

llm = ChatOpenAI(model_name="gpt-3.5-turbo", temperature=0)
retriever_from_llm = MultiQueryRetriever.from_llm(retriever=vectorstore.as_retriever(), llm=llm)
qa_chain = RetrievalQA.from_chain_type(llm, retriever=retriever_from_llm)

5. 生成回答并展示

使用Flask创建一个简单的Web界面,用于与用户进行交互并展示回答。

六,总结

通过实现“易速鲜花”内部员工知识库问答系统,我深刻体会到LangChain框架在处理非结构化数据方面的强大功能。整个流程,从文档加载、文本分割、嵌入生成到向量数据库存储与检索,再到最终生成回答,LangChain提供了简洁而高效的解决方案。借助大模型和向量数据库的结合,复杂的内部知识查询变得轻松易行,显著提升了员工的工作效率。