LangChain 1 基础概念
- 定位: 开源 Python AI 应用开发框架。
- 核心: 基于大型语言模型,提供模块和工具,简化与 LLM 的集成。
- 支持模型: OpenAI 的 GPT 系列、Claude 3.5、千问模型等主流大语言模型。
- 能力: 支持文本生成、问答、翻译、对话等任务。
- 解决问题: 降低 AI 应用开发的门槛,使开发者能轻松构建创意 AI 应用。
1. LangChain 特性总结
-
LLM 和提示(Prompt)
- 提供统一的 API 抽象,兼容各种 LLM(如 OpenAI, Anthropic 等),统一访问方式。。
- 内建 Prompt 模板管理机制,简化提示编写流程。
-
Chains (链式调用)
- 复杂任务可拆分为多步模块,链式串联。
- 场景如:上下文问答、自动SQL生成、流水线式处理。
- 支持将多个调用(LLM、工具等)连接起来,形成工作流,按顺序执行。
-
LCEL(LangChain Expression Language)
- LangChain 新版本的核心特性。
- 用来灵活地自定义任务处理流程,解决工作流编排问题。
- 写法类似声明式语言,通过表达式定义链(Chain)。
-
RAG(数据增强生成)
- LLM 本身不知道“新知识”,RAG 模式通过外部信息检索提升回答质量(推理)。
- 一种内容增强技术,用于解决 LLM 知识的静态性问题(数据截止日期)。
- 关键步骤:
- 先“检索”外部数据(如 PDF/数据库)
- 再“生成”内容(LLM)
- 全称:Retrieval-Augmented Generation
- 与微调对比: RAG 用于内容增强;微调用于改变模型回答方式、语气(如客服机器人)。
-
Agents(智能代理)
- LLM 主动调用工具/API 的高级玩法。
- 根据用户需求,自动调用外部系统或设备来完成任务。
- 示例: 用户只需说“明天请假一天”,Agent 即可自动调用内部 OA 系统完成请假流程。
- LangChain 在 Agent 开发方面提供了丰富的组件和库(如 LangGraph)。
-
Model Memory (模型记忆):
- 允许 LLM 记住之前的对话内容。
- 提供存储功能:
- 内存存储: 临时记忆,程序重启后丢失。
- 持久化存储: 需要数据库(如 MongoDB, Redis)来保存对话历史。
2. LangChain 框架结构
-
LangChain 库:Python 和 JavaScript 的核心库,提供接口和集成多种组件:
langchain-core:基础抽象和 LangChain 表达语言。langchain-community:第三方集成,主要包括 langchain 集成的第三方组件。langchain:主要包括链(chain)、代理(agent)和检索策略。
-
Templates(模板):LangChain 官方提供的 AI 任务模板库,帮助开发者快速启动和搭建项目。
-
LangServe:基于 FastAPI,可以将 LangChain 定义的链(Chain)发布为 RESTful API 服务,方便外部系统调用。
-
LangSmith:云端开发平台,为 LangChain 应用提供可观测性(Observability),支持链路追踪、监控和调试,助力开发和运维。
-
LangChain
- Chains: 链式调用。将模型、提示、工具等组件串成多步任务流。
- Agents: 智能体框架,能动态选择工具和决策路径完成复杂任务。
- Retrieval: 文本检索和文档相关功能(如向量数据库查询),现在更常单独拆分为“Retrieval组件”。
-
LangChain-Community:
- Model I/O:
- LLMs: 主流大模型的 API 封装(如 OpenAI、Anthropic、Hugging Face 等)。
- Chat Models: 专为多轮对话设计,支持消息结构和函数调用。
- Prompt Templates: 管理和格式化提示词模板。
- Output Parsers: 格式化 LLM 输出(如 Markdown 转 J SON)。
- Example Selectors: 在调用时提供示例。
- Retrieval:
- Document Loaders: 加载各种格式的文档(PDF, TXT, Markdown)。
- Text Splitters: 分割长文本。
- Embeddings: 将文本转换为向量(调用 LLM 能力实现)。
- Vector Stores: 存储和检索向量(支持 Chroma, FAISS 等)。
- Agent Tooling:
- Tools: Agent 可调用的外部工具(API)。
- Agent Executors: 协调 Agent 逻辑。
- Model I/O:
-
LangChain-Core (LangChain Expression Language, LCEL):
- 作用:提供一套表达式语言,让你用声明式方式组合各种方法、接口和模块。
- 核心能力:
- 方法执行:轻松定义任务/方法的执行流程。
- 接口调用:统一管理不同模型或服务的 API 调用。
- 并行 (Parallelization):支持任务并发处理,提升效率。
- 批量处理 (Batching/Fallbacks):支持批量任务、出错时自动降级回退。
- 流式 (Streaming):支持流式数据处理,比如流式输出LLM生成内容。
- 异步调用 (Async):支持异步执行,提升响应速度。
- 组合 (Composition):任意拼装/嵌套不同组件,实现复杂流程。
- 追踪 (Tracing):内置调用链路追踪,方便调试和监控。
-
LangChain 的常见应用场景
- 对话机器人: 构建智能对话助手、客服机器人、聊天机器人。
- 知识库管理: 实现 RAG 场景,结合知识图谱进行开放域问答。
- 智能写作: 用于写文章、创意写作、文本摘要等。
3. Model I/O 流程示例
- Format(格式化)
- 使用 Prompts(提示词工具),把变量(如
x="foo", y="bar")填充到模板(如“Does {x} like {y}, and why?”)中,生成具体的问题:“Does foo like bar, and why?”
- 使用 Prompts(提示词工具),把变量(如
- Predict(预测)
- 把格式化后的提示词输入到 模型:
- LLM(基础模型):接收文本输入,返回文本输出。
- Chat Models(聊天模型):专为多轮消息交互设计,支持输入多条消息(用户、AI、系统、函数等),输出聊天消息。
- 把格式化后的提示词输入到 模型:
- Parse(解析)
- 利用 Output Parsers(输出解析器),将 LLM 返回的原始输出(如自然语言、Markdown)解析为结构化数据(如 JSON),便于后续处理或调用。

- 利用 Output Parsers(输出解析器),将 LLM 返回的原始输出(如自然语言、Markdown)解析为结构化数据(如 JSON),便于后续处理或调用。
4. LangChain 实战入门(以 OpenAI 为例)
-
环境准备: Python 环境。
-
安装:
1
2
3pip install langchain
pip install langchain-openai
pip install langchain-community -
导入库:
ChatPromptTemplate(用于聊天场景的提示词模板)。ChatOpenAI(用于与 OpenAI 的 Chat 模型交互)。StrOutputParser(用于将输出解析为字符串,或自定义解析器如 JSON)。
-
配置环境变量: 设置
OPENAI_API_KEY。 -
实例化 LLM:
llm = ChatOpenAI(model="gpt-3.5-turbo")(或其他模型)。 -
定义提示词模板: 使用
ChatPromptTemplate.from_messages(),例如:System + Message(定义角色,如“世界级技术专家”)Human + Message(用户输入,可带参数)。
-
构建 Chain: 使用
|将提示词模板和 LLM 连接起来:chain = prompt | llm。 -
执行 Chain: 调用
chain.invoke({"input": "你的问题"})。 -
格式化输出: 在 Chain 中加入 Output Parser,如
chain = prompt | llm | StrOutputParser,先调用chain的同时把用户写的input回填到prompt的input中然后调用llm,最后调用StrOutputParser格式化输出(只有纯文本)。
1 | |
LangChain 输出解析器(Output Parser)用法
LLM 的原始输出通常是一条消息对象。为了方便后续处理,可以用输出解析器将其转为字符串、JSON 或其它结构化数据。
- 代码示例:
1
2
3
4
5
6
7
8
9
10
11
12
13from langchain_core.output_parsers import StrOutputParser
# 创建一个字符串输出解析器
output_parser = StrOutputParser()
# 将输出解析器串联进链(Prompt | LLM | OutputParser)
chain = prompt | llm | output_parser
# 调用链并传入输入,得到字符串输出
result = chain.invoke({"input": "帮我写一篇 langchain 的技术文章,100 个字"})
print(result)
# 输出格式:‘xxxxxx’
核心说明:
StrOutputParser()负责把 LLM 输出的消息对象转为纯字符串,适合直接打印或写入文件。- 你可以在链式工作流中,随时追加不同类型的 Output Parser,得到自己想要的数据格式。
- 实际开发中,如果需要结构化数据(如 JSON),可用
JsonOutputParser()或自定义解析器。
参考资料
“觉得不错的话,给点打赏吧 ୧(๑•̀⌄•́๑)૭”
微信支付
支付宝支付