如何在 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),仅供参考