【零基础入门 LLM 开发 · Day 12】:LangChain 流式输出——一行 for 循环的事

掌握LangChain中的流式技术:让你的LLM应用更加响应 通过掌握LangChain的流式处理能力,可以显著提升LLM应用的用户体验。更多的技术细节和示例可以参考LangChain的官方文档。 阅读详情

Day 12:LangChain 流式输出——一行 for 循环的事

回顾 Day 5 的痛

原生 SDK 的流式输出要:判 delta 是否为 None、判 delta.content 是否为 None、处理只在第一个 chunk 出现的 role、自己拼 full_reply……

LangChain 把这些脏活都封装了。

完整代码

import os
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

llm = ChatOpenAI(
    model=os.getenv("YUMC_MODEL_NAME"),
    api_key=os.getenv("YUMC_MODEL_API_KEY"),
    base_url=os.getenv("YUMC_MODEL_BASE_URL"),
    streaming=True,          # 声明用流式模式
)

print("----流式输出测试")

for chunk in llm.stream("请给我讲一个关于程序员的笑话,要简短一点。"):
    print(chunk.content, end="", flush=True)
print("\n----结束----")

没了。真的没了。

逐段拆解

① llm.stream(...)

LLM 对象自带 .stream() 方法,直接传字符串(或消息列表)就行。它是一个生成器,for 循环每轮拿到一个 chunk(一个 AIMessageChunk 对象)。

② chunk.content

对比原生 SDK 的 chunk.choices[0].delta.content——LangChain 已经帮你拆好包了,而且 content 为空时它就是空字符串 "",不用判 None(打印空字符串无副作用)。

③ streaming=True

在构造参数里声明支持流式。注意:对 OpenAI 系模型来说,调用 .stream() 时即使不写这个参数通常也能正常流式;但显式写上是个好习惯,部分集成场景依赖它。

想要完整回复?也是三行

full_reply = ""
for chunk in llm.stream("讲个笑话"):
    full_reply += chunk.content
    print(chunk.content, end="", flush=True)

# full_reply 现在就是完整文本,可以存历史、写库

LangChain 消息 vs 原生字典

顺便熟悉一下新面孔:原生 SDK 里消息是字典 {"role": "user", "content": "..."},LangChain 里是对象:HumanMessage、AIMessage、SystemMessage(明天正式用)。对象的好处是有类型提示、有方法,IDE 能自动补全。

今日踩坑点

  1. 对 chain 用了 .stream() 传错结构:如果流式的是链,输入格式要和 .invoke() 一致(字典),不是裸字符串。
  2. flush=True 还是不能省:这是 Python 的 print 缓冲问题,跟用不用框架无关。
  3. 以为 chunk 是字符串:它是消息块对象,要取 .content;直接 print 会看到对象表示。

今日小练习

  1. 必做:把 Day 10 的 chain = prompt | llm 改成流式调用 chain.stream({"user_input": "..."}),验证链也能流式。
  2. 进阶:流式输出时同步统计已输出的字符数,结束时打印"共输出 N 字符"。

明日预告

Day 13:回到 Day 6 的老话题——记忆。这次用 LangChain 的 Message 对象实现,顺便封装一个像样的 chat() 函数。


附录:完整练习代码

langchainTestStreaming.py

import os
from  dotenv import load_dotenv
from langchain_openai import ChatOpenAI

load_dotenv()

llm = ChatOpenAI(
    model = os.getenv("YUMC_MODEL_NAME"),
    api_key = os.getenv("YUMC_MODEL_API_KEY"),
    base_url = os.getenv("YUMC_MODEL_BASE_URL"),
    streaming = True
)

print("----流式输出测试")

for chunk in llm.stream("请给我讲一个关于程序员的笑话,要简短一点。"):
    print(chunk.content,end= "",flush=True)
print("\n----结束----")
[掌握LangChain流式处理:让你的LLM应用更响应] 同步流式处理syncstream和astream,用于处理最终输出。异步事件流和,用于处理中间步骤和最终输出。通过本文,你学会了如何使用LangChain进行流式处理以提高应用响应性。建议查看LangChain的概念指南以获取更多信息。 阅读详情

