告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度使用Node.js与Taotoken构建一个简单的多轮对话代理服务本教程面向有一定Node.js基础的开发者旨在指导你如何利用openainpm包和Taotoken平台提供的统一API端点快速搭建一个支持多轮对话的简易HTTP服务。你将学会如何配置环境、设置正确的API连接参数并实现一个能够维护对话历史的核心服务接口。1. 准备工作与环境配置在开始编写代码之前你需要完成两项基础准备工作获取Taotoken的API Key和创建一个新的Node.js项目。首先访问Taotoken平台注册并登录后在控制台的“API密钥”页面创建一个新的密钥。请妥善保管此密钥它将是你的服务与平台通信的凭证。其次在你的工作目录下初始化一个新的Node.js项目。打开终端执行以下命令mkdir taotoken-chat-agent cd taotoken-chat-agent npm init -y接下来安装项目所需的核心依赖。我们将使用openai官方SDK来发起API请求使用express框架来构建HTTP服务同时需要dotenv来管理环境变量。npm install openai express dotenv为了在开发时能够热重载我们还可以安装nodemon作为开发依赖。npm install --save-dev nodemon安装完成后在项目根目录下创建一个名为.env的文件用于存储敏感信息。将你从Taotoken控制台获取的API Key填入其中。TAOTOKEN_API_KEY你的_API_Key_在这里 PORT3000请确保将.env文件添加到.gitignore中以避免将密钥意外提交到版本控制系统。2. 配置OpenAI客户端并连接Taotoken核心的对话能力依赖于正确配置的OpenAI SDK客户端。Taotoken平台提供了与OpenAI完全兼容的HTTP API这意味着你可以直接使用官方的openainpm包只需修改baseURL配置即可。在项目根目录下创建一个名为openai-client.js的文件。我们将在这里初始化客户端实例。import OpenAI from openai; import dotenv from dotenv; dotenv.config(); // 初始化OpenAI客户端指向Taotoken聚合端点 const openaiClient new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: https://taotoken.net/api, // 关键配置使用Taotoken的OpenAI兼容端点 }); export default openaiClient;这段代码有两个关键点。第一我们通过dotenv.config()加载了环境变量从而安全地读取TAOTOKEN_API_KEY。第二在创建OpenAI客户端实例时我们明确设置了baseURL为https://taotoken.net/api。这是连接Taotoken服务而非OpenAI原厂服务的关键一步。SDK会自动在此基础URL上拼接/v1/chat/completions等具体路径。3. 实现对话历史管理与服务逻辑一个有效的多轮对话代理需要能够维护上下文历史。我们将创建一个简单的内存存储在实际生产环境中你可能需要替换为数据库来管理不同会话的对话记录并实现核心的聊天补全函数。创建一个名为chat-service.js的文件。import openaiClient from ./openai-client.js; // 使用一个简单的内存对象存储对话历史键为sessionId const conversationHistory {}; /** * 获取或初始化指定会话的对话历史 * param {string} sessionId - 会话标识符 * returns {Array} 该会话的消息历史数组 */ function getHistory(sessionId) { if (!conversationHistory[sessionId]) { conversationHistory[sessionId] []; } return conversationHistory[sessionId]; } /** * 向指定会话添加一条消息 * param {string} sessionId - 会话标识符 * param {string} role - 消息角色如user或assistant * param {string} content - 消息内容 */ function addMessage(sessionId, role, content) { const history getHistory(sessionId); history.push({ role, content }); } /** * 核心聊天函数调用Taotoken API完成对话 * param {string} sessionId - 会话标识符 * param {string} userInput - 用户本轮输入 * param {string} model - 选用的模型ID默认为claude-3-haiku * returns {Promisestring} AI助手的回复内容 */ export async function chat(sessionId, userInput, model claude-3-haiku) { // 1. 将用户输入添加到历史记录 addMessage(sessionId, user, userInput); const messages getHistory(sessionId); try { // 2. 调用Taotoken API const completion await openaiClient.chat.completions.create({ model: model, // 模型ID可在Taotoken模型广场查看并替换 messages: messages, stream: false, // 本例使用非流式响应 }); // 3. 提取AI回复 const assistantReply completion.choices[0]?.message?.content || ; // 4. 将AI回复添加到历史记录以维持上下文 if (assistantReply) { addMessage(sessionId, assistant, assistantReply); } return assistantReply; } catch (error) { console.error(调用Taotoken API时发生错误:, error); // 可选从历史记录中移除未成功的用户消息 const history getHistory(sessionId); if (history.length 0 history[history.length - 1].role user) { history.pop(); } throw new Error(对话处理失败: ${error.message}); } } /** * 清空指定会话的历史记录 * param {string} sessionId */ export function clearHistory(sessionId) { delete conversationHistory[sessionId]; }在这段代码中chat函数是核心。它接收会话ID、用户输入和模型名称首先更新内存中的对话历史然后使用之前配置好的客户端向Taotoken发起请求。请求的model参数需要填写在Taotoken模型广场中查看到的有效模型ID例如claude-3-haiku、claude-sonnet-4-6或gpt-4o-mini等。成功获取回复后函数将AI的回复也加入历史从而为下一轮对话提供完整的上下文。4. 构建Express HTTP服务器最后我们需要创建一个HTTP服务器来对外提供聊天接口。创建server.js作为应用入口文件。import express from express; import dotenv from dotenv; import { chat, clearHistory } from ./chat-service.js; dotenv.config(); const app express(); const PORT process.env.PORT || 3000; // 中间件解析JSON请求体 app.use(express.json()); // 健康检查端点 app.get(/, (req, res) { res.json({ status: ok, service: Taotoken Chat Agent }); }); // 核心聊天端点POST /chat app.post(/chat, async (req, res) { const { sessionId default-session, message, model } req.body; if (!message || typeof message ! string) { return res.status(400).json({ error: 参数错误message字段为必填字符串 }); } try { const reply await chat(sessionId, message, model); res.json({ success: true, sessionId, reply }); } catch (error) { console.error(error); res.status(500).json({ success: false, error: error.message }); } }); // 清空对话历史端点POST /chat/clear app.post(/chat/clear, (req, res) { const { sessionId default-session } req.body; clearHistory(sessionId); res.json({ success: true, message: 会话 ${sessionId} 的历史记录已清空 }); }); // 启动服务器 app.listen(PORT, () { console.log(Taotoken对话代理服务已启动监听端口: ${PORT}); console.log(服务地址: http://localhost:${PORT}); });这个服务器提供了两个主要端点。POST /chat是聊天接口它要求请求体包含sessionId用于区分不同用户或对话线程、message用户输入以及可选的model参数。POST /chat/clear则用于清空指定会话的历史记录方便开始一轮全新的对话。5. 运行、测试与后续步骤现在所有组件都已就绪。首先在package.json的scripts部分添加启动命令以便使用nodemon。scripts: { dev: nodemon server.js }然后在终端运行npm run dev启动服务。你会看到服务器成功启动的日志。接下来你可以使用任何HTTP客户端如curl、Postman或浏览器插件进行测试。以下是一个使用curl发送请求的示例curl -X POST http://localhost:3000/chat \ -H Content-Type: application/json \ -d { sessionId: test-user-1, message: 你好请介绍一下你自己。, model: claude-3-haiku }服务将返回AI的回复。发送第二条消息时保持sessionId不变AI就能基于之前的对话历史进行回复。curl -X POST http://localhost:3000/chat \ -H Content-Type: application/json \ -d { sessionId: test-user-1, message: 我刚刚问了你什么 }至此一个基础的多轮对话代理服务已经构建完成。你可以在此基础上进行扩展例如添加身份验证、集成数据库持久化对话历史、实现流式响应SSE以提升用户体验或者在前端构建一个简单的聊天界面。所有模型调用都将通过Taotoken平台统一路由你可以在Taotoken控制台中实时查看各模型的调用量与费用消耗。希望这篇教程能帮助你快速上手。你可以访问 Taotoken 平台查看支持的模型列表、管理API密钥并监控使用情况。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度
使用Node.js与Taotoken构建一个简单的多轮对话代理服务
发布时间:2026/5/18 19:07:23
告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度使用Node.js与Taotoken构建一个简单的多轮对话代理服务本教程面向有一定Node.js基础的开发者旨在指导你如何利用openainpm包和Taotoken平台提供的统一API端点快速搭建一个支持多轮对话的简易HTTP服务。你将学会如何配置环境、设置正确的API连接参数并实现一个能够维护对话历史的核心服务接口。1. 准备工作与环境配置在开始编写代码之前你需要完成两项基础准备工作获取Taotoken的API Key和创建一个新的Node.js项目。首先访问Taotoken平台注册并登录后在控制台的“API密钥”页面创建一个新的密钥。请妥善保管此密钥它将是你的服务与平台通信的凭证。其次在你的工作目录下初始化一个新的Node.js项目。打开终端执行以下命令mkdir taotoken-chat-agent cd taotoken-chat-agent npm init -y接下来安装项目所需的核心依赖。我们将使用openai官方SDK来发起API请求使用express框架来构建HTTP服务同时需要dotenv来管理环境变量。npm install openai express dotenv为了在开发时能够热重载我们还可以安装nodemon作为开发依赖。npm install --save-dev nodemon安装完成后在项目根目录下创建一个名为.env的文件用于存储敏感信息。将你从Taotoken控制台获取的API Key填入其中。TAOTOKEN_API_KEY你的_API_Key_在这里 PORT3000请确保将.env文件添加到.gitignore中以避免将密钥意外提交到版本控制系统。2. 配置OpenAI客户端并连接Taotoken核心的对话能力依赖于正确配置的OpenAI SDK客户端。Taotoken平台提供了与OpenAI完全兼容的HTTP API这意味着你可以直接使用官方的openainpm包只需修改baseURL配置即可。在项目根目录下创建一个名为openai-client.js的文件。我们将在这里初始化客户端实例。import OpenAI from openai; import dotenv from dotenv; dotenv.config(); // 初始化OpenAI客户端指向Taotoken聚合端点 const openaiClient new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: https://taotoken.net/api, // 关键配置使用Taotoken的OpenAI兼容端点 }); export default openaiClient;这段代码有两个关键点。第一我们通过dotenv.config()加载了环境变量从而安全地读取TAOTOKEN_API_KEY。第二在创建OpenAI客户端实例时我们明确设置了baseURL为https://taotoken.net/api。这是连接Taotoken服务而非OpenAI原厂服务的关键一步。SDK会自动在此基础URL上拼接/v1/chat/completions等具体路径。3. 实现对话历史管理与服务逻辑一个有效的多轮对话代理需要能够维护上下文历史。我们将创建一个简单的内存存储在实际生产环境中你可能需要替换为数据库来管理不同会话的对话记录并实现核心的聊天补全函数。创建一个名为chat-service.js的文件。import openaiClient from ./openai-client.js; // 使用一个简单的内存对象存储对话历史键为sessionId const conversationHistory {}; /** * 获取或初始化指定会话的对话历史 * param {string} sessionId - 会话标识符 * returns {Array} 该会话的消息历史数组 */ function getHistory(sessionId) { if (!conversationHistory[sessionId]) { conversationHistory[sessionId] []; } return conversationHistory[sessionId]; } /** * 向指定会话添加一条消息 * param {string} sessionId - 会话标识符 * param {string} role - 消息角色如user或assistant * param {string} content - 消息内容 */ function addMessage(sessionId, role, content) { const history getHistory(sessionId); history.push({ role, content }); } /** * 核心聊天函数调用Taotoken API完成对话 * param {string} sessionId - 会话标识符 * param {string} userInput - 用户本轮输入 * param {string} model - 选用的模型ID默认为claude-3-haiku * returns {Promisestring} AI助手的回复内容 */ export async function chat(sessionId, userInput, model claude-3-haiku) { // 1. 将用户输入添加到历史记录 addMessage(sessionId, user, userInput); const messages getHistory(sessionId); try { // 2. 调用Taotoken API const completion await openaiClient.chat.completions.create({ model: model, // 模型ID可在Taotoken模型广场查看并替换 messages: messages, stream: false, // 本例使用非流式响应 }); // 3. 提取AI回复 const assistantReply completion.choices[0]?.message?.content || ; // 4. 将AI回复添加到历史记录以维持上下文 if (assistantReply) { addMessage(sessionId, assistant, assistantReply); } return assistantReply; } catch (error) { console.error(调用Taotoken API时发生错误:, error); // 可选从历史记录中移除未成功的用户消息 const history getHistory(sessionId); if (history.length 0 history[history.length - 1].role user) { history.pop(); } throw new Error(对话处理失败: ${error.message}); } } /** * 清空指定会话的历史记录 * param {string} sessionId */ export function clearHistory(sessionId) { delete conversationHistory[sessionId]; }在这段代码中chat函数是核心。它接收会话ID、用户输入和模型名称首先更新内存中的对话历史然后使用之前配置好的客户端向Taotoken发起请求。请求的model参数需要填写在Taotoken模型广场中查看到的有效模型ID例如claude-3-haiku、claude-sonnet-4-6或gpt-4o-mini等。成功获取回复后函数将AI的回复也加入历史从而为下一轮对话提供完整的上下文。4. 构建Express HTTP服务器最后我们需要创建一个HTTP服务器来对外提供聊天接口。创建server.js作为应用入口文件。import express from express; import dotenv from dotenv; import { chat, clearHistory } from ./chat-service.js; dotenv.config(); const app express(); const PORT process.env.PORT || 3000; // 中间件解析JSON请求体 app.use(express.json()); // 健康检查端点 app.get(/, (req, res) { res.json({ status: ok, service: Taotoken Chat Agent }); }); // 核心聊天端点POST /chat app.post(/chat, async (req, res) { const { sessionId default-session, message, model } req.body; if (!message || typeof message ! string) { return res.status(400).json({ error: 参数错误message字段为必填字符串 }); } try { const reply await chat(sessionId, message, model); res.json({ success: true, sessionId, reply }); } catch (error) { console.error(error); res.status(500).json({ success: false, error: error.message }); } }); // 清空对话历史端点POST /chat/clear app.post(/chat/clear, (req, res) { const { sessionId default-session } req.body; clearHistory(sessionId); res.json({ success: true, message: 会话 ${sessionId} 的历史记录已清空 }); }); // 启动服务器 app.listen(PORT, () { console.log(Taotoken对话代理服务已启动监听端口: ${PORT}); console.log(服务地址: http://localhost:${PORT}); });这个服务器提供了两个主要端点。POST /chat是聊天接口它要求请求体包含sessionId用于区分不同用户或对话线程、message用户输入以及可选的model参数。POST /chat/clear则用于清空指定会话的历史记录方便开始一轮全新的对话。5. 运行、测试与后续步骤现在所有组件都已就绪。首先在package.json的scripts部分添加启动命令以便使用nodemon。scripts: { dev: nodemon server.js }然后在终端运行npm run dev启动服务。你会看到服务器成功启动的日志。接下来你可以使用任何HTTP客户端如curl、Postman或浏览器插件进行测试。以下是一个使用curl发送请求的示例curl -X POST http://localhost:3000/chat \ -H Content-Type: application/json \ -d { sessionId: test-user-1, message: 你好请介绍一下你自己。, model: claude-3-haiku }服务将返回AI的回复。发送第二条消息时保持sessionId不变AI就能基于之前的对话历史进行回复。curl -X POST http://localhost:3000/chat \ -H Content-Type: application/json \ -d { sessionId: test-user-1, message: 我刚刚问了你什么 }至此一个基础的多轮对话代理服务已经构建完成。你可以在此基础上进行扩展例如添加身份验证、集成数据库持久化对话历史、实现流式响应SSE以提升用户体验或者在前端构建一个简单的聊天界面。所有模型调用都将通过Taotoken平台统一路由你可以在Taotoken控制台中实时查看各模型的调用量与费用消耗。希望这篇教程能帮助你快速上手。你可以访问 Taotoken 平台查看支持的模型列表、管理API密钥并监控使用情况。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度