通过 Node.js 后端服务接入 Taotoken 实现多轮对话机器人
1. 准备工作
在开始构建 Node.js 后端服务之前,需要确保已完成以下准备工作。首先访问 Taotoken 控制台创建 API Key,该密钥将用于后续的身份验证。在模型广场中选择适合的模型 ID,例如claude-sonnet-4-6或其他符合需求的模型。
安装必要的依赖包,包括openai和dotenv。openai包提供了与 OpenAI 兼容 API 交互的便捷方式,而dotenv用于管理环境变量。可以通过以下命令安装这两个包:
npm install openai dotenv2. 配置环境变量与初始化客户端
在项目根目录下创建.env文件,用于存储敏感的 API Key。将以下内容添加到.env文件中:
TAOTOKEN_API_KEY=your_api_key_here接下来,在 Node.js 应用中初始化 OpenAI 客户端。创建一个名为openaiClient.js的文件,包含以下代码:
import OpenAI from "openai"; import dotenv from "dotenv"; dotenv.config(); const client = new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: "https://taotoken.net/api", }); export default client;这段代码会从环境变量中读取 API Key,并配置正确的 baseURL 指向 Taotoken 服务。注意 baseURL 设置为https://taotoken.net/api,这是 Taotoken 提供的 OpenAI 兼容接口地址。
3. 实现多轮对话逻辑
多轮对话需要维护上下文信息,即之前的对话历史。创建一个名为chatService.js的文件来实现这一功能:
import client from "./openaiClient.js"; class ChatService { constructor() { this.conversationHistory = []; } async sendMessage(userMessage) { this.conversationHistory.push({ role: "user", content: userMessage, }); const completion = await client.chat.completions.create({ model: "claude-sonnet-4-6", messages: this.conversationHistory, }); const assistantReply = completion.choices[0]?.message?.content; if (assistantReply) { this.conversationHistory.push({ role: "assistant", content: assistantReply, }); } return assistantReply || "未能获取回复"; } clearHistory() { this.conversationHistory = []; } } export default ChatService;这个类维护了一个conversationHistory数组,存储了用户和助手的对话记录。每次用户发送新消息时,会将消息添加到历史记录中,然后将整个对话历史发送给 Taotoken API 获取回复。
4. 创建 Express 服务端
为了提供 HTTP 接口,我们可以使用 Express 框架创建一个简单的服务端。创建server.js文件:
import express from "express"; import ChatService from "./chatService.js"; const app = express(); const port = 3000; const chatService = new ChatService(); app.use(express.json()); app.post("/chat", async (req, res) => { try { const { message } = req.body; if (!message) { return res.status(400).json({ error: "Message is required" }); } const reply = await chatService.sendMessage(message); res.json({ reply }); } catch (error) { console.error("Error:", error); res.status(500).json({ error: "Internal server error" }); } }); app.post("/reset", (req, res) => { chatService.clearHistory(); res.json({ status: "Conversation history cleared" }); }); app.listen(port, () => { console.log(`Server running on port ${port}`); });这个服务提供了两个端点:/chat用于发送新消息并获取回复,/reset用于清空对话历史。启动服务后,可以通过 POST 请求与对话机器人交互。
5. 测试与部署
可以使用 curl 或 Postman 测试服务是否正常工作。以下是使用 curl 测试的示例:
# 发送第一条消息 curl -X POST http://localhost:3000/chat \ -H "Content-Type: application/json" \ -d '{"message":"你好,介绍一下你自己"}' # 发送后续消息,保持上下文 curl -X POST http://localhost:3000/chat \ -H "Content-Type: application/json" \ -d '{"message":"你刚才说的内容能再详细点吗"}' # 重置对话历史 curl -X POST http://localhost:3000/reset部署时,建议将 API Key 等敏感信息通过环境变量注入,而不是硬编码在代码中。可以使用 PM2 或 Docker 等工具管理 Node.js 进程。
6. 进阶优化建议
在实际应用中,可能需要考虑以下优化点:
- 添加对话历史长度限制,避免 token 数量超过模型限制
- 实现对话历史持久化,使用数据库存储长期对话记录
- 添加用户认证,区分不同用户的对话历史
- 实现流式响应,提升用户体验
- 添加速率限制,防止滥用
这些功能可以根据实际需求逐步实现。Taotoken 提供了稳定的 API 服务,开发者可以专注于业务逻辑的实现。
了解更多关于 Taotoken 的信息,请访问 Taotoken。