在Node.js后端服务中集成Taotoken实现异步对话生成与流式响应
1. 环境准备与依赖安装
在开始集成Taotoken之前,确保您的Node.js环境版本为16或更高。创建一个新的Express项目或使用现有项目,安装必要的依赖:
npm install express openai dotenv cors其中openai包用于与Taotoken的OpenAI兼容API交互,dotenv用于管理环境变量,cors用于处理跨域请求(如果前端与后端分离部署)。在项目根目录创建.env文件用于存储敏感信息:
TAOTOKEN_API_KEY=your_api_key_here2. 基础服务配置
在Express应用中初始化OpenAI客户端并配置Taotoken的Base URL。创建一个services/ai.js文件封装AI服务逻辑:
import OpenAI from "openai"; import { config } from "dotenv"; config(); const client = new OpenAI({ apiKey: process.env.TAOTOKEN_API_KEY, baseURL: "https://taotoken.net/api", }); export async function generateCompletion(messages, model = "claude-sonnet-4-6", stream = false) { return client.chat.completions.create({ model, messages, stream, }); }3. 实现非流式响应接口
在Express路由中创建一个处理常规同步响应的端点。新建routes/chat.js文件:
import express from "express"; import { generateCompletion } from "../services/ai.js"; const router = express.Router(); router.post("/completion", async (req, res) => { try { const { messages, model } = req.body; const completion = await generateCompletion(messages, model); res.json(completion); } catch (error) { console.error("Error generating completion:", error); res.status(500).json({ error: "Failed to generate completion" }); } }); export default router;在应用主文件中引入并使用这个路由:
import express from "express"; import cors from "cors"; import chatRouter from "./routes/chat.js"; const app = express(); app.use(cors()); app.use(express.json()); app.use("/api/chat", chatRouter); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`Server running on port ${PORT}`); });4. 实现流式响应接口
流式响应对于实时交互场景非常重要。修改routes/chat.js添加流式端点:
router.post("/completion/stream", async (req, res) => { try { const { messages, model } = req.body; res.setHeader("Content-Type", "text/event-stream"); res.setHeader("Cache-Control", "no-cache"); res.setHeader("Connection", "keep-alive"); const stream = await generateCompletion(messages, model, true); for await (const chunk of stream) { const content = chunk.choices[0]?.delta?.content || ""; res.write(`data: ${JSON.stringify({ content })}\n\n`); } res.end(); } catch (error) { console.error("Stream error:", error); res.status(500).json({ error: "Stream failed" }); } });5. 前端集成示例
虽然本文重点在后端集成,但为完整起见,这里提供一个简单的前端调用示例。假设使用React:
async function fetchCompletion(messages, model, onStream) { if (onStream) { const response = await fetch("/api/chat/completion/stream", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ messages, model }), }); const reader = response.body.getReader(); const decoder = new TextDecoder(); while (true) { const { done, value } = await reader.read(); if (done) break; const chunk = decoder.decode(value); chunk.split("\n\n").forEach(line => { if (line.startsWith("data: ")) { const data = JSON.parse(line.substring(6)); onStream(data.content); } }); } } else { const response = await fetch("/api/chat/completion", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ messages, model }), }); return response.json(); } }6. 生产环境注意事项
在实际部署时,需要考虑以下几个关键点:
- API密钥安全:永远不要将API密钥硬编码或提交到版本控制系统。使用环境变量或密钥管理服务。
- 速率限制:根据业务需求实现适当的请求限流,避免超出Taotoken的配额限制。
- 错误处理:完善错误处理逻辑,包括网络问题、API限制和模型特定错误。
- 日志记录:记录重要的请求和响应信息,便于调试和审计。
- 性能监控:监控接口响应时间和资源使用情况,确保服务质量。
通过以上步骤,您已经成功在Node.js后端服务中集成了Taotoken的异步对话生成能力,并支持流式响应。如需了解更多模型选项和配置细节,可访问Taotoken平台查阅最新文档。