LangChain多任务应用开发
💡 学习目标¶
- 如何使用 LangChain:一套在大模型能力上封装的工具框架
- 如何用几行代码实现一个复杂的 AI 应用
- 面向大模型的流程开发的过程抽象
- LangChain 也是一套面向大模型的开发框架(SDK)
- LangChain 是 AGI 时代软件工程的一个探索和原型
- 学习 LangChain 要关注接口变更
LangChain 的核心组件
- 模型 I/O 封装
- Chat Models:对语言模型接口的封装
- PromptTemple:提示词模板
- OutputParser:解析输出
- 数据连接封装(弱于 LlamaIndex)
- Document Loaders:各种格式文件的加载器
- Document Transformers:对文档的常用操作,如:split, filter, translate, extract metadata, etc
- Text Embedding Models:文本向量化表示,用于检索等操作
- Verctorstores & Retrievers:向量数据库与向量检索
- 架构封装
- Chain/LCEL:实现一个功能或者一系列顺序功能组合
- Agent:根据用户输入,自动规划执行步骤,自动选择每步需要的工具,最终完成用户指定的功能
- Tools:调用外部功能的函数,例如:调 google 搜索、文件 I/O、Linux Shell 等等
- LangGraph:工作流开发框架
- LangSmith:过程监控与调试框架

文档(以 Python 版为例)
- 功能模块:https://python.langchain.com/docs/tutorials
- API 文档:https://python.langchain.com/api_reference/
- 三方组件集成:https://python.langchain.com/docs/integrations/providers/
- 更多 HowTo:https://python.langchain.com/docs/how_to/
LangChain 是开源项目
项目地址:https://github.com/langchain-ai
1. 模型 I/O 封装
把不同的模型,统一封装成一个接口,方便更换模型而不用重构代码。
1.1 模型 API: ChatModel
1.1.1 OpenAI 模型封装
1.1.2 多轮对话 Session 封装
1.1.3 DeepSeek 模型封装
1.1.4 流式输出
1.1.5 通义千问模型封装
1.1.6 Ollama模型封装
1.2 模型的输入与输出

1.2.1 Prompt 模板封装
- PromptTemplate 可以在模板中自定义变量
- ChatPromptTemplate 用模板表示的对话上下文
- MessagesPlaceholder 把多轮对话变成模板
1.2.2 从文件加载 Prompt 模板
1.3 结构化输出
1.3.1 直接输出 Pydantic 对象
1.3.2 输出指定格式的 JSON
1.3.3 使用 OutputParser
OutputParser 可以按指定格式解析模型的输出
1.4 Function Calling
1.5 小结
- LangChain 统一封装了各种模型的调用接口,包括补全型和对话型两种
- LangChain 提供了 PromptTemplate 类,可以自定义带变量的模板
- LangChain 提供了一些列输出解析器,用于将大模型的输出解析成结构化对象
- LangChain 提供了 Function Calling 的封装
- 上述模型属于 LangChain 中较为实用的部分
2. 数据连接封装

2.1 文档加载器:Document Loaders
2.2 文档处理器
2.2.1 TextSplitter
2.3、向量数据库与向量检索
2.4 小结
- 文档处理部分,建议在实际应用中详细测试后使用
- 与向量数据库的链接部分本质是接口封装,向量数据库需要自己选型
3. Chain 和 LangChain Expression Language (LCEL)
LangChain Expression Language(LCEL)是一种声明式语言,可轻松组合不同的调用顺序构成 Chain。LCEL 自创立之初就被设计为能够支持将原型投入生产环境,无需代码更改,从最简单的“提示+LLM”链到最复杂的链(已有用户成功在生产环境中运行包含数百个步骤的 LCEL Chain)。
LCEL 的一些亮点包括:
-
流支持:使用 LCEL 构建 Chain 时,你可以获得最佳的首个令牌时间(即从输出开始到首批输出生成的时间)。对于某些 Chain,这意味着可以直接从 LLM 流式传输令牌到流输出解析器,从而以与 LLM 提供商输出原始令牌相同的速率获得解析后的、增量的输出。
-
异步支持:任何使用 LCEL 构建的链条都可以通过同步 API(例如,在 Jupyter 笔记本中进行原型设计时)和异步 API(例如,在 LangServe 服务器中)调用。这使得相同的代码可用于原型设计和生产环境,具有出色的性能,并能够在同一服务器中处理多个并发请求。
-
优化的并行执行:当你的 LCEL 链条有可以并行执行的步骤时(例如,从多个检索器中获取文档),我们会自动执行,无论是在同步还是异步接口中,以实现最小的延迟。
-
重试和回退:为 LCEL 链的任何部分配置重试和回退。这是使链在规模上更可靠的绝佳方式。目前我们正在添加重试/回退的流媒体支持,因此你可以在不增加任何延迟成本的情况下获得增加的可靠性。
-
访问中间结果:对于更复杂的链条,访问在最终输出产生之前的中间步骤的结果通常非常有用。这可以用于让最终用户知道正在发生一些事情,甚至仅用于调试链条。你可以流式传输中间结果,并且在每个 LangServe 服务器上都可用。
-
输入和输出模式:输入和输出模式为每个 LCEL 链提供了从链的结构推断出的 Pydantic 和 JSONSchema 模式。这可以用于输入和输出的验证,是 LangServe 的一个组成部分。
-
无缝 LangSmith 跟踪集成:随着链条变得越来越复杂,理解每一步发生了什么变得越来越重要。通过 LCEL,所有步骤都自动记录到 LangSmith,以实现最大的可观察性和可调试性。
-
无缝 LangServe 部署集成:任何使用 LCEL 创建的链都可以轻松地使用 LangServe 进行部署。
原文:https://python.langchain.com/docs/expression_language/
3.1 Pipeline 式调用 PromptTemplate, LLM 和 OutputParser
3.2 用 LCEL 实现 RAG
3.3 用 LCEL 实现模型切换(工厂模式)
3.4 通过 LCEL,还可以实现
- 配置运行时变量:https://python.langchain.com/docs/how_to/configure/
- 故障回退:https://python.langchain.com/docs/how_to/fallbacks/
- 并行调用:https://python.langchain.com/docs/how_to/parallel/
- 逻辑分支:https://python.langchain.com/docs/how_to/routing/
- 动态创建 Chain: https://python.langchain.com/docs/how_to/dynamic_chain/
更多例子:https://python.langchain.com/docs/how_to/lcel_cheatsheet/
4. LangChain 与 LlamaIndex 的错位竞争
- LangChain 侧重与 LLM 本身交互的封装
- Prompt、LLM、Message、OutputParser 等工具丰富
- 在数据处理和 RAG 方面提供的工具相对粗糙
- 主打 LCEL 流程封装
- 配套 Agent、LangGraph 等智能体与工作流工具
- 另有 LangServe 部署工具和 LangSmith 监控调试工具
- LlamaIndex 侧重与数据交互的封装
- 数据加载、切割、索引、检索、排序等相关工具丰富
- Prompt、LLM 等底层封装相对单薄
- 配套实现 RAG 相关工具
- 同样配套智能体与工作流工具
- 提供 LlamaDeploy 部署工具,通过与三方合作提供过程监控调试工具
5. 总结
- LangChain 随着版本迭代可用性有明显提升
- 使用 LangChain 要注意维护自己的 Prompt,尽量 Prompt 与代码逻辑解依赖
- 它的内置基础工具,建议充分测试效果后再决定是否使用
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)