LangChain
LangChain
一、LangChain 介绍
1.1 什么是 LangChain
LangChain 是一个用于开发由大型语言模型(llm)支持的应用程序的框架。能够简化了 LLM 应用程序生命周期的每个阶段。
1.2 为什么使用 LangChain
- 统一接口:LangChain 提供了与多种 LLM 交互的统一方式,这样开发者就不必为了适应不同模型的 API 而重写代码。
- 简化集成:它封装了模型调用的复杂性,使得开发者可以更快速地将语言模型集成到他们的项目中。
- 高级抽象:LangChain 提供了高级抽象,如链(Chains)、记忆(Memory)、代理(Agents)等,这些抽象有助于构建更复杂的应用逻辑。
- 模块化设计:该框架的模块化结构允许开发者组合不同的组件,以创建定制化的应用。
- 社区与资源:由于 LangChain 是一个流行的框架,因此拥有活跃的社区和丰富的资源,包括文档、示例和教程。
1.3 LangChain 和 LlamaIndex 对比
LangChain 适用于需要与大型语言模型进行复杂交互的应用,如智能助手、内容生成等。
- Prompt、LLM、Memory、OutputParser 等工具丰富
- 主打 LCEL 流程封装
- 配套 Agent、LangGraph 等智能体与工作流工具
- 另有 LangServe 部署工具和 LangSmith 监控调试工具
- 在数据处理和 RAG 方面提供的工具相对粗糙
LlamaIndex 适用于需要高效索引和快速搜索的大规模文本数据处理应用,如搜索引擎、知识管理系统等。
- 数据加载、切割、索引、检索、排序等相关工具丰富
- 配套实现 RAG 相关工具
- Prompt、LLM 等底层封装相对单薄
- 有 Agent 相关工具,不突出
二、如何使用 LangChain
学习如何使用语言模型、如何解析它们的输出、如何创建提示模板、如何使用 LCEL 将它们链接起来、如何在使用 LangSmith 创建的链中获得良好的可观察性,以及如何使用 LangServe 部署它们。
——来源:Build a Simple LLM Application with LCEL | 🦜️🔗 LangChain
2.1 一个简单的 LLM 应用程序
安装 LangChain
注册 LangSmith 并配置环境变量
- 注册后点击左下角“设置”图标
- 点击 API Keys--Create API Key
- 选择 Personal Access Token
- 复制并保存好 API Key
- 配置在环境变量中
- 点击"Projects"--项目列表,即可看到 llm 运行信息
使用语言模型
OutputParsers 定义输出解析器
Prompt Templates 定义提示词模板
LCEL 链接组件
LangServe 部署
每个 LangServe 服务都有一个简单的内置 UI:http://localhost:8000/chain/playground/
2.2 聊天机器人
设计和实现一个基于 llm 的聊天机器人,并通过 Message History 和 trim_messages 管理会话历史,并保存到数据库中。
定义 Prompt templates
创建大语言模型 llm
定义消息裁剪器 trimmer
定义输出解析器 OutputParsers
定义 Chain
定义读取会话历史的函数,返回 Message History 对象
存储和加载消息:消息输入消息输出、字典输入消息输出、消息输入字典输出
消息历史存储在数据库中,以 sqlite 为例:SQLite | 🦜️🔗 LangChain
封装 Messages History 对象 RunnableWithMessageHistory
流式输出
2.3 RAG
A typical RAG application has two main components:
- Indexing: a pipeline for ingesting data from a source and indexing it. This usually happens offline.
- Retrieval and generation: the actual RAG chain, which takes the user query at run time and retrieves the relevant data from the index, then passes that to the model.
——来源:Build a Retrieval Augmented Generation (RAG) App | 🦜️🔗 LangChain
- 加载文档
- 分割
- 索引
- 检索和生成