相关推荐

探索LangChain中流式数据处理:让你的LLM应用更实时响应

通过实现流式数据处理,LangChain可以在保持高效的同时,提供更好的用户互动体验。LangChain官方文档。

cgsayuclv的博客 478

LangChain 流式传输实战:从 LLM 响应优化到复杂场景处理

基础流式 APIstream和astream实现 LLM 的逐 Token 输出,支持碎片累加链式流式处理:通过 LCEL 构建 "提示词 - 模型 - 解析器" 流水线,保持流式连续性复杂场景优化解决 JSON 流式解析难题,生成器函数修复非流式中断问题在实际项目中,建议优先使用 LCEL 构建链,它能自动处理流式传输的多数场景。当遇到非流式组件时,记住 "最后一个非流式步骤之后仍可流式" 的特性,合理规划流程结构。

佑瞻的博客 1116

个人总结 - LangChain4j应用(2)

LangChain4j是一个旨在简化大型语言模型(LLMs)与Java应用程序集成的框架。 主要介绍:AiServices

向前 1778

LangChain-v0.2文档翻译:3.8、如何在LangChain中进行流式传输

本文详细介绍了如何在LangChain中使用流式传输,包括同步和异步方法,以及如何通过流式传输事件来监控和处理应用程序的中间步骤。通过实际的代码示例,展示了如何使用。

Hugo的博客 978

AI Agent开发实战:从LangChain入门到生产级部署12个项目

AI Agent作为能够感知环境、自主决策并执行动作的智能系统,其核心原理基于大语言模型的推理能力与外部工具的协同调用。在技术价值层面,Agent通过RAG检索增强生成、多步骤任务规划等能力,有效解决了传统程序在处理复杂、动态任务时的局限性。这些技术在企业知识库问答、智能客服、多工具协作等应用场景中展现出巨大潜力。本文聚焦LangChain、LangGraph等主流框架,通过12个由浅入深的实战项目,系统讲解Agent开发从基础概念到生产部署的完整路径,涵盖工具调用、记忆管理、状态流转等关键热词技术,为开发

weixin_30835649的博客 358

[在LangChain中实现流式运行:让AI应用响应更快捷]

通过本文,你学会了如何在LangChain中实现流式处理,以及如何利用流式接口提高应用的响应速度。想要了解更多,请查看LangChain官方文档及相关指导教程。

dsndnwfk的博客 421

【零基础入门 LLM 开发 · Day 10】:LangChain 入门——一条管道符串起 prompt 和模型

用原生 SDK 九天下来,你可能已经发现:每次都要手写 client 初始化、手拼 messages 列表、手取……这些都是重复劳动。:prompt 是积木、模型是积木,你用管道符把它们串成流水线。

IT_Octopus的博客 206

LangChain智能体开发:如何流式运行可执行项

​ 流式处理对于基于大型语言模型的应用程序在用户端的响应性至关重要。重要的LangChain原语,如聊天模型、输出解析器、提示词、检索器和代理实现了LangChain的运行接口。

王国平的博客 802

LangChain教程 - 表达式语言 (LCEL) - 流式运行可执行项

流式处理是基于大型语言模型(LLM)的应用程序中提升用户体验的重要技术之一。通过逐步生成输出,流式处理可以显著提升应用响应性,使用户更快获得反馈。本教程将详细讲解如何在LangChain中实现流式运行,包括从简单的LLM流式输出到更复杂的流式链处理。流式处理是提高基于LLM的应用程序响应性的关键技术。通过结合流式模型、链式操作、生成器函数以及事件监控,可以构建高效的流式应用。本教程介绍了从基础到高级的实现方法,为开发者提供了全面的参考。

花千树的专栏 715

大模型应用开发 100 天:Python + LLM 从入门到精通 day04~Python 高级特性:装饰器、生成器与上下文管理器

