LangChain 是什么
首先 LangChain 是一个框架,这个框架是用来让开发者进行 LLMs (大语言模型)应用开发的。
可以理解是为各种 LLM 开发的脚手架,将 LLM 的各个组件进行封装和链接。把 LLMs 相关的组件“链接”在一起,简化 LLMs 应用的开发难度,方便开发者快速地开发复杂的 LLMs 应用。
举一个不是很恰当的栗子,从 Java 工程师的角度来看 LangChain 更像是 Spring 或者 SpringBoot 这种框架,帮助开发人员更快的进行应用开发。
LangChain 框架组件
Models(I/O):各种类型的模型集成。
Outline概要
· Prompts:模板化、动态选择和管理模型输入
· Language models:通过通用接口调用语言模型
· Output parsers:从模型输出中提取信息
Prompts组件:包含Prompt templates和Example selectors。
Prompt templates:
· 对语言模型的指令
· 一组几个镜头示例来帮助语言模型生成更好的响应
· 对语言模型的一个问题
分别举例:TemplateFormat、MessageTemplate、FewShotPromptTemplate、Example selectors
TemplateFormat:
MessageTemplate:
FewShotPromptTemplate:
Example selectors:
Language models:
· LLMs
· Chat models
LLMs:采用文本字符串作为输入并返回文本字符串的模型。
gpt-3.5-turbo:
Streaming:
Chat models:聊天模型是语言模型的变体。
Caching:
outputparser
· 获取格式指令
· 解析
· 带有提示的解析
分别举例:DateTimeParser、EnumParser、ListParser、OutputParser
DateTimeParser:
EnumParser:
ListParser:
OutputParser:
Memory:记忆涉及在用户与语言模型的交互过程中保留状态概念。用户与语言模型的交互是在 ChatMessages 的概念中捕获的,因此这可以归结为从一系列聊天消息中摄取、捕获、转换和提取知识。一般来说,对于每种类型的记忆,都有两种理解使用记忆的方法。这些是从一系列消息中提取信息的独立函数,然后您可以通过一种方式在链中使用这种类型的内存。内存可以返回多条信息(例如,最近的 N 条消息和所有先前消息的摘要)。
Outline概要
· ConversationBufferMemory
· ConversationBufferWindowMemory
· ConversationTokenBufferMemory
· ConversationSummaryMemory
ConversationBufferMemory:
ConversationBufferWindowMemory:
ConversationTokenBufferMemory:
ConversationSummaryMemory:
Chains:
Outline概要
· LLMChain
· SequentialChain
· SimpleSequentialChain
· SequentialChain
· RouterChain
LLMChain:
SimpleSequentialChain:一般序列链可以将前一个链的输出结果,作为后一个链的输入。一般序列链有唯一输入和输出变量。
SequentialChain:序列链中包含多个链,其中一些链的结果可以作为另一个链的输入。序列链可以支持多个输入和输出变量。
RouterChain:路由链类似一个while else的函数,根据输入值,选择对应的路由(路径)进行后续的链路。整个路由链一般一个输入,一个输出。
Agents:某些应用程序需要根据用户输入对 LLM 和其他工具进行灵活的调用链。代理接口为此类应用程序提供了灵活性。代理可以访问一套工具,并根据用户输入确定使用哪些工具。代理可以使用多种工具,并使用一个工具的输出作为下一个工具的输入。
Outline概要
· 动作代理:在每个时间步,使用所有先前动作的输出来决定下一个动作
· 计划并执行代理:预先决定完整的操作顺序,然后执行所有操作而不更新计划
分别举例:MathAndWikiAgent、PythonREPLAgent、MultiFunctionsAgent
MathAndWikiAgent:
PythonREPLAgent:
MultiFunctionsAgent:
索引(index):索引是指以最佳方式对文档进行结构化,以便语言模型(LLMs)能够与其进行最佳交互。这个模块包含了处
理文档的实用函数。
Outline概要
· 嵌入(Embeddings):嵌入是对信息(例如文本、文档、图像、音频等)的数值表示。通过嵌入,可以将信息转换为向量形式,以便计算机能够更好地理解和处理。
· 文本拆分器(Text Splitters):当需要处理较长的文本时,有必要将文本分割成多个块。文本拆分器是用于将长文本分割成更小片段的工具。
· 向量数据库(Vectorstores):向量数据库存储和索引来自自然语言处理模型的向量嵌入,用于理解文本字符串、句子和整个文档的含义和上下文,从而获得更准确和相关的搜索结果。请参阅可用的向量数据库。
代码示例如下:
应用实例langchain-chatglm-6B流程图如下:
evaluation:
Outline概要
· 示例生成:Example generation
· 手动评估(和调试):Manual evaluation (and debugging)
· LLM辅助评估:LLM-assisted evaluation
Example generation:
Manual evaluation (and debugging):
LLM-assisted evaluation:
开源项目:
最近开源的新作品,主要目标是想通过自然语言操作数据库替换传统企业管理后台web,有兴趣的同学欢迎加入开源,觉得不错的可以点个小⭐⭐,感谢大家~
项目地址如下:
https://github.com/sql-agi/DB-GPT
作者简介:
AI_皮皮虾、卷过大厂、贡献过开源、参与多次大模型比赛并🏆多次参加AIGC交流会(微软AIGC等)、一直走在AIGC最前沿!