news 2026/9/10 6:05:43

如何在 Web-Dev-For-Beginners 用 LangChain 实现 AI 响应的流式输出

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
如何在 Web-Dev-For-Beginners 用 LangChain 实现 AI 响应的流式输出

如何在 Web-Dev-For-Beginners 用 LangChain 实现 AI 响应的流式输出

【免费下载链接】Web-Dev-For-Beginners24 Lessons, 12 Weeks, Get Started as a Web Developer项目地址: https://gitcode.com/GitHub_Trending/we/Web-Dev-For-Beginners

在 Web-Dev-For-Beginners 课程的 AI Framework 课程(10-ai-framework-project/README.md)中,前面的示例都是用llm.invoke()一次性等待完整响应再打印。如果你的应用需要让回答像 ChatGPT 那样边生成边显示,课程文档的 "Streaming responses" 章节给出了用 LangChain 连接 GitHub Models 的流式输出做法:在ChatOpenAI客户端上开启streaming=True,再用llm.stream()迭代返回的内容块。本文按该路径完成一次流式输出调用,并说明如何判断它是否生效。

准备环境:安装依赖并配置 GITHUB_TOKEN

课程给出的安装命令是:

pip install langchain langchain-openai

模型连接依赖GITHUB_TOKEN环境变量,文档对两种运行环境作了说明:

  • 使用 GitHub Codespaces 时,GITHUB_TOKEN已经配置好,无需额外操作;
  • 在本地运行时,需要自行创建一个具有相应权限的个人访问令牌(personal access token)并设为GITHUB_TOKEN

配置流式客户端

流式输出的关键是在构造ChatOpenAI客户端时多传一个streaming=True参数,其余连接参数与课程中非流式示例完全一致:

from langchain_openai import ChatOpenAI import os llm = ChatOpenAI( api_key=os.environ["GITHUB_TOKEN"], base_url="https://models.github.ai/inference", model="openai/gpt-4o-mini", streaming=True )

其中:

  • base_url="https://models.github.ai/inference"指向 GitHub Models 推理端点;
  • model="openai/gpt-4o-mini"是课程文档统一使用的模型;
  • streaming=True是流式示例相对非流式示例唯一新增的配置项。

执行:用 llm.stream() 逐块打印响应

文档给出的流式调用方式是llm.stream()配合一个循环,每个内容块到达时立即打印:

# Stream the response for chunk in llm.stream("Write a short story about a robot learning to code"): print(chunk.content, end="", flush=True)

end=""让各块首尾相连不断行,flush=True保证内容块生成后立即刷新到屏幕,而不是等缓冲区满了一起输出。把上面的客户端配置与这段循环放进同一个脚本运行即可。

验证:确认响应是逐块到达的

判断流式是否生效的依据是观察输出行为,而不是比对某段固定文本:

  • 流式模式llm.stream()返回的每个chunk都会立刻打印,文档对此的描述是 "Shows content as it's being created"——内容随生成过程逐段出现,用户可以在 AI 还在"思考"时就开始阅读,而不用等完整响应。
  • 非流式对照:课程第一个示例(llm.invoke("What's the capital of France?"))是一次调用后整体拿到response.content再打印,文档给出的示例输出为The capital of France is Paris.(文档示例,实际输出会随模型变化)。

如果你运行流式脚本时看到的是文字一段段连续"打字式"出现,说明streaming=True已生效;如果长时间没有任何输出、最后一次性出现全文,则应回到准备章节检查GITHUB_TOKEN是否可用。

什么时候值得开流式

文档的 UX 提示给出了适用边界:流式在较长响应场景下收益最明显,文档列举的类别包括代码解释、创意写作和详细教程(code explanations, creative writing, or detailed tutorials)——这类内容即使技术上总耗时不变,逐块显示也能让用户立刻看到进展,而不是盯着空白界面等待。简短问答用invoke()一次性取完整响应即可,文档中的自检问题也要求区分invoke()stream()两种方法的用途。

下一步

课程的作业 "Build your own AI-powered study assistant" 把 "Implement streaming responses for better user experience" 列为可选增强项(Step 4: Enhanced features),即可以把本文的流式客户端接入自己的StudyAssistant聊天接口中。课程附带的参考代码见 app.py、app-chat.py 和 app-tools.py,可作为非流式基线的对照。

【免费下载链接】Web-Dev-For-Beginners24 Lessons, 12 Weeks, Get Started as a Web Developer项目地址: https://gitcode.com/GitHub_Trending/we/Web-Dev-For-Beginners

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 6:02:38

量级思维:从费米估算到系统性能与架构优化的关键

最近“magnitude”在技术讨论里出现的频率又高了起来,很多人在社交媒体上用“差了几个数量级”来形容方案之间的差距。这个词本身是个拉丁语词根,翻译成“量级”或者“幅度”都行,但在工程师的世界里,magnitude 从来不是一个用来装…

作者头像 李华
网站建设 2026/9/10 6:02:15

LT1054开关电容稳压器原理与无电感电源设计实战

1. 这颗“小钢炮”芯片到底在解决什么问题?LT1054这个名字,第一次看到时我差点以为是某款老式收音机型号——它既不带“LTC”前缀,也不像LT30xx系列那样直白地写着“稳压器”,更不像LT83xx那样一看就懂是升降压。但就是这颗诞生于…

作者头像 李华
网站建设 2026/9/10 6:00:15

CANN/ge销毁图dump选项API

aclDestroyGraphDumpOpt 【免费下载链接】ge GE(Graph Engine)是面向昇腾的图编译器和执行器,提供了计算图优化、多流并行、内存复用和模型下沉等技术手段,加速模型执行效率,减少模型内存占用。 GE 提供对 PyTorch、Te…

作者头像 李华
网站建设 2026/9/10 5:58:17

MindSpore环境配置指南:从版本选型到IDE接入,避开常见坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华