LangChain介绍
LangChain是个开源的框架,它可以让AI开发人员把像GPT-4这样的大型语言模型(LLM)和外部数据结合起来。可以简单认为LangChain是LLM领域的Spring,以及开源版的ChatGPT插件系统。
LangChain的强大之处不仅能通过API调用语言模型,还可以执行如下功能:
- 数据感知:将语言模型连接到其他数据源
- 具有代理性质:允许语言模型与其环境交互
例如:GPT模型是用到2021年的数据训练的,这可能会有很大的局限性,如果能让GPT模型连接到自定义的数据和计算,就就会产生更多的可能性。LangChain可以让LLM在回答问题时参考整个数据库,可以让GPT模型访问最新的数据,比如报告、文档和网站信息。
LangChian可以将LLM 模型、向量数据库、交互层 Prompt、外部知识、外部工具整合到一起,进而可以自由构建 LLM 应用。
LangChain组件
LangChain提供了各种不同的组件来帮助使用LLM。其核心组件有Models、Indexes、Chains、Memory、Prompts以及Agent,如图所示:
将LangChain的核心组件按照逐渐增加的复杂性排列如下:
- 模型(models):LangChain支持的各种模型类型以及模型集成。
- 提示(prompts):LangChain提供了PromptTemplates,允许可以根据用户的输入来动态地更改提示。包括提示管理、提示优化和提示序列化。
- 记忆(memory):内容记忆。记忆是在链/代理调用之间保持状态的概念。LangChain提供了标准的记忆接口、记忆实现及使用记忆的链/代理示例。
- 索引(indexes):索引是指对文档进行结构化的方法,以便 LLM 能够更好的与之交互。该组件主要包括:Document Loaders(文档加载器)、Text Splitters(文本拆分器)、VectorStores(向量存储器)以及Retrievers(检索器)。
- 链(chains):链不仅仅是单个LLM调用,还包括其他系列调用(无论是调用LLM还是不同的实用工具)。LangChain提供了标准的链接口、许多与其他工具的集成。LangChain提供了用于常见应用程序的端到端的链调用。
- 代理(agents):代理涉及LLM做出行动决策、执行该行动、查看观察结果,并重复该过程直到完成。LangChain提供了标准的代理接口,许多可供选择的代理,以及端到端代理的示例。
LangChain实现原理
- 通过将大文档进行向量化表示,然后就可以用它和LLM一起工作,只检索需要引用的信息,来创建相关的提示-完成(prompt-completion)对。
- 当把提示输入到新的聊天机器人里,LangChain就会在向量存储里查询相关的信息,然后将信息和提示一起提供给LLM,生成需要的答案。
Langchain-Chatchat实现原理
- LangChain-Chatchat:基于Langchain与ChatGLM等大语言模型的本地知识库问答应用实现。
- 其实现流程:加载文件 -> 读取文本 -> 文本分割 -> 文本向量化 -> query问句向量化 -> 在文本向量中匹配出与问句向量最相似的
top k
个 -> 匹配出的文本作为上下文和问题一起添加到prompt
中 -> 提交给LLM
生成回答,如图所示:
从文档处理角度来看,实现流程如下:
Docker虚拟磁盘文件迁移
使用Docker来实现LangChain+LLM的功能时,通常所使用的镜像比较大,即Docker虚拟磁盘文件ext4.vhdx会比较大。在Windows本地安装Docker Desktop时,ext4.vhdx默认在C盘下,随着docker run项目的增多会变得更大,所以往往会需要迁移到其他盘符,过程如下:
- 打开Windows CMD
- 查看docker状态和版本:wsl -l -v
- 其中docker-desktop-data需要迁移到其他盘
- wsl --shutdown
- 导出docker-desktop-data
- wsl --export docker-desktop-data D:\docker_data\docker-desktop-data.tar
- 注销 docker-desktop-data
- wsl --unregister docker-desktop-data
- 重新导入docker-desktop-data
- wsl --import docker-desktop-data E:\docker_data\data\ E:\docker_data\docker-desktop-data.tar --version 2