使用Node.js和Taotoken为前端应用构建一个轻量级AI对话代理接口
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
使用Node.js和Taotoken为前端应用构建一个轻量级AI对话代理接口
在开发包含AI对话功能的前端应用时,直接在前端代码中硬编码API密钥和模型调用逻辑会带来安全风险,也不利于密钥管理和模型切换。一个常见的工程实践是构建一个轻量级的后端代理接口,将敏感配置和核心调用逻辑放在服务端。本文将指导你使用Node.js和Express框架,快速创建一个通过Taotoken平台转发请求的AI对话代理接口。
1. 项目初始化与环境配置
首先,确保你的开发环境已安装Node.js(建议版本16或以上)。创建一个新的项目目录,并初始化一个Node.js项目。
mkdir ai-proxy-server cd ai-proxy-server npm init -y接下来,安装项目所需的依赖。我们将使用express来构建Web服务器,dotenv来管理环境变量,以及官方的openaiSDK(因其与Taotoken API兼容)来处理与大模型的通信。
npm install express dotenv openai npm install --save-dev nodemon在项目根目录下创建两个关键文件:.env用于存储敏感配置,.gitignore用于忽略不需要提交到版本库的文件。
.env文件内容如下:
TAOTOKEN_API_KEY=your_taotoken_api_key_here PORT=3000请将your_taotoken_api_key_here替换为你在Taotoken控制台创建的实际API Key。你可以在Taotoken平台注册并获取。
.gitignore文件内容至少包含:
node_modules/ .env2. 构建Express服务器与代理路由
创建一个名为server.js的文件作为应用的主入口。我们将在这里设置Express服务器、中间件以及核心的代理路由。
首先,引入必要的模块并加载环境变量。
// server.js require('dotenv').config(); const express = require('express'); const { OpenAI } = require('openai'); const app = express(); const port = process.env.PORT || 3000; // 初始化 OpenAI 客户端,指向 Taotoken 的兼容端点 const client = new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: 'https://taotoken.net/api', // 注意:baseURL 末尾不带 /v1 }); // 中间件:解析 JSON 请求体 app.use(express.json());注意baseURL的配置。使用openaiNode.js SDK时,baseURL应设置为https://taotoken.net/api,SDK会在内部自动拼接/v1/chat/completions等具体路径。这是与直接使用curl命令时URL(https://taotoken.net/api/v1/chat/completions)的主要区别,务必正确配置以避免请求失败。
接下来,我们创建一个POST路由/api/chat作为代理接口。它接收前端发送的对话消息和模型参数,然后通过Taotoken客户端转发给大模型。
// server.js (续) app.post('/api/chat', async (req, res) => { try { const { messages, model } = req.body; // 基础验证 if (!messages || !Array.isArray(messages)) { return res.status(400).json({ error: 'Invalid or missing "messages" array.' }); } // 通过 Taotoken 客户端发起聊天补全请求 const completion = await client.chat.completions.create({ model: model || 'gpt-3.5-turbo', // 默认模型,可从模型广场选择其他模型ID messages: messages, stream: false, // 本例先处理非流式响应 }); // 提取模型返回的内容 const aiResponse = completion.choices[0]?.message?.content || ''; // 返回标准化响应给前端 res.json({ success: true, data: { reply: aiResponse, model: completion.model, usage: completion.usage, // 包含 token 消耗信息 }, }); } catch (error) { console.error('Proxy API Error:', error); // 将错误信息安全地返回给前端(避免泄露内部细节) res.status(500).json({ success: false, error: 'Failed to process AI request.', details: error.message, }); } });代码中使用了model || 'gpt-3.5-turbo'作为默认模型。在实际应用中,你可以从Taotoken的模型广场查看所有可用的模型ID,并根据需要让前端指定或由后端配置固定模型。
最后,启动服务器。
// server.js (续) app.listen(port, () => { console.log(`AI proxy server listening on port ${port}`); });3. 运行、测试与前端集成
现在,你可以运行这个代理服务器了。在package.json中添加一个启动脚本以便开发。
// package.json "scripts": { "start": "node server.js", "dev": "nodemon server.js" }使用以下命令启动开发服务器(支持热更新):
npm run dev服务器启动后,你可以使用curl或任何API测试工具(如Postman)来测试代理接口。
curl -X POST http://localhost:3000/api/chat \ -H "Content-Type: application/json" \ -d '{ "messages": [ {"role": "user", "content": "请用一句话介绍你自己。"} ], "model": "claude-sonnet-4-6" }'如果一切正常,你将收到一个包含AI回复的JSON响应。响应体中的usage字段包含了本次调用消耗的Prompt Token和Completion Token数量,这对于后续的用量分析和成本核算很有帮助。
对于前端应用(例如使用React、Vue或任何其他框架),你只需要将原本直接调用大模型API的地址改为你自己的代理接口地址。例如,在JavaScript前端代码中:
// 前端调用示例 async function callAIChat(messages, model) { const response = await fetch('http://localhost:3000/api/chat', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ messages, model }), }); const result = await response.json(); if (result.success) { return result.data.reply; } else { throw new Error(result.error); } }4. 进阶考虑与安全增强
以上实现了一个最基础的代理。在生产环境中,你还需要考虑以下几点:
- 身份验证与授权:为
/api/chat路由添加中间件,验证前端请求的合法性(例如使用JWT、API Key白名单等),防止接口被滥用。 - 输入验证与清理:对前端传入的
messages内容进行更严格的验证和清理,防止注入攻击。 - 速率限制:使用如
express-rate-limit等中间件,对IP或用户进行速率限制,保护后端资源和Taotoken的API配额。 - 错误处理与日志:完善错误分类处理,并记录详细的请求日志(注意脱敏),便于问题排查。
- 模型配置化:将可用模型列表、默认模型等配置移至数据库或配置文件中,实现动态管理。
- 流式响应支持:如果需要支持像ChatGPT那样的逐字输出体验,可以将
stream参数设为true,并处理Server-Sent Events (SSE)响应。这需要调整后端路由和前端的处理逻辑。
通过这个轻量级代理层,你将前端应用与具体的大模型API解耦。所有对Taotoken的调用都经由你的服务器转发,这使得集中管理API密钥、监控用量、切换模型供应商(只需在Taotoken控制台调整)变得非常方便,同时也提升了应用的整体安全性。
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度
