🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
在Node.js后端服务中集成Taotoken实现多模型异步调用示例
1. 项目初始化与环境准备
假设你已有一个基于Express或类似框架的Node.js后端项目。集成Taotoken的第一步是安装必要的依赖并配置环境变量。我们将使用OpenAI官方Node.js SDK,因为它与Taotoken提供的OpenAI兼容API接口完全匹配。
在你的项目根目录下,执行以下命令安装openai包。
npm install openai接下来,你需要获取Taotoken的API密钥。登录Taotoken控制台,在API密钥管理页面创建一个新的密钥。为了安全起见,我们建议将密钥存储在环境变量中。在项目根目录创建或编辑.env文件,添加如下内容。
TAOTOKEN_API_KEY=你的实际API密钥请确保你的.gitignore文件包含了.env,以避免将密钥意外提交到代码仓库。
2. 配置Taotoken客户端
在Node.js服务中,我们需要创建一个配置好的OpenAI客户端实例,将其端点指向Taotoken。关键点在于正确设置baseURL参数。
创建一个新的服务文件,例如src/services/llmService.js,并写入以下初始化代码。
import OpenAI from 'openai'; import dotenv from 'dotenv'; dotenv.config(); const taotokenClient = new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: 'https://taotoken.net/api', }); export default taotokenClient;这里有几个需要注意的细节。首先,我们通过dotenv包加载了环境变量。其次,baseURL被设置为https://taotoken.net/api。这是使用OpenAI官方SDK时的标准配置,SDK会自动在此基础URL后拼接/v1/chat/completions等具体路径。请务必不要在此处添加/v1,否则会导致请求路径错误。
3. 实现基础异步调用函数
配置好客户端后,我们可以编写一个基础的异步函数来调用聊天补全接口。这个函数将接收用户消息和指定的模型ID作为参数。
在同一个服务文件中,添加如下函数。
export async function callChatCompletion(modelId, userMessage) { try { const completion = await taotokenClient.chat.completions.create({ model: modelId, messages: [{ role: 'user', content: userMessage }], temperature: 0.7, }); return completion.choices[0]?.message?.content || ''; } catch (error) { console.error(`调用模型 ${modelId} 时发生错误:`, error); throw error; // 或者根据业务逻辑返回一个兜底响应 } }函数中的modelId需要从Taotoken的模型广场获取。例如,你可以使用claude-sonnet-4-6、gpt-4o等平台支持的模型标识符。这个函数封装了最基本的调用逻辑,并进行了简单的错误处理。
4. 构建多模型异步调用策略
在实际业务中,我们可能希望根据不同的场景(如成本、速度、能力)调用不同的模型,或者同时向多个模型发起请求以聚合结果。Node.js的异步特性让这些操作变得非常方便。
顺序调用不同模型:在某些场景下,你可能需要先尝试一个模型,如果失败或结果不满意,则降级调用另一个模型。
export async function callWithFallback(primaryModel, fallbackModel, userMessage) { try { return await callChatCompletion(primaryModel, userMessage); } catch (primaryError) { console.warn(`主模型 ${primaryModel} 调用失败,尝试降级模型 ${fallbackModel}`); return await callChatCompletion(fallbackModel, userMessage); } }并发调用多个模型:当你需要同时获取多个模型的回答进行比对或融合时,可以使用Promise.all或Promise.allSettled。
export async function callMultipleModelsConcurrently(modelList, userMessage) { const promises = modelList.map(modelId => callChatCompletion(modelId, userMessage).catch(error => { // 对单个模型调用失败进行处理,返回一个标记或空值 return { model: modelId, error: error.message, content: null }; }) ); // 使用 allSettled 确保所有 Promise 都有结果,无论成功失败 const results = await Promise.allSettled(promises); const responses = {}; results.forEach((result, index) => { const modelId = modelList[index]; if (result.status === 'fulfilled') { responses[modelId] = result.value; } else { responses[modelId] = { error: result.reason.message }; } }); return responses; }这个函数会返回一个对象,其键为模型ID,值为该模型的响应内容或错误信息。你可以在业务逻辑中根据这些结果进行后续处理。
5. 在路由控制器中集成服务
最后,我们需要将上述服务集成到Express的路由中,对外提供HTTP接口。
创建一个控制器文件,例如src/controllers/chatController.js。
import { callMultipleModelsConcurrently } from '../services/llmService.js'; export const chatWithMultipleModels = async (req, res) => { const { message, models } = req.body; if (!message || !Array.isArray(models) || models.length === 0) { return res.status(400).json({ error: '请提供有效的 message 和 models 数组' }); } try { // 从请求体中获取模型列表,例如 ['claude-sonnet-4-6', 'gpt-4o'] const responses = await callMultipleModelsConcurrently(models, message); res.json({ query: message, responses: responses }); } catch (error) { console.error('控制器层错误:', error); res.status(500).json({ error: '内部服务器错误' }); } };然后在你的主路由文件中引入并使用这个控制器。
import express from 'express'; import { chatWithMultipleModels } from './controllers/chatController.js'; const router = express.Router(); router.post('/chat/concurrent', chatWithMultipleModels); export default router;现在,向/chat/concurrent发送一个包含message和models数组的POST请求,你的服务就会并发调用Taotoken平台上的多个模型,并返回所有结果。
通过以上步骤,你就在Node.js后端服务中成功集成了Taotoken,并实现了灵活的多模型调用能力。你可以根据实际业务需求,扩展错误处理、增加流式响应、集成用量监控或设计更复杂的模型调度策略。所有模型调用都将通过统一的Taotoken端点进行,便于管理和计费。具体的模型列表、价格和更新请以Taotoken模型广场和控制台信息为准。
开始在你的Node.js项目中体验统一的多模型调用,可以访问Taotoken获取API密钥并查看支持的模型。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度