使用 Node.js 和 Taotoken 构建一个支持多轮对话的简单聊天服务端1. 环境准备与依赖安装开始前请确保已安装 Node.js 16 或更高版本。创建一个新目录并初始化项目mkdir taotoken-chat-server cd taotoken-chat-server npm init -y安装必要的依赖包npm install openai express body-parser这里我们使用openai官方 JavaScript 库来与 Taotoken API 交互express用于构建 Web 服务端body-parser用于解析请求体。2. 配置 Taotoken 客户端在项目根目录创建config.js文件用于存放 Taotoken 相关配置// config.js module.exports { taotoken: { apiKey: process.env.TAOTOKEN_API_KEY || your_api_key_here, baseURL: https://taotoken.net/api, defaultModel: claude-sonnet-4-6 // 可在模型广场查看其他可用模型 } };建议将 API Key 通过环境变量传入避免硬编码在代码中。可以通过 Taotoken 控制台创建和管理 API Key。3. 实现聊天服务核心逻辑创建chatService.js文件实现与 Taotoken API 交互的核心功能// chatService.js const { OpenAI } require(openai); const config require(./config); const client new OpenAI({ apiKey: config.taotoken.apiKey, baseURL: config.taotoken.baseURL, }); class ChatService { constructor() { this.conversations new Map(); // 用于存储多轮对话上下文 } async getResponse(conversationId, userMessage) { let messages this.conversations.get(conversationId) || []; // 添加用户新消息到对话历史 messages.push({ role: user, content: userMessage }); // 调用 Taotoken API const completion await client.chat.completions.create({ model: config.taotoken.defaultModel, messages: messages, }); const assistantMessage completion.choices[0]?.message?.content; // 添加助手回复到对话历史 messages.push({ role: assistant, content: assistantMessage }); this.conversations.set(conversationId, messages); return assistantMessage; } clearConversation(conversationId) { this.conversations.delete(conversationId); } } module.exports new ChatService();这段代码实现了基本的对话上下文管理功能每个对话会话通过conversationId区分并维护完整的对话历史。4. 创建 Express 服务端创建server.js文件实现 Web API 接口// server.js const express require(express); const bodyParser require(body-parser); const chatService require(./chatService); const app express(); app.use(bodyParser.json()); const PORT process.env.PORT || 3000; // 聊天接口 app.post(/api/chat, async (req, res) { try { const { conversationId, message } req.body; if (!conversationId || !message) { return res.status(400).json({ error: conversationId and message are required }); } const response await chatService.getResponse(conversationId, message); res.json({ response }); } catch (error) { console.error(Error:, error); res.status(500).json({ error: Internal server error }); } }); // 清除对话历史接口 app.post(/api/clear, (req, res) { const { conversationId } req.body; if (!conversationId) { return res.status(400).json({ error: conversationId is required }); } chatService.clearConversation(conversationId); res.json({ success: true }); }); app.listen(PORT, () { console.log(Server running on port ${PORT}); });5. 测试与运行启动服务TAOTOKEN_API_KEYyour_api_key_here node server.js可以使用 curl 或 Postman 测试 API# 开始新对话 curl -X POST http://localhost:3000/api/chat \ -H Content-Type: application/json \ -d {conversationId: 123, message: 你好} # 继续对话 curl -X POST http://localhost:3000/api/chat \ -H Content-Type: application/json \ -d {conversationId: 123, message: 你能帮我写首诗吗} # 清除对话历史 curl -X POST http://localhost:3000/api/clear \ -H Content-Type: application/json \ -d {conversationId: 123}6. 扩展与优化建议持久化存储当前实现使用内存存储对话历史可以考虑集成数据库如 MongoDB 或 Redis 进行持久化。限流与鉴权在生产环境中应该添加 API 鉴权和请求限流机制。错误处理增强错误处理逻辑特别是对 Taotoken API 返回的各种错误状态码的处理。超时设置为 Taotoken API 调用添加合理的超时设置。日志记录添加详细的日志记录便于调试和监控。这个简单的服务端可以作为前端应用的后端支撑通过维护对话上下文实现真正的多轮对话体验。Taotoken 的 OpenAI 兼容 API 使得我们可以轻松接入多种大模型而无需关心底层实现细节。Taotoken