告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度使用 Node.js 开发后端服务并接入 Taotoken 多模型 API 的实践本文面向 Node.js 开发者介绍如何在服务端项目中接入 Taotoken 平台调用其提供的多模型 API。我们将从环境配置、基础调用到流式响应处理逐步构建一个支持灵活切换模型的简单 AI 对话服务。1. 项目初始化与环境配置开始之前请确保你已拥有一个 Taotoken 账户并在其控制台中创建了 API Key。同时你需要准备一个 Node.js 项目环境建议使用 Node.js 18 或更高版本。首先在你的项目根目录下初始化一个新的 Node.js 项目如果尚未初始化并安装必要的依赖。核心依赖是openainpm 包它提供了与 OpenAI 兼容的 SDK。npm init -y npm install openai为了安全地管理敏感信息我们将使用环境变量来存储 API Key 和基础 URL。在项目根目录创建一个.env文件并填入从 Taotoken 控制台获取的信息。TAOTOKEN_API_KEYyour_taotoken_api_key_here TAOTOKEN_BASE_URLhttps://taotoken.net/api请务必将your_taotoken_api_key_here替换为你自己的真实 API Key。同时将.env文件添加到.gitignore中避免将密钥提交到版本控制系统。2. 构建基础 API 客户端接下来我们创建一个核心的 API 客户端模块。这个模块负责读取环境变量初始化 OpenAI SDK 客户端并封装基础的聊天补全调用。创建一个名为taotokenClient.js的文件。import OpenAI from openai; import dotenv from dotenv; // 加载 .env 文件中的环境变量 dotenv.config(); // 初始化客户端 const taotokenClient new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: process.env.TAOTOKEN_BASE_URL, }); /** * 调用 Taotoken 聊天补全 API * param {string} model - 模型 ID例如 claude-sonnet-4-6 * param {Array} messages - 消息数组格式同 OpenAI * param {object} options - 其他可选参数如 temperature, max_tokens * returns {Promiseobject} - API 响应结果 */ export async function createChatCompletion(model, messages, options {}) { try { const completion await taotokenClient.chat.completions.create({ model, messages, ...options, }); return completion; } catch (error) { console.error(调用 Taotoken API 时发生错误:, error); throw error; // 将错误向上抛出由调用方处理 } } export default taotokenClient;关键点说明baseURL配置为https://taotoken.net/api。这是使用 OpenAI 兼容 SDK 时的标准配置SDK 会自动为你拼接后续的路径如/v1/chat/completions。模型 IDmodel参数需要从 Taotoken 平台的模型广场获取。你可以在控制台中查看所有可用模型及其对应的 ID。错误处理是生产环境服务的重要部分这里我们简单地将错误日志打印并重新抛出在实际应用中你可能需要根据业务逻辑进行更细致的处理。3. 实现服务层与多模型支持有了基础客户端我们可以构建一个服务层用于处理具体的业务逻辑并实现多模型切换的能力。创建一个aiService.js文件。import { createChatCompletion } from ./taotokenClient.js; // 可以预定义一些常用模型方便切换 const MODEL_CONFIG { CLAUDE_SONNET: claude-sonnet-4-6, GPT_4O_MINI: gpt-4o-mini, // 你可以从 Taotoken 模型广场添加更多模型 ID }; export class AIConversationService { constructor(defaultModel MODEL_CONFIG.CLAUDE_SONNET) { this.defaultModel defaultModel; } /** * 发起一次简单的对话 * param {string} userMessage - 用户输入 * param {string} modelId - 可选指定使用的模型 ID不指定则用默认模型 * returns {Promisestring} - AI 的回复文本 */ async sendMessage(userMessage, modelId this.defaultModel) { const messages [ { role: user, content: userMessage }, ]; const options { temperature: 0.7, max_tokens: 1000, }; const response await createChatCompletion(modelId, messages, options); return response.choices[0]?.message?.content || ; } /** * 进行多轮对话 * param {Array} history - 历史消息记录格式为 [{role, content}, ...] * param {string} newMessage - 用户的新消息 * param {string} modelId - 可选指定使用的模型 ID * returns {Promise{reply: string, newHistory: Array}} - 回复和更新后的历史记录 */ async chatWithHistory(history, newMessage, modelId this.defaultModel) { const updatedHistory [ ...history, { role: user, content: newMessage }, ]; const options { temperature: 0.7, max_tokens: 1000, }; const response await createChatCompletion(modelId, updatedHistory, options); const aiReply response.choices[0]?.message?.content; const newHistory [ ...updatedHistory, { role: assistant, content: aiReply }, ]; return { reply: aiReply, newHistory, }; } // 获取当前支持的模型列表示例 getAvailableModels() { return Object.values(MODEL_CONFIG); } // 更改默认模型 setDefaultModel(modelId) { if (Object.values(MODEL_CONFIG).includes(modelId)) { this.defaultModel modelId; return true; } // 你也可以选择允许设置任何字符串作为模型 ID以支持模型广场的所有模型 // this.defaultModel modelId; // return true; return false; } }这个服务类提供了两种对话方式单次对话和带历史记录的多轮对话。通过MODEL_CONFIG对象和setDefaultModel方法可以轻松地在不同模型间切换。在实际应用中模型列表可以从数据库或配置文件中动态加载。4. 处理流式响应对于需要实时输出或处理长文本的场景流式响应Streaming能显著提升用户体验。Taotoken 的 OpenAI 兼容 API 同样支持流式响应。我们来修改客户端和服务层增加流式处理的能力。首先更新taotokenClient.js添加一个流式调用函数。// ... 原有导入和客户端初始化代码 ... /** * 调用 Taotoken 流式聊天补全 API * param {string} model - 模型 ID * param {Array} messages - 消息数组 * param {function} onChunk - 收到数据块时的回调函数 (chunk: string) void * param {object} options - 其他可选参数 * returns {Promisestring} - 完整的响应内容 */ export async function createStreamingChatCompletion(model, messages, onChunk, options {}) { try { const stream await taotokenClient.chat.completions.create({ model, messages, stream: true, // 启用流式响应 ...options, }); let fullContent ; for await (const chunk of stream) { const content chunk.choices[0]?.delta?.content || ; if (content) { fullContent content; onChunk(content); // 将每个数据块传递给回调函数 } } return fullContent; } catch (error) { console.error(调用 Taotoken 流式 API 时发生错误:, error); throw error; } }然后在aiService.js中增加一个使用流式响应的方法。import { createChatCompletion, createStreamingChatCompletion } from ./taotokenClient.js; // ... 原有 MODEL_CONFIG 和 AIConversationService 类代码 ... export class AIConversationService { // ... 原有构造函数和其他方法 ... /** * 发起流式对话 * param {string} userMessage - 用户输入 * param {function} onChunk - 处理每个文本块的回调函数 * param {string} modelId - 可选指定使用的模型 ID * returns {Promisestring} - 完整的回复内容 */ async sendMessageStream(userMessage, onChunk, modelId this.defaultModel) { const messages [ { role: user, content: userMessage }, ]; const options { temperature: 0.7, max_tokens: 1000, }; const fullReply await createStreamingChatCompletion( modelId, messages, onChunk, options ); return fullReply; } }5. 集成到 Web 服务器示例最后我们将上述服务集成到一个简单的 Express 服务器中提供 HTTP API。首先安装 Express。npm install express创建一个server.js文件作为应用入口。import express from express; import { AIConversationService } from ./aiService.js; const app express(); const port process.env.PORT || 3000; app.use(express.json()); // 用于解析 JSON 请求体 const aiService new AIConversationService(); // 健康检查端点 app.get(/, (req, res) { res.json({ status: ok, message: AI Service is running. }); }); // 单次对话端点 app.post(/api/chat, async (req, res) { const { message, model } req.body; if (!message) { return res.status(400).json({ error: Message is required. }); } try { const reply await aiService.sendMessage(message, model); res.json({ reply }); } catch (error) { console.error(API Error:, error); res.status(500).json({ error: Failed to get AI response. }); } }); // 流式对话端点 (使用 Server-Sent Events) app.post(/api/chat/stream, async (req, res) { const { message, model } req.body; if (!message) { return res.status(400).json({ error: Message is required. }); } res.setHeader(Content-Type, text/event-stream); res.setHeader(Cache-Control, no-cache); res.setHeader(Connection, keep-alive); try { await aiService.sendMessageStream( message, (chunk) { // 以 SSE 格式发送数据 res.write(data: ${JSON.stringify({ content: chunk })}\n\n); }, model ); res.write(data: [DONE]\n\n); // 发送结束标志 res.end(); } catch (error) { console.error(Stream API Error:, error); res.write(data: ${JSON.stringify({ error: Stream interrupted. })}\n\n); res.end(); } }); // 获取可用模型列表 app.get(/api/models, (req, res) { res.json({ models: aiService.getAvailableModels() }); }); app.listen(port, () { console.log(Server listening on port ${port}); });现在你可以运行node server.js启动服务。通过向/api/chat发送 POST 请求Body:{“message”: “你好”, “model”: “gpt-4o-mini”}来获取 AI 回复或向/api/chat/stream发送请求来体验流式输出。通过以上步骤我们完成了一个具备多模型切换能力、支持流式响应的 Node.js 后端 AI 服务。你可以在此基础上根据业务需求添加用户认证、对话历史存储、更复杂的错误处理与重试机制以及集成 Taotoken 平台提供的用量监控等功能。所有模型调用都将通过统一的 Taotoken 端点进行简化了多模型管理的复杂性。开始构建你的 AI 服务吧访问 Taotoken 获取 API Key 并探索可用模型。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度