LangChain 框架是一个开源工具,充分利用了大型语言模型的强大能力,以便开发各种下游应用。它的目标是为各种大型语言模型应用提供通用接口,从而简化应用程序的开发流程。具体来说,LangChain 框架可以实现数据感知和环境互动,也就是说,它能够让语言模型与其他数据来源连接,并且允许语言模型与其所处的环境进行互动。
LangChain 的核心组件
LangChian 作为一个大语言模型开发框架,可以将 LLM 模型(对话模型、embedding 模型等)、向量数据库、交互层 Prompt、外部知识、外部代理工具整合到一起,进而可以自由构建 LLM 应用。 LangChain 主要由以下 6 个核心组件组成:
模型输入/输出(Model I/O):与语言模型交互的接口 数据连接(Data connection):与特定应用程序的数据进行交互的接口 链(Chains):将组件组合实现端到端应用。比如后续我们会将搭建检索问答链来完成检索问答。 记忆(Memory):用于链的多次运行之间持久化应用程序状态; 代理(Agents):扩展模型的推理能力。用于复杂的应用的调用序列; 回调(Callbacks):扩展模型的推理能力。用于复杂的应用的调用序列;
在开发过程中,我们可以根据自身需求灵活地进行组合。
以知识库助手为例 搭建大模型应用流程
核心功能
将爬取并总结的MarkDown 文件及用户上传文档向量化,并创建知识库;
选择知识库,检索用户提问的知识片段;
提供知识片段与提问,获取大模型回答;
流式回复;
历史对话记录
确定技术架构和工具
框架:LangChain
Embedding 模型:GPT、智谱、M3E
数据库:Chroma
大模型:GPT、讯飞星火、文心一言、GLM 等
前端:Gradio 和 Streamlit
数据准备与向量知识库构建
本项目实现原理
加载本地文档 -> 读取文本 -> 文本分割 -> 文本向量化 -> question 向量化 -> 在文本向量中匹配出与问句向量最相似的 top k 个 -> 匹配出的文本作为上下文和问题一起添加到 Prompt 中 -> 提交给 LLM 生成回答。
实现明细
收集和整理用户提供的文档
用户常用文档格式有 PDF、TXT、MD 等,首先,我们可以使用 LangChain 的文档加载器模块方便地加载用户提供的文档,或者使用一些成熟的 Python 包进行读取。
由于目前大模型使用 token 的限制,我们需要对读取的文本进行切分,将较长的文本切分为较小的文本,这时一段文本就是一个单位的知识。
将文档词向量化
使用文本嵌入(Embeddings)技术对分割后的文档进行向量化,使语义相似的文本片段具有接近的向量表示。然后,存入向量数据库,完成 索引(index) 的创建。
利用向量数据库对各文档片段进行索引,可以实现快速检索。
将向量化后的文档导入 Chroma 知识库,建立知识库索引
Langchain 集成了超过 30 个不同的向量数据库。Chroma 数据库轻量级且数据存储在内存中,这使得它非常容易启动和开始使用。
将用户知识库内容经过 Embedding 存入向量数据库,然后用户每一次提问也会经过 Embedding,利用向量相关性算法(例如余弦算法)找到最匹配的几个知识库片段,将这些知识库片段作为上下文,与用户问题一起作为 Prompt 提交给 LLM 回答。
大模型集成与 API 连接
集成 GPT、星火、文心、GLM 等大模型,配置 API 连接。
编写代码,实现与大模型 API 的交互,以便获取问题回答。
核心功能实现
构建 Prompt Engineering,实现大模型回答功能,根据用户提问和知识库内容生成回答。
实现流式回复,允许用户进行多轮对话。
添加历史对话记录功能,保存用户与助手的交互历史。
核心功能迭代优化
进行验证评估,收集 Bad Case。
根据 Bad Case 迭代优化核心功能实现。
前端与用户交互界面开发
使用 Gradio 和 Streamlit 搭建前端界面。
实现用户上传文档、创建知识库的功能。
设计用户界面,包括问题输入、知识库选择、历史记录展示等。
部署测试与上线
部署问答助手到服务器或云平台,确保可在互联网上访问。
进行生产环境测试,确保系统稳定。
上线并向用户发布。
维护与持续改进
监测系统性能和用户反馈,及时处理问题。
定期更新知识库,添加新的文档和信息。
收集用户需求,进行系统改进和功能扩展。
整个流程将确保项目从规划、开发、测试到上线和维护都能够顺利进行,为用户提供高质量的基于个人知识库的问答助手。
浙公网安备 33010602011771号