从零讲透 LangChain 流式响应:让链式调用不只是“能干”,还能“边干边回”
一、我第一次用 LangChain 流式的错觉
最开始我写的是这种代码:
result = chain.invoke({"question": user_input})
print(result)
看起来没问题,但在实际产品里,问题很大:
-
用户要等 好几秒
-
页面一片空白
-
最后“啪”一下全出来
用户体验只有两个字:
像接口,不像 AI
二、流式响应的本质是什么?
一句话版本:
流式响应 = 模型一边生成,你一边消费
在 LangChain 里,链式调用不是只能 invoke,而是天然支持:
|
方法 |
行为 |
|---|---|
|
|
一次性返回最终结果 |
|
|
逐个 token / chunk 返回 |
|
|
异步流式(生产推荐) |
⚠️ 很多人误以为:
“流式只是前端好看一点”
错。
在链式体系里,流式影响的是整个链的执行方式。
三、最基础的流式链(你一定要会的)
✅ 标准写法(同步)
chain = prompt | model | StrOutputParser()
for chunk in chain.stream({"question": user_input}):
print(chunk, end="", flush=True)
发生了什么?
Prompt → Model → Parser → 你
每一个 chunk:
-
已经是 解析后的字符串
-
不再是 AIMessage
-
不再需要
.content
📌 这是我第一次觉得:
LCEL + Stream 是真的配
四、我踩的第一个坑:Parser 不支持流式
❌ 错误示例(我当时真这么写过)
chain = prompt | model | PydanticOutputParser(...)
for chunk in chain.stream(...):
print(chunk)
结果直接报错 😅
原因很简单:
Pydantic / JSON 解析器必须“完整输出”才能解析
流式本质是“半成品”,它做不到。
五、正确的流式设计原则(非常重要)
我自己总结的一句话:
流式链 ≠ 结构化链
✅ 正确拆分方式
|
场景 |
链类型 |
|---|---|
|
聊天 / 解释 / 生成 |
✅ 流式 |
|
分类 / 抽取 / 判断 |
❌ 流式 |
|
最终业务决策 |
❌ 流式 |
推荐结构
# 流式:给用户看
chat_chain = prompt | model | StrOutputParser()
# 非流式:给系统用
struct_chain = prompt | model | PydanticOutputParser(...)
六、真实项目中我最常用的两种流式模式
✅ 模式 1:流式输出 + 非流式判断(90% 场景)
# 1️⃣ 先判断意图(非流式)
intent = intent_chain.invoke({"query": user_input})
# 2️⃣ 再流式回答
if intent.type == "chat":
for chunk in chat_chain.stream({"query": user_input}):
print(chunk, end="", flush=True)
📌 这是我现在的标准模板:
决策不流式,体验才流式
✅ 模式 2:中间变量 + 最后流式(Agent 雏形)
# 第一步:结构化抽取
info = extract_chain.invoke({"text": user_input})
# 第二步:流式解释
for chunk in explain_chain.stream(info.dict()):
print(chunk, end="", flush=True)
这一步,其实已经接近 Agent 的工作方式 了。
七、异步流式(生产环境必会)
FastAPI 场景基本都是这个:
async for chunk in chain.astream({"question": user_input}):
await websocket.send_text(chunk)
如果你现在还在用 stream()写后端服务:
建议直接升级 astream
八、我现在的流式设计原则
我自己总结的一条公式:
流式只负责“感知智能”,不负责“决策智能”
落地就是三条:
-
用户看到的内容 → 可以流式
-
业务逻辑依赖的数据 → 绝不流式
-
链式调用中,Parser 决定能不能用,Stream 决定能不能留人
九、一句话总结
Prompt 决定模型怎么想
Output Parser 决定能不能用
Chain 决定能不能上线
Stream 决定能不能留住用户
没有链式调用,LangChain 只是 Prompt 工具;
没有流式响应,AI 应用永远像后台接口。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)