一、 LangChain 的三大核心抽象
1. ChatModel(聊天模型)
- 核心作用:与大模型(如 GPT-4、Claude)交互的入口,负责处理输入并生成输出。
- 关键功能:
- 支持同步调用(
model.invoke
)和流式处理(model.stream
)。 - 兼容多种模型供应商(如 OpenAI、Anthropic),通过社区生态集成。
- 支持同步调用(
- 示例代码:
from langchain_openai import ChatOpenAI model = ChatOpenAI(model="gpt-4o-mini") result = model.invoke(messages)
2. PromptTemplate(提示词模板)
- 核心作用:结构化提示词,分离开发者预置内容与用户输入。
- 关键功能:
- 支持占位符(如
{text}
),动态替换用户输入。 - 提供预置模板库(如 ReAct、RAG),便于复用和优化。
- 支持占位符(如
- 示例代码:
from langchain_core.prompts import ChatPromptTemplate prompt_template = ChatPromptTemplate.from_messages([ ("system", "Translate the following from English into Chinese:"), ("user", "{text}") ])
3. OutputParser(输出解析器)
- 核心作用:解析模型输出,转换为标准化格式(如字符串、JSON)。
- 关键功能:
- 内置解析器:
StrOutputParser
(字符串)、JsonOutputParser
(JSON)。 - 自动生成格式指令(
parser.get_format_instructions()
),约束模型输出格式。
- 内置解析器:
- 示例代码:
from langchain_core.output_parsers import JsonOutputParser parser = JsonOutputParser(pydantic_object=Work) chain = prompt_template | model | parser
二、链式调用与 LCEL
- 链式组装:通过管道符
|
连接组件(如chain = prompt_template | model | parser
)。 - 执行顺序:声明顺序即处理顺序(先模板替换 → 模型调用 → 结果解析)。
- 优势:声明式代码,逻辑清晰,易于维护。
- LCEL(LangChain表达式语言):
chain = ( PromptTemplate.from_template("总结{text}") | model | OutputParser() )
三、流式处理与同步调用
1. 同步调用:
- 使用
model.invoke()
,等待完整结果返回。 - 适用于非实时场景(如批量处理)。
2. 流式处理:
- 使用
model.stream()
,逐块返回结果(SSE 技术)。 - 提升用户体验(逐 Token 输出),适用于聊天等实时场景。
- 示例代码:
stream = model.stream(messages) for response in stream: print(response.content, end="")
四、核心抽象的应用场景
- ChatModel:直接调用模型生成内容(如翻译、问答)。
- PromptTemplate:预置系统提示词(如角色设定、任务描述)。
- OutputParser:
- 标准化输出格式(如 JSON 解析)。
- 结合
pydantic
模型定义数据结构(如Work
类)。
五、开发建议与最佳实践
- 优先使用 ChatModel:覆盖大部分场景,替代旧版
LLM
接口。 - 复用社区模板:通过
hub.pull("hwchase17/react")
加载预置提示词。 - 灵活选择解析器:根据需求选择
StrOutputParser
、JsonOutputParser
等。
六、一句话总结
LangChain 的核心抽象 ChatModel、PromptTemplate、OutputParser 通过链式调用(LCEL)实现输入处理、模型交互与输出解析,支持同步与流式响应,是构建模块化、可维护 AI 应用的基石。