Python高级特性是理解LangChain源码的关键,主要包括装饰器、生成器和上下文管理器三大核心概念。装饰器通过@语法增强函数功能,如@timer计时、@retry重试机制;生成器使用yield实现流式处理和惰性计算,适合大数据或流式场景;上下文管理器通过with语句管理资源,确保正确释放。掌握这些特性不仅能提升代码效率,还是深入框架原理的必备技能。文章通过实用示例(如API调用重试、缓存优化等)生动展示了这些特性在AI开发中的实际应用价值。来自华北理工大学段一凡的博客文章

段一凡的博客 320

三菱JET伺服限位、原点信号通过PLC刷新设置方法

RWw及RWr软元件的初始设定值,可通过 [Pr. PA01.0 控制模式选择] 及 [Pr. PN22.0 默认映射模式选择] 的值进行切换。JET伺服参数用于CC-Link IE现场网络Basic。循环通信的请求报文与响应报文的收发数据被换读为伺服放大器的对象数据 (RWwn、RWrn)。接下来看映射字2D05具体的内容: 也就是2D05操作字的第九位、第十位、第十一位。响应报文的设定值可进行变更。变更初始设定值时,应变更PDO映射。不同的模式,对应不同的刷新映射内容。GXWORKS3程序。

qq_51166033的博客 8055

【零基础入门 LLM 开发 · Day 11】:ChatOpenAI vs init_chat_model——一行换供应商

直接实例化,直观明了。——ChatOpenAI只会说"OpenAI 协议"这一种话。哪天想试 Claude、Gemini 或本地模型,每个文件都要改 import 和构造代码。。这篇讲清两者区别,顺便把常见供应商的接入写法一次备齐。

IT_Octopus的博客 495

利用Python实现FGO自动战斗脚本

Fate/Grand Order(非的肝不过欧的)作为索尼为了拯救自己不倒闭而开发的面向月厨的骗氪养成抽卡爆肝游戏,居然没有像隔壁《阴阳师》的自动战斗系统(看看别人现在都自带脚本了)。毕竟是懒得肝,就不妨写一个脚本来肝算了,省时省力。 开始 一个战斗脚本,其实可以算是AI的初步了。虽然只是暴力算出造成最大伤害的方案orz。 我们在这里不考虑释放 技能 、 宝具 和 暴击星 这三样非常重要的东西。...

web开发与Python 5485

[AI大模型] DAY 1 :零基础学LangChain

系统提示定义了代理的角色和行为。要具体且有操作性。- get_weather_for_location: 用于获取特定位置的天气- get_user_location: 用于获取用户的位置如果用户询问天气,请确保您知道位置。如果从问题中可以看出他们指的是自己所在的位置,请使用 get_user_location 工具查找他们的位置。"""如果需要代理以特定模式响应,可以定义结构化响应格式。@dataclass"""代理的响应模式"""

lapiii的博客 1178

树莓派与无人机协同实战:基于OpenCV的地标识别优化策略

本文深入探讨了基于树莓派与无人机的协同系统,重点分享了利用OpenCV优化地标识别以实现精准降落的实战策略。内容涵盖从应对复杂光照的图像预处理、鲁棒的轮廓几何过滤,到通过ROS进行稳定通信,以及实现分层控制与状态机设计,旨在提升系统在真实环境中的可靠性与性能。

y2z3a4b5c的博客 1086

Unity动画状态机实战:Trigger和Bool参数到底怎么选?附5个常见场景解析

本文深入解析Unity动画状态机中Trigger和Bool参数的核心差异与应用场景。通过对比两者在描述瞬时事件与持续状态上的本质区别,并结合角色移动、攻击连招、跳跃落地、受击死亡及环境交互等5个实战场景,提供了清晰的选择逻辑与避坑指南,帮助开发者构建更健壮、易维护的动画逻辑。

weixin_29009501的博客 120

《Learning Langchain》阅读笔记4-基于 Gemini 的 Langchain:组装 LLM 应用的多个部分

到目前为止,我们所了解的关键组件是LangChain框架的基本构建块。这就引出了一个关键问题:我们如何有效地结合它们来构建LLM应用程序?

m0_46464899的博客 1387

UDS(三)网络层时间参数

网络层定义了N_Ar、N_As、N_Br、N_Bs、N_Cr、N_Cs六个时间参数。 网络层在检测到错误的时间传递至上层使用者 1.当N_As 超时时,即发送方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.comfirm指示 2.当N_Ar超时时,即接收方没有及时发送出N_PDU,系统将放弃信息的接收并传递<N_Result> = <N_TIMEOUT_A>的N_USData.co

weixin_44522306的博客 1万+

零基础7天入门大模型开发:Python到Langchain实战

大模型开发作为AI领域的重要方向,其核心在于掌握Python编程、机器学习基础及开发框架应用。Python作为主要开发语言,需要重点掌握数据处理和API调用能力,而机器学习基础概念如embeddings和微调技术则是理解大模型工作原理的关键。开发框架如Langchain和LLamaIndex能显著提升工程效率,实现知识库检索等实用功能。本路线通过七日渐进式学习,从Python基础到Langchain项目实战,特别适合零基础开发者快速入门。实验证明,遵循3+3+1的学习节奏,每天保持4小时有效学习,7天即可搭

weixin_29043895的博客 210

让闲置 MacBook 当 OpenClaw 主机:合盖运行 + 后台常驻

摘要 本文详细介绍如何将闲置MacBook改造为OpenClaw服务器,实现合盖后持续运行。首先推荐Ubuntu 22.04 LTS作为操作系统,提供详细的安装步骤和分区建议。重点介绍三种禁用合盖休眠的方法:修改systemd-logind配置、使用pm-utils工具以及调整GRUB设置。随后指导如何安装Docker并部署OpenClaw服务,包括创建docker-compose.yml文件和配置环境变量。最后说明如何设置系统服务实现OpenClaw开机自启。通过以上配置,可使MacBook在合盖状态下7

一键难忘的博客 4657

纳米尺度仿真软件:GROMACS_(3).分子动力学模拟原理

分子动力学(MD)模拟是一种强大的计算方法,通过数值积分牛顿运动方程,追踪粒子在时间上的位置和速度变化,提供关于体系动力学行为的详细信息。选择合适的力场、设置初始条件、应用边界条件、控制温度和压力、选择合适的时间步长、计算能量和力,是 MD 模拟的关键步骤。通过这些步骤,可以对各种化学、生物和材料体系进行模拟和分析,揭示其结构、动力学和热力学性质。高级应用如反应路径模拟和蛋白质折叠研究,进一步扩展了 MD 模拟的应用范围。

kkchenjj的博客 1100

LangChain 基础结构(LLM、Prompt、Chain)

day15 理解 LangChain 基础结构(LLM、Prompt、Chain)

qq_38895905的博客 607

ABAP 大规模数据并行处理实战,六套 Parallel Processing Framework 如何选,性能调优真正该盯住什么

如果今天真的面对那份执行 14 个小时的生产报表,我不会马上把原来的 Loop 改成 50 个aRFC。我会先用 SAT、ST12、SQL Monitor 和 HANA 侧工具确认时间到底花在哪里。如果 90% 时间其实消耗在一条低效 SQL 上,Parallel Processing 只是让 50 个 Worker 同时执行那条低效 SQL,数据库会比原来更痛苦。应该先把串行逻辑本身优化到合理水平。该做 Set-based Processing 的地方先交给 HANA。该避免SELECT。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 149

LangChain-v0.2文档翻译:3.5、如何流式传输

在基于大型语言模型(LLMs)的应用中,流式传输对于提升终端用户的响应性至关重要。LangChain 中的重要原语,如聊天模型、输出解析器、提示、检索器和代理,都实现了 LangChain Runnable 接口。

Hugo的博客 1226

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

探索LangChain中的流式处理:实现高效和响应性

通过本文,我们了解了LangChain中的流式处理如何提高应用响应速度,以及如何处理流式处理过程中遇到的常见挑战。如需了解更多详细信息,请参阅官方的LangChain文档和其他相关指南。

adfyvatbia的博客 598

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: 【零基础入门 LLM 开发 · Day 11】:ChatOpenAI vs init_chat_model——一行换供应商
下一篇: 【零基础入门 LLM 开发 · Day 13】:LangChain 的对话记忆——Message 对象版
IT_Octopus
博客等级 码龄8年 1727粉丝 302原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT_Octopus

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值