在 Node.js 后端服务中集成 Taotoken 并实现异步聊天补全调用
告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度在 Node.js 后端服务中集成 Taotoken 并实现异步聊天补全调用将大模型能力集成到后端服务是现代应用开发的常见需求。Taotoken 平台提供了 OpenAI 兼容的 HTTP API使得开发者可以像使用 OpenAI 官方服务一样在 Node.js 项目中便捷地接入多家主流模型。本文将指导你完成从环境配置到代码实现的完整集成步骤。1. 环境准备与配置开始编写代码前你需要准备好 Taotoken 的访问凭证并配置好 Node.js 项目环境。首先访问 Taotoken 控制台创建一个 API Key。这个 Key 是调用所有 API 的身份凭证请妥善保管。同时你可以在模型广场查看所有可用的模型 ID例如claude-sonnet-4-6或gpt-4o-mini。在 Node.js 项目中推荐使用环境变量来管理敏感信息和配置。创建一个.env文件在项目根目录并添加以下内容TAOTOKEN_API_KEYyour_actual_api_key_here TAOTOKEN_BASE_URLhttps://taotoken.net/api请务必将your_actual_api_key_here替换为你从控制台获取的真实 API Key。.env文件应该被添加到.gitignore中避免将密钥提交到版本控制系统。在代码中我们可以使用dotenv包来加载这些环境变量。接下来初始化你的 Node.js 项目如果尚未初始化并安装必要的依赖。npm init -y npm install openai dotenvopenai包是 OpenAI 官方维护的 Node.js SDK它完全兼容 Taotoken 的 API 接口。dotenv包用于从.env文件加载环境变量。2. 初始化 OpenAI 客户端在代码中我们首先需要加载环境变量然后使用正确的配置初始化 OpenAI 客户端。创建一个名为taotoken-client.js的文件。// 加载环境变量 import ‘dotenv/config‘; import OpenAI from ‘openai‘; // 初始化客户端 const client new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: process.env.TAOTOKEN_BASE_URL, // 即 https://taotoken.net/api }); export default client;这里有几个关键点需要注意。baseURL参数必须设置为https://taotoken.net/api。OpenAI SDK 会在内部自动为不同的 API 端点如/v1/chat/completions拼接完整的 URL。请确保不要遗漏https://协议头也不要错误地添加/v1后缀。初始化后的client对象将用于后续所有的 API 调用。3. 实现异步聊天补全调用有了配置好的客户端我们就可以实现具体的聊天补全函数了。根据需求调用可以分为非流式一次性返回完整结果和流式逐块返回结果两种方式。我们先实现一个标准的非流式调用函数。import client from ‘./taotoken-client.js‘; /** * 发起一次非流式的聊天补全请求 * param {Array} messages - 对话消息数组格式为 [{role: ‘user‘, content: ‘Hello‘}, ...] * param {string} model - 模型ID例如 ‘claude-sonnet-4-6‘ * param {number} temperature - 温度参数控制随机性 * returns {PromiseObject} - 返回完整的响应对象 */ async function createChatCompletion(messages, model, temperature 0.7) { try { const completion await client.chat.completions.create({ model: model, messages: messages, temperature: temperature, // 可根据需要添加其他参数如 max_tokens, top_p 等 }); // 提取助手的回复内容 const assistantReply completion.choices[0]?.message?.content; console.log(‘模型回复‘, assistantReply); // 你也可以返回整个 completion 对象以获取更多元数据如 usage return { reply: assistantReply, usage: completion.usage, // 包含 prompt_tokens, completion_tokens, total_tokens fullResponse: completion }; } catch (error) { console.error(‘调用聊天补全API时发生错误‘, error); throw error; // 或将错误处理逻辑上抛给调用者 } } // 使用示例 async function main() { const messages [ { role: ‘user‘, content: ‘用一句话介绍你自己。‘ } ]; const modelId ‘claude-sonnet-4-6‘; // 请替换为你在模型广场选择的模型ID const result await createChatCompletion(messages, modelId); console.log(‘Tokens 用量‘, result.usage); } // 执行示例 main();这个函数封装了基本的调用逻辑并进行了简单的错误处理。返回的对象中包含了模型回复、本次调用的 Token 消耗量以及完整的响应体方便你在业务逻辑中进一步处理。4. 处理流式响应对于需要实时显示生成内容或处理长文本的场景流式响应是更好的选择。它允许服务器端一边生成客户端一边接收和处理能显著提升用户体验。以下是流式调用的实现示例。import client from ‘./taotoken-client.js‘; /** * 发起流式聊天补全请求并处理数据块 * param {Array} messages - 对话消息数组 * param {string} model - 模型ID * param {Function} onChunk - 处理每个数据块的回调函数 */ async function createStreamingChatCompletion(messages, model, onChunk) { try { const stream await client.chat.completions.create({ model: model, messages: messages, stream: true, // 关键参数开启流式响应 }); let fullContent ‘‘; for await (const chunk of stream) { const content chunk.choices[0]?.delta?.content || ‘‘; if (content) { fullContent content; // 调用回调函数例如将内容发送到WebSocket或前端SSE if (onChunk typeof onChunk ‘function‘) { onChunk(content); } } } console.log(‘流式接收完成完整内容‘, fullContent); return fullContent; } catch (error) { console.error(‘流式调用发生错误‘, error); throw error; } } // 使用示例模拟一个简单的逐块打印回调 async function streamExample() { const messages [{ role: ‘user‘, content: ‘写一首关于秋天的五言绝句。‘ }]; const modelId ‘gpt-4o-mini‘; await createStreamingChatCompletion(messages, modelId, (chunk) { process.stdout.write(chunk); // 逐块打印到控制台 }); console.log(‘\n生成结束。‘); } streamExample();在流式调用中你需要将stream参数设置为true。返回的是一个异步迭代器你可以用for await...of循环来逐步读取内容。每个chunk对象中新的文本内容位于choices[0].delta.content路径下。这种方式非常适合与 Server-Sent Events (SSE) 或 WebSocket 结合构建实时交互应用。5. 集成到现有后端框架将上述功能集成到 Express、Koa 或 Fastify 等常见后端框架中非常直接。以下是一个 Express.js 路由的简单示例它暴露了一个聊天接口。import express from ‘express‘; import client from ‘./taotoken-client.js‘; const app express(); app.use(express.json()); // 用于解析 JSON 请求体 app.post(‘/api/chat‘, async (req, res) { const { messages, model, stream } req.body; // 简单的参数校验 if (!messages || !Array.isArray(messages)) { return res.status(400).json({ error: ‘参数错误messages 必须为数组‘ }); } const modelId model || ‘claude-sonnet-4-6‘; // 提供默认模型 try { if (stream) { // 流式响应 res.setHeader(‘Content-Type‘, ‘text/event-stream‘); res.setHeader(‘Cache-Control‘, ‘no-cache‘); res.setHeader(‘Connection‘, ‘keep-alive‘); const apiStream await client.chat.completions.create({ model: modelId, messages: messages, stream: true, }); for await (const chunk of apiStream) { const content chunk.choices[0]?.delta?.content || ‘‘; if (content) { // 按照 SSE 格式发送数据 res.write(data: ${JSON.stringify({ content })}\n\n); } } res.write(‘data: [DONE]\n\n‘); res.end(); } else { // 非流式响应 const completion await client.chat.completions.create({ model: modelId, messages: messages, }); res.json({ reply: completion.choices[0]?.message?.content, usage: completion.usage, }); } } catch (error) { console.error(‘API路由错误‘, error); res.status(500).json({ error: ‘服务器内部错误‘ }); } }); const PORT process.env.PORT || 3000; app.listen(PORT, () { console.log(服务运行在端口 ${PORT}); });这个示例展示了如何在一个路由中根据请求参数动态选择流式或非流式响应。对于流式响应我们设置了正确的 SSE 响应头并将每个数据块以特定格式写回客户端。在生产环境中你还需要添加更完善的错误处理、身份验证、速率限制和日志记录。通过以上步骤你已经成功在 Node.js 后端服务中集成了 Taotoken并能够以异步方式调用多模型聊天补全 API。关键在于正确配置baseURL并使用标准的 OpenAI SDK 语法其余逻辑与调用原厂 API 基本一致。你可以在控制台实时查看调用量和费用消耗方便进行成本管理。开始构建你的 AI 应用可以访问 Taotoken 获取 API Key 并探索更多模型。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度