Node.js流式调用AI模型入门 - 从零跑通你的第一段流式代码
为什么独立开发者应该关注流式调用
如果你做过AI相关的应用,一定遇到过这个问题:调用大模型接口后,用户盯着空白的屏幕等十几秒才能看到完整回复。体验很差,用户流失很快。
解决方案就是流式输出——模型每生成一段文字就立即推送给你,你边收边显示,用户看到的是"逐字打出来"的效果。这也是 ChatGPT 那种打字机体验背后的技术。
对独立开发者和小团队来说,流式调用几乎是必学技能:
- 体验提升立竿见影:首字节响应时间从数秒降到几百毫秒;
- 降低超时风险:长文本生成不会因为单次请求耗时过长而被网关掐断;
- 可以提前中断:发现模型跑偏,随时取消,省 token 省钱。
本文带你从注册服务、拿到 API Key,到用 Node.js 跑通第一段流式代码,全程大约 15 分钟。
第一步:注册 ThisToken.AI 并获取 API Key
ThisToken.AI 提供兼容 OpenAI 格式的 API 网关,这意味着你可以用熟悉的 OpenAI SDK 直接接入,切换模型的成本很低。
- 打开 https://api.thistoken.ai/register,用邮箱完成注册;
- 登录后进入控制台,找到「API Keys」页面;
- 点击「创建密钥」,复制生成的 Key。
⚠️ 注意:API Key 只在创建时完整展示一次,请立即保存到安全的地方(推荐使用 .env 文件,并把 .env 加入 .gitignore,千万不要硬编码进代码或提交到 Git 仓库)。
第二步:初始化 Node.js 项目
确保你本机安装了 Node.js 18 以上版本(自带 fetch),然后:
mkdir my-stream-demo && cd my-stream-demo
npm init -y
npm install openai dotenv这里我们直接用官方 openai SDK——因为 ThisToken.AI 兼容 OpenAI 接口格式,只需要改一下 baseURL 即可,不需要额外学习新的 SDK。
在项目根目录创建 .env 文件:
THISTOKEN_API_KEY=sk-你的密钥粘贴到这里第三步:第一段流式代码
创建 stream.js,以下代码可以直接复制运行:
require("dotenv").config();
const OpenAI = require("openai");
const client = new OpenAI({
apiKey: process.env.THISTOKEN_API_KEY,
baseURL: "https://api.thistoken.ai/v1", // 关键:指向 ThisToken.AI 网关
});
async function main() {
const stream = await client.chat.completions.create({
model: "gpt-4o-mini", // 按你在控制台可见的模型名填写
messages: [
{ role: "system", content: "你是一位简洁友好的技术助手。" },
{ role: "user", content: "用三句话解释什么是流式输出。" },
],
stream: true, // 开启流式
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) {
process.stdout.write(delta); // 逐段打印,不换行
}
}
process.stdout.write("\n");
}
main().catch((err) => {
console.error("请求失败:", err.message);
process.exit(1);
});运行:
node stream.js如果一切正常,你会看到模型回复像打字机一样逐字出现在终端里。恭喜,你已经跑通了流式调用。
代码里的关键点拆解
baseURL 是核心。 默认情况下 OpenAI SDK 会请求官方地址,把它改成 https://api.thistoken.ai/v1 后,所有请求都会走 ThisToken.AI 的网关。注意 URL 末尾的 /v1 必须保留。
stream: true 触发 SSE。 开启后服务端会通过 Server-Sent Events 持续推送数据块(chunk),SDK 内部帮你解析成异步可迭代对象,所以能用 for await...of 优雅地逐块消费。
delta 结构。 每个 chunk 里的增量文本在 choices[0].delta.content 中,注意它是"增量"而不是完整内容,你需要自己拼接。用 process.stdout.write() 而不是 console.log(),可以避免每个 chunk 后自动换行。
常见坑与排查
- 401 错误:检查 API Key 是否正确加载。可以
console.log(!!process.env.THISTOKEN_API_KEY)确认为true。 - 模型名不对:不同网关支持的模型列表不同,请以控制台文档中列出的模型名为准。
- Node 版本过低:
for await需要 Node 10+,但整体建议 18+ 以获得更稳定的 fetch 支持。 - 想中断生成:真实产品中给请求传入
AbortSignal,用户点"停止"时调用controller.abort()即可。
从终端到 Web:下一步做什么
终端 demo 只是起点。在真实的 Web 应用中,你只需要把上面的循环搬到 Express 或 Fastify 的路由里,把每个 delta 通过 SSE 或 WebSocket 转发给前端,前端边收边渲染,就是一个完整的打字机对话体验。核心逻辑和你刚跑通的这 30 行代码完全一致——网关、SDK、流式解析都是同一套。
掌握流式调用后,你还可以进一步探索:流式 + Function Calling、多路并发流式聚合、token 用量统计等,这些都是构建生产级 AI 应用的基础能力。
现在就动手试试吧:前往 https://api.thistoken.ai/register 注册账号,创建你的第一个 API Key,把上面的代码复制下来跑一遍。十五分钟后,你的应用也能拥有打字机般的流畅体验。
---
想直接跑通示例?访问 https://api.thistoken.ai/register 注册 ThisToken.AI,获取 API Key 后即可开始。