Langchain入门学习(1)
1. 什么是Langchain?
LLMs最近非常火,例如OpenAI的ChatGPT、华为的盘古语言大模型、百度的文心一言、阿里的通义千问等。 实际生产生活中,可以基于LLMs构建个人助手、聊天机器人等应用。
Langchain是一种为简化使用LLM创建应用程序的框架,它本身并不实现LLMs,而是为各种LLMs实现通用的接口,把LLMs相关的组件“链接”在一起能力,以便于简化LLMs应用的开发难度。
两个比较重要的价值主张:
(1)组件化:Langchain 为处理语言模型所需的组件提供模块化的抽象,并为这些抽象提供了实现的集合,以方便使用。
(2)链化:链可以被看作是将不同的组件以特定方式进行的组装,以更好地完成某些特别场景的用例。你也可以认为链是一种更高阶的接口,用户通过使用这个接口可以更轻松的使用LLMs的能力,也可以针对不同场景进行定制。
2. Langchain的6大模块
Models I/O:模型I/O,语言模型的接口
Retrieval:数据链接
Chains:链,一系列组件的调用
Agents:代理,决定模型采取哪些行动
Memory:记忆,用来保存和模型交互时的上下文状态
Callbacks:记录和流式传输任何链的中间步骤
2.1 模型I/O (Models I/O)
语言模型应用的核心元素:模型的输入和输出。Langchain 提供了与语言模型进行接口交互的基本组件。
(1)提示 (prompt)
提示(prompt) 指的是输入模型的内容。可以是文本字符,也可以是文件、图片甚至是视频,Langchain目前只支持字符形式的提示。
提示一般不是硬编码的形式写在代码里,而是由模板和用户输入来生成,Langchain提供多个类和方法来构建提示。
- 提示模板 (Prompt templates)
提示模板是一种生成提示的方式,包含一个带有可替换内容的模板,最简单的使用场景,比如“You are a naming consultant for new companies. What is a good name for a company that makes {product}?”。
这里面分为:
提示模板 (Prompt template):可以使用PromptTemplate 去创建一个string型的提示模板
聊天提示模板 (Chat prompt template):接收聊天消息作为输入,再次强调聊天消息和普通字符是不一样的,聊天提示模板的作用就是为聊天模型生成提示
- 示例选择器 (example_selectors)
示例选择器是一个高级版的数据筛选器,比如,在提示时,基于长度、最大边际相关性等动态选择包含的示例。
(2)语言模型 (Language models)
Langchain为第三方模型提供通用接口,目前支持三种:
- LLMs
大型语言模型( LLMs )以文本作为输入,返回文本字符串作为输出
- 聊天模型
聊天模型基于LLMs,不同的是它接收聊天消息作为输入,返回的也是聊天消息。
- 文本嵌入模型
文本嵌入模型,接收文本作为输入,返回的是浮点数列表(嵌入结果)。可用于文档检索、聚类和相似性比较等任务
(3)输出解析器 (Output Parsers)
输出解析器的作用是将模型输出的文本转换成结构化数据。(如果用户希望获得结构化的信息,则可以使用输出解析器。)
2.2 数据连接 (Data connection)
许多 LLM 应用程序需要用户指定数据,为了完成数据的操作,Langchain提供了加载、转换和查询数据的基础构件。
2.3 链 (Chains)
对于复杂的应用程序则需要将多个组件组合在一起,Langchain为这种“链式”应用程序提供了链接口。
例如,我们可以创建一个链:该链接受用户输入,使用提示模板对其进行格式化,然后将格式化的响应传递给LLM。
示例: llm_chain = LLMChain(llm=llm, prompt=PromptTemplate.from_template(prompt_template))
2.4 记忆 (Memory)
模型是无状态的,为了给每次交互提供上下文功能,Langchain提供了记忆组件,用来在对话过程中存储过去的交互信息。
2.5 代理 (Agents)
有些应用并不是一开始就确定调用哪些模型,而是依赖于用户输入,代理提供了一套工具,根据用户的输入来决定调用这些工具种的哪一个。其关键组件:
- 代理
围绕模型的包装器,接收用户输入,决定模型的行为。
- 工具
是代理调用的方法/函数。(Langchain 提供了一系列的工具供使用,当然也可以自己定义。)
- 工具集(工具包)
实现特定目标所需的工具集合,一般一个工具集合中会有3-5个工具以供代理调用。
- 代理执行器
调用代理并执行它选择的操作
2.6 CallBack
CallBack可以帮助连接到LLM应用程序的各个阶段,对日志记录、监视、流式处理等任务非常有用。
未完待续。
参考文献:
https://python.langchain.com/docs/get_started/introduction
- 点赞
- 收藏
- 关注作者
评论(0)