一: LangChain介绍
LangChain 是一个基于大型语言模型(LLM)开发应用程序的框架, 它旨在简化语言模型应用的开发流程,特别是在构建对话系统和其他基于语言的AI解决方案时.目标是将复杂的语言模型技术转化为可通过简单API调用实现的功能,从而使开发者能够更加专注于创造性的解决方案设计。高效地解决了开发大语言模型应用的痛点问题。
Langchain 最主要的特色是可以将 LLM 应用研发过程中的交互 Prompt、LLM 模型调用、语言模型与环境互动的自适应等方式融为一体。LangChain提供两种程序语言的实作版本,Python版与Javascript版
LangChain中文网: LangChain中文网:500页中文文档教程,助力大模型LLM应用开发从入门到精通
二: LangChain 解决了什么问题
通过上面的概念,我们可以看到 LangChain 实际上是基于大语言模型上层的一个应用框架,那么 LangChain 具体解决了大模型时代的哪些问题才让他脱颖而出呢。具体来说,主要有以下几个方面:
- 模型接口的统一
现在的大模型除了大家熟知的 ChatGPT,还有 Meta 开源的 LLaMA,清华大学的 GLM 等,这些模型的使用方法包括 api 和推理方式都相差甚远,如果你想从使用 ChatGPT 切换到调用 LLaMA,需要花费不少的精力去开发前置的模型使用模块,会有大量重复繁琐的工作。而 LangChain 对好多常见的 API 和大模型做了封装,可以直接拿来就用,节省了大量的时间。
- 打破了 LLM 提示词和返回内容 token 限制,为最新知识的检索、推理提供了更大的前景
像 ChatGPT 这样的语言模型,数据只更新到 2021 年,如何让大模型回答和学习到之后的知识就是一个很重要的问题。而且 ChatGPT 的 API 是有提示词和返回内容的限制的,3.5 是 4k,4 则是 8k,而我们往往需要从自己的数据、自己的文档中获取特定的信息,这可能是一本书、一个 PDF 文件、一个带有专有信息的数据库。这些信息的 token 数量会远高于 4k 的阈值,直接使用大模型是无法获取到相应的知识的,因为超过阈值的信息就被截断了。
LangChain 提供了对向量数据库的支持,能够把超长的 txt、pdf 等通过大模型转换为 embedding 的形式,存到向量数据库中,然后利用数据库进行检索。这样就可以支持更多长度的输入,解放了 LLM 的优势。
三: LangChain 能做什么
- 个人助理,记住用户的行为数据并提供建议
- 聊天机器人,语言模型天然擅长生成文本
- 生成式问答
- 文档回答,针对特定的问题回答
- 文本摘要,从文本中提取信息
- 代码理解,理解代码的意图
- 文本总结,从较长的文本中总结信息,利用 LLM 和 embedding 对长文档进行压缩和总结
四: LangChain 核心模块
- Tools:工具,作为大模型函数的工具,被大模型调用。
- Models:模型,是各种类型的模型和模型集成。
- Text splitters:文本切割器,RAG的时候用到。
- Output parsers:输出解析器负责将LLM的输出解析为更结构化的格式。
- Document loader:文档加载器负责从各种来源加载文档。
- Verctorstores:向量存储是可以有效存储和检索嵌入的数据库。做智能客服和知识库的时候用到。
- Prompts:提示,包括提示管理、提示优化和提示序列化。
- Memory:记忆,用来保存和模型交互时的上下文状态。
- Indexes:索引,用来结构化文档,以便和模型交互。包括文档加载程序、向量存储器、文本分割器和检索器等。
- Agents:代理,决定模型采取哪些行动,执行并且观察流程,直到完成为止。
- Chains:链,一系列对各种组件的调用。
五: LangChain 工作流程
Langchain 提供各类模块支持,按照复杂性依次是模块、提示、内存、索引、链、代理,为了快速地理解使用流程及安全问题,我们可以通过本地知识库问答的这类应用来了解 Langchain 的工作流程。
如下图所示,从 1、2、3、4、5、6 阶段看,本地各类文档数据可以通过 Text 类划分为长度更短的段落,利用 embedding 模型进行向量化,存入向量数据库。8、9、10 阶段是把提问进行语义的向量化处理,经过处理后的 query 向量和已有文章段落向量进行匹配。11、12 阶段是可以设定检索匹配度最高的 top-K 个段落,通过把 K 个段落和用户提问组合输出到提示词的模版当中。13、14、15 阶段是最终输送给语言模型的 Prompt 和语言模型的输出。
从安全攻防角度看,上述各阶段的安全问题主要存在于如何通过控制输入信息来影响模型输出内容,相关影响的阶段主要是 8、9、10 阶段和 13、14、15 阶段。
链(Chain)是 langchain 中连接输入输出的应用角色,主要应用于 13、14、15 阶段。开发者可以基于链快速实现输入 prompt 预处理、输出后处理等操作,开发一个简单的 LLM 应用。langchain 内也实现了 LLMBashChain、LLMMathChain、SQLDatabaseChain 等链,开发者可以直接调用这些链,完成大模型应用的快速部署。
参考资料:
深入剖析大模型安全问题:Langchain框架的隐藏风险-腾讯新闻
https://zhuanlan.zhihu.com/p/663369695