在 Node.js 后端服务中集成 Taotoken 调用大模型 API

1. 环境准备与密钥管理

在开始集成前,请确保已注册 Taotoken 账号并获取 API Key。登录控制台后,在「API 密钥」页面可创建新密钥,建议为后端服务单独生成密钥以便权限隔离。模型 ID 可在「模型广场」查看,例如 claude-sonnet-4-6gpt-4-turbo 等。

安全实践推荐通过环境变量管理敏感信息。在项目根目录创建 .env 文件:

TAOTOKEN_API_KEY=your_api_key_here
TAOTOKEN_BASE_URL=https://taotoken.net/api

安装必要的 npm 依赖:

npm install openai dotenv

2. 初始化 OpenAI 客户端

在服务启动时加载环境变量并配置客户端。以下是 Express 框架中的典型初始化代码:

import express from 'express';
import { OpenAI } from 'openai';
import 'dotenv/config';

const app = express();
app.use(express.json());

const client = new OpenAI({
  apiKey: process.env.TAOTOKEN_API_KEY,
  baseURL: process.env.TAOTOKEN_BASE_URL,
});

关键配置说明

  • baseURL 必须设置为 https://taotoken.net/api(不带 /v1 后缀)
  • 实际 API 路径会由 SDK 自动拼接为 /v1/chat/completions
  • 密钥通过 dotenv 从环境变量读取,避免硬编码

3. 实现对话接口

下面实现一个 POST 接口处理对话请求,异步返回模型响应:

app.post('/api/chat', async (req, res) => {
  try {
    const { messages, model = 'claude-sonnet-4-6' } = req.body;

    const completion = await client.chat.completions.create({
      model,
      messages,
      temperature: 0.7,
    });

    res.json({
      content: completion.choices[0]?.message?.content,
      usage: completion.usage,
    });
  } catch (error) {
    console.error('API call failed:', error);
    res.status(500).json({ error: 'Model request failed' });
  }
});

参数说明

  • model 可从请求体动态传入,建议前端提供模型选择器
  • messages 需符合 OpenAI 格式,例如:
    [{"role": "user", "content": "解释量子计算的基本概念"}]
    
  • temperature 等参数可根据业务需求调整

4. 生产环境注意事项

4.1 超时与重试机制

大模型 API 调用可能需要较长时间,建议配置适当的超时和重试策略:

import axios from 'axios';

const client = new OpenAI({
  apiKey: process.env.TAOTOKEN_API_KEY,
  baseURL: process.env.TAOTOKEN_BASE_URL,
  timeout: 30000, // 30秒超时
  httpAgent: new axios.Agent({ maxRetries: 3 }), // 自动重试
});

4.2 用量监控与限流

Taotoken 控制台提供实时用量看板,同时建议在服务层添加限流:

import rateLimit from 'express-rate-limit';

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000, // 15分钟
  max: 100, // 每个IP限制100次请求
});
app.use('/api/chat', limiter);

4.3 错误处理

典型错误类型及处理建议:

  • 401 错误:检查 API Key 是否有效或过期
  • 429 错误:降低请求频率或联系调整配额
  • 503 错误:临时服务不可用,建议指数退避重试

5. 进阶集成方案

对于需要更高灵活性的场景,可考虑以下模式:

多模型路由:根据输入内容自动选择最佳模型

async function selectModel(content) {
  if (content.length > 1000) return 'claude-sonnet-4-6';
  return 'gpt-4-turbo';
}

流式响应:支持 Server-Sent Events (SSE)

app.post('/api/chat-stream', async (req, res) => {
  res.setHeader('Content-Type', 'text/event-stream');
  
  const stream = await client.chat.completions.create({
    model: req.body.model,
    messages: req.body.messages,
    stream: true,
  });

  for await (const chunk of stream) {
    res.write(`data: ${JSON.stringify(chunk)}\n\n`);
  }
  res.end();
});

完整示例代码可参考 Taotoken Node.js SDK 文档。通过以上步骤,您已成功在 Node.js 服务中集成大模型能力,可根据实际业务需求进一步扩展功能。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