LangChain 简介 #
什么是 LLM 应用开发? #
在了解 LangChain 之前,我们需要先理解"大语言模型应用开发"的概念。随着 GPT、Claude 等大语言模型的兴起,开发者需要构建能够利用这些模型能力的应用程序。
text
┌─────────────────────────────────────────────────────────────┐
│ LLM 应用开发挑战 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入: │
│ "帮我分析这份销售报告并生成摘要" │
│ │
│ 处理过程需要: │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ │ │
│ │ 1. 读取文档 ───> 2. 文本分割 ───> 3. 向量化存储 │ │
│ │ │ │
│ │ 4. 相似检索 ───> 5. 构建提示 ───> 6. 调用 LLM │ │
│ │ │ │
│ │ 7. 解析输出 ───> 8. 记忆管理 ───> 9. 返回结果 │ │
│ │ │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ 问题: │
│ ❌ 每个环节都需要单独实现 │
│ ❌ 不同 LLM 提供商 API 各不相同 │
│ ❌ 记忆管理复杂 │
│ ❌ 提示工程需要大量经验 │
│ │
└─────────────────────────────────────────────────────────────┘
传统开发 vs LangChain #
text
┌─────────────────────────────────────────────────────────────┐
│ 传统 LLM 开发 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 问题: │
│ ❌ 需要学习不同 LLM 的 API │
│ ❌ 手动管理对话历史 │
│ ❌ 自己实现 RAG 流程 │
│ ❌ 缺乏标准化组件 │
│ ❌ 难以切换模型提供商 │
│ │
│ LangChain 解决方案: │
│ ✅ 统一的模型接口 │
│ ✅ 内置记忆管理 │
│ ✅ 开箱即用的 RAG 组件 │
│ ✅ 模块化可组合 │
│ ✅ 轻松切换提供商 │
│ │
└─────────────────────────────────────────────────────────────┘
什么是 LangChain? #
LangChain 是一个开源框架,专门用于开发由大语言模型(LLM)驱动的应用程序。它提供了一套完整的工具和抽象,帮助开发者快速构建复杂的 AI 应用,如聊天机器人、文档问答系统、智能代理等。
核心定位 #
text
┌─────────────────────────────────────────────────────────────┐
│ LangChain │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Models │ │ Prompts │ │ Chains │ │
│ │ 模型层 │ │ 提示层 │ │ 链式调用 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ Memory │ │ Agents │ │ Retrieval │ │
│ │ 记忆管理 │ │ 智能代理 │ │ 检索增强 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
└─────────────────────────────────────────────────────────────┘
LangChain 解决的问题 #
text
┌─────────────────────────────────────────────────────────────┐
│ LangChain 核心价值 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 1. 统一接口 │
│ 一套代码,支持 OpenAI、Claude、Gemini 等多种模型 │
│ │
│ 2. 组件化开发 │
│ 模块化设计,像搭积木一样构建应用 │
│ │
│ 3. 链式组合 │
│ 将多个操作串联成复杂工作流 │
│ │
│ 4. 智能代理 │
│ 让 LLM 自主决策调用工具和执行任务 │
│ │
│ 5. 检索增强 │
│ 轻松构建 RAG 应用,让 LLM 访问外部知识 │
│ │
└─────────────────────────────────────────────────────────────┘
LangChain 的历史 #
发展历程 #
text
2022年10月 ─── LangChain 项目启动
│
│ Harrison Chase 创建
│ 开源发布
│ 专注于 LLM 应用开发
│
2023年1月 ─── 快速增长
│
│ GitHub Stars 破万
│ 社区活跃
│ Python 版本成熟
│
2023年3月 ─── LangChain 公司成立
│
│ 获得融资
│ 团队扩张
│ JS 版本发布
│
2023年7月 ─── LangSmith 发布
│
│ 调试和监控平台
│ 企业级支持
│
2024年1月 ─── LangGraph 发布
│
│ 状态图工作流
│ 复杂 Agent 构建
│
2024年 ─── LangChain v0.1/v0.2
│
│ 架构重构
│ 性能优化
│ 更好的类型支持
│
至今 ─── 行业标准
│
│ 90K+ GitHub Stars
│ 最流行的 LLM 框架
│ 丰富的生态系统
里程碑版本 #
| 版本 | 时间 | 重要特性 |
|---|---|---|
| 0.0.1 | 2022.10 | 首次发布,基础链和模型支持 |
| 0.0.100 | 2023.03 | Agent 框架、工具系统 |
| 0.0.200 | 2023.06 | RAG 组件、向量存储集成 |
| 0.1.0 | 2024.01 | 架构重构、LCEL 引入 |
| 0.2.0 | 2024.05 | 更好的异步支持、性能优化 |
| 0.3.0 | 2024.10 | LangGraph 深度集成 |
LangChain 的核心特点 #
1. 统一的模型接口 #
text
┌─────────────────────────────────────────────────────────────┐
│ 统一模型接口 │
├─────────────────────────────────────────────────────────────┤
│ │
│ from langchain_openai import ChatOpenAI │
│ from langchain_anthropic import ChatAnthropic │
│ from langchain_google_genai import ChatGoogleGenerativeAI │
│ │
│ 统一接口: │
│ model.invoke("Hello") │
│ model.stream("Hello") │
│ model.batch(["Hello", "Hi"]) │
│ │
│ 轻松切换: │
│ model = ChatOpenAI() # 切换到 OpenAI │
│ model = ChatAnthropic() # 切换到 Claude │
│ model = ChatGoogleGenerativeAI() # 切换到 Gemini │
│ │
└─────────────────────────────────────────────────────────────┘
2. 模块化组件 #
text
┌─────────────────────────────────────────────────────────────┐
│ 模块化设计 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ LangChain 组件 │ │
│ │ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Models │ │ Prompts │ │ Index │ │ Chains │ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │
│ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │
│ │ │ Memory │ │ Agents │ │ Tools │ │Callbacks│ │ │
│ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │
│ │ │ │
│ └──────────────────────────────────────────────────────┘ │
│ │
│ 每个组件独立,可自由组合 │
│ │
└─────────────────────────────────────────────────────────────┘
3. LangChain Expression Language (LCEL) #
text
┌─────────────────────────────────────────────────────────────┐
│ LCEL 表达式语言 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 声明式组合: │
│ │
│ chain = prompt | model | output_parser │
│ │
│ 等价于: │
│ │
│ chain = ( │
│ {"question": RunnablePassthrough()} │
│ | prompt │
│ | model │
│ | output_parser │
│ ) │
│ │
│ 特性: │
│ ✅ 支持流式输出 │
│ ✅ 支持异步执行 │
│ ✅ 支持并行处理 │
│ ✅ 自动重试 │
│ │
└─────────────────────────────────────────────────────────────┘
4. 丰富的集成 #
text
┌─────────────────────────────────────────────────────────────┐
│ 集成生态 │
├─────────────────────────────────────────────────────────────┤
│ │
│ LLM 提供商: │
│ - OpenAI (GPT-4, GPT-3.5) │
│ - Anthropic (Claude) │
│ - Google (Gemini) │
│ - AWS (Bedrock) │
│ - Azure OpenAI │
│ - 本地模型 (Ollama, LM Studio) │
│ │
│ 向量存储: │
│ - Pinecone, Weaviate, Chroma │
│ - FAISS, Milvus, Qdrant │
│ │
│ 工具集成: │
│ - 搜索引擎、数据库、API │
│ - 文件系统、代码执行 │
│ │
└─────────────────────────────────────────────────────────────┘
LangChain 的核心模块 #
1. Models(模型) #
text
┌─────────────────────────────────────────────────────────────┐
│ Models 模块 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Chat Models(聊天模型): │
│ - 多轮对话 │
│ - 支持系统提示 │
│ - 支持多模态 │
│ │
│ LLMs(文本补全模型): │
│ - 单轮文本生成 │
│ - 传统补全任务 │
│ │
│ Embeddings(嵌入模型): │
│ - 文本向量化 │
│ - 语义相似度计算 │
│ │
└─────────────────────────────────────────────────────────────┘
2. Prompts(提示) #
text
┌─────────────────────────────────────────────────────────────┐
│ Prompts 模块 │
├─────────────────────────────────────────────────────────────┤
│ │
│ Prompt Templates: │
│ - 动态生成提示 │
│ - 变量插值 │
│ │
│ Few-shot Examples: │
│ - 示例学习 │
│ - 提高输出质量 │
│ │
│ Output Parsers: │
│ - 结构化输出 │
│ - 格式化解析 │
│ │
└─────────────────────────────────────────────────────────────┘
3. Chains(链) #
text
┌─────────────────────────────────────────────────────────────┐
│ Chains 模块 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 将多个组件串联执行: │
│ │
│ 输入 → Prompt → Model → Parser → 输出 │
│ │
│ 常用链: │
│ - LLMChain:基础链 │
│ - SequentialChain:顺序执行 │
│ - RouterChain:条件路由 │
│ - TransformChain:数据转换 │
│ │
└─────────────────────────────────────────────────────────────┘
4. Memory(记忆) #
text
┌─────────────────────────────────────────────────────────────┐
│ Memory 模块 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 对话记忆: │
│ - ConversationBufferMemory │
│ - ConversationBufferWindowMemory │
│ - ConversationSummaryMemory │
│ │
│ 持久化: │
│ - Redis 存储 │
│ - 文件存储 │
│ - 数据库存储 │
│ │
└─────────────────────────────────────────────────────────────┘
5. Agents(代理) #
text
┌─────────────────────────────────────────────────────────────┐
│ Agents 模块 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 让 LLM 自主决策: │
│ │
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
│ │ 用户 │ ───>│ Agent │ ───>│ 工具 │ │
│ └─────────┘ └────┬────┘ └─────────┘ │
│ │ │
│ ▼ │
│ ┌─────────┐ │
│ │ LLM │ │
│ │ 决策 │ │
│ └─────────┘ │
│ │
│ Agent 类型: │
│ - ReAct Agent:推理+行动 │
│ - OpenAI Functions Agent:函数调用 │
│ - Structured Chat Agent:结构化对话 │
│ │
└─────────────────────────────────────────────────────────────┘
6. Retrieval(检索) #
text
┌─────────────────────────────────────────────────────────────┐
│ Retrieval 模块 │
├─────────────────────────────────────────────────────────────┤
│ │
│ RAG(检索增强生成)流程: │
│ │
│ 1. Document Loaders:加载文档 │
│ 2. Text Splitters:文本分割 │
│ 3. Embeddings:向量化 │
│ 4. Vector Stores:存储向量 │
│ 5. Retrievers:检索相关内容 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 文档 │ ──>│ 分割 │ ──>│ 向量化 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │ │
│ ▼ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ LLM │ <──│ 检索 │ <──│ 向量存储 │ │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
LangChain 的应用场景 #
1. 智能问答系统 #
text
┌─────────────────────────────────────────────────────────────┐
│ 智能问答系统 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 用户提问: │
│ "公司的年假政策是什么?" │
│ │
│ 系统处理: │
│ 1. 检索员工手册相关内容 │
│ 2. 找到年假政策章节 │
│ 3. 结合问题生成答案 │
│ │
│ AI 回答: │
│ "根据公司员工手册,年假政策如下: │
│ - 入职满一年后享有 5 天年假 │
│ - 工龄每增加一年,年假增加 1 天 │
│ - 年假需提前 3 天申请..." │
│ │
└─────────────────────────────────────────────────────────────┘
2. 聊天机器人 #
text
应用场景:
- 客户服务
- 销售助手
- 技术支持
优势:
✅ 多轮对话记忆
✅ 上下文理解
✅ 工具调用能力
✅ 知识库检索
3. 文档分析 #
text
┌─────────────────────────────────────────────────────────────┐
│ 文档分析 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 输入:PDF 合同文档 │
│ │
│ AI 处理: │
│ 1. 解析文档结构 │
│ 2. 提取关键条款 │
│ 3. 识别风险点 │
│ 4. 生成分析报告 │
│ │
│ 输出: │
│ "合同分析报告: │
│ 1. 合同类型:软件开发服务合同 │
│ 2. 关键条款:... │
│ 3. 风险提示:... │
│ 4. 建议修改:..." │
│ │
└─────────────────────────────────────────────────────────────┘
4. 代码助手 #
text
应用场景:
- 代码生成
- 代码解释
- Bug 修复
- 代码审查
优势:
✅ 理解代码上下文
✅ 支持多种语言
✅ 可执行代码验证
5. 自动化工作流 #
text
┌─────────────────────────────────────────────────────────────┐
│ 自动化工作流 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 任务:处理客户邮件 │
│ │
│ Agent 执行: │
│ 1. 读取邮件内容 │
│ 2. 分析邮件意图 │
│ 3. 检索相关产品信息 │
│ 4. 生成回复草稿 │
│ 5. 发送或等待审核 │
│ │
│ 涉及工具: │
│ - 邮件 API │
│ - 产品数据库 │
│ - CRM 系统 │
│ │
└─────────────────────────────────────────────────────────────┘
LangChain vs 其他框架 #
对比分析 #
| 特性 | LangChain | LlamaIndex | Haystack |
|---|---|---|---|
| 定位 | 通用 LLM 框架 | 数据框架 | NLP 框架 |
| 学习曲线 | 中等 | 较低 | 中等 |
| Agent 支持 | ✅ 强大 | ⚠️ 基础 | ✅ 支持 |
| RAG 支持 | ✅ 完善 | ✅ 专注 | ✅ 完善 |
| 集成数量 | ✅ 最多 | 多 | 多 |
| 社区活跃度 | ✅ 最高 | 高 | 中等 |
| 生产就绪 | ✅ LangSmith | ⚠️ 发展中 | ✅ 支持 |
选择建议 #
text
┌─────────────────────────────────────────────────────────────┐
│ 选择指南 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 选择 LangChain 的场景: │
│ ✅ 需要构建复杂的 Agent 应用 │
│ ✅ 需要灵活组合多种组件 │
│ ✅ 需要最大的生态系统支持 │
│ ✅ 需要企业级监控(LangSmith) │
│ │
│ 选择 LlamaIndex 的场景: │
│ ✅ 专注于 RAG 应用 │
│ ✅ 需要处理大量文档 │
│ ✅ 简单易用 │
│ │
│ 选择 Haystack 的场景: │
│ ✅ NLP 管道应用 │
│ ✅ 搜索系统 │
│ ✅ 已有 Haystack 项目 │
│ │
└─────────────────────────────────────────────────────────────┘
LangChain 的优势与局限 #
优势 #
text
✅ 生态丰富
- 100+ 集成
- 活跃的社区
- 持续更新
✅ 抽象合理
- 模块化设计
- 易于扩展
- 统一接口
✅ 生产就绪
- LangSmith 监控
- LangServe 部署
- 企业支持
✅ 多语言支持
- Python(主要)
- JavaScript/TypeScript
局限性 #
text
⚠️ 学习曲线
- 概念较多
- 版本更新快
- 文档有时滞后
⚠️ 抽象开销
- 简单任务可能过度抽象
- 调试可能复杂
⚠️ 性能考量
- 额外的抽象层
- 需要优化配置
⚠️ 版本变化
- API 变化较快
- 需要关注更新
学习路径 #
text
入门阶段
├── LangChain 简介(本文)
├── 快速开始
└── 核心概念
基础阶段
├── 模型(Models)
├── 提示(Prompts)
├── 链(Chains)
└── 记忆(Memory)
进阶阶段
├── 检索(Retrieval)
├── 代理(Agents)
├── 工具(Tools)
└── RAG 应用
高级阶段
├── 流式处理
├── 回调系统
├── LangGraph
└── 生产部署
下一步 #
现在你已经了解了 LangChain 的基本概念,接下来学习 快速开始,开始你的 LLM 应用开发之旅!
最后更新:2026-03-30