🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

使用Node.js和TaoToken API快速搭建一个智能客服原型系统

对于前端或全栈开发者而言,利用Node.js环境快速构建一个具备对话能力的智能客服原型,是验证想法和启动项目的有效方式。通过TaoToken平台提供的OpenAI兼容API,你可以用熟悉的开发工具和流程,快速接入多种大语言模型,而无需分别处理各家厂商的认证和计费。本文将引导你使用Node.js和openai包,一步步搭建一个支持多轮对话的智能客服聊天接口。

1. 环境准备与项目初始化

开始之前,你需要确保本地已安装Node.js(建议版本16或更高)。首先,创建一个新的项目目录并初始化。

mkdir smart-customer-service
cd smart-customer-service
npm init -y

接下来,安装项目所需的依赖。核心是openai官方Node.js SDK,它将用于调用TaoToken的API。我们也会安装express来构建一个简单的Web服务器,以及dotenv来管理环境变量。

npm install openai express dotenv

2. 获取并配置TaoToken API密钥

要调用TaoToken的API,你需要一个有效的API Key。请访问Taotoken平台,注册并登录后,在控制台的API密钥管理页面创建一个新的密钥。这个密钥将用于所有API请求的身份验证。

在项目根目录下创建一个名为.env的文件,用于安全地存储你的密钥和其他配置。将你刚刚获取的API Key填入其中。

# .env 文件
TAOTOKEN_API_KEY=你的_API_Key_在这里
PORT=3000

请务必将.env文件添加到你的.gitignore中,避免将密钥意外提交到代码仓库。

3. 构建核心API调用模块

我们将创建一个独立的模块来处理与大模型的对话逻辑。在项目根目录下创建chatService.js文件。

这个模块的核心是正确配置OpenAI客户端,将其baseURL指向TaoToken的OpenAI兼容端点。请注意,对于使用openai SDK的场景,baseURL应设置为https://taotoken.net/api,SDK会自动为你拼接后续的路径(如/v1/chat/completions)。

// chatService.js
import OpenAI from 'openai';
import dotenv from 'dotenv';

dotenv.config();

// 初始化客户端,关键是指定Taotoken的端点
const client = new OpenAI({
  apiKey: process.env.TAOTOKEN_API_KEY,
  baseURL: 'https://taotoken.net/api', // 使用Taotoken的OpenAI兼容端点
});

// 存储对话历史,用于实现多轮对话上下文
const conversationHistory = new Map();

/**
 * 发送消息给AI助手并获取回复
 * @param {string} sessionId - 会话ID,用于区分不同用户或对话
 * @param {string} userMessage - 用户输入的消息
 * @param {string} model - 要使用的模型ID,可在Taotoken模型广场查看
 * @returns {Promise<string>} AI助手的回复
 */
export async function getAIResponse(sessionId, userMessage, model = 'gpt-3.5-turbo') {
  try {
    // 获取或初始化当前会话的历史记录
    let messages = conversationHistory.get(sessionId) || [];
    
    // 将用户的新消息加入历史
    messages.push({ role: 'user', content: userMessage });

    // 调用Taotoken API
    const completion = await client.chat.completions.create({
      model: model, // 指定模型,例如:gpt-4, claude-3-haiku等
      messages: messages, // 传入完整的对话历史
      temperature: 0.7, // 控制回复的随机性
      max_tokens: 500, // 控制回复的最大长度
    });

    const aiReply = completion.choices[0]?.message?.content;

    if (aiReply) {
      // 将AI的回复也加入历史记录
      messages.push({ role: 'assistant', content: aiReply });
      // 可选:限制历史记录长度,防止上下文过长
      if (messages.length > 20) {
        messages = messages.slice(-10); // 只保留最近10轮对话
      }
      conversationHistory.set(sessionId, messages);
    }

    return aiReply || '抱歉,我没有收到回复。';

  } catch (error) {
    console.error('调用AI API时发生错误:', error);
    // 更友好的错误信息处理
    if (error.status === 401) {
      return '认证失败,请检查API密钥是否正确。';
    } else if (error.status === 429) {
      return '请求过于频繁,请稍后再试。';
    } else {
      return `服务暂时不可用,请稍后重试。错误码: ${error.status || '未知'}`;
    }
  }
}

/**
 * 清除指定会话的历史记录
 * @param {string} sessionId 
 */
export function clearHistory(sessionId) {
  conversationHistory.delete(sessionId);
}

4. 创建Express服务器提供聊天接口

现在,我们创建一个简单的HTTP服务器,对外提供聊天接口。创建server.js文件。

// server.js
import express from 'express';
import dotenv from 'dotenv';
import { getAIResponse, clearHistory } from './chatService.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', message: '智能客服API服务运行中' });
});

// 核心聊天API端点
app.post('/api/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 getAIResponse(sessionId, message, model);
    res.json({ reply, sessionId });
  } catch (error) {
    console.error('服务器处理错误:', error);
    res.status(500).json({ error: '内部服务器错误' });
  }
});

// 可选:清除某会话历史的端点
app.post('/api/chat/clear', (req, res) => {
  const { sessionId } = req.body;
  if (sessionId) {
    clearHistory(sessionId);
    res.json({ message: `会话 ${sessionId} 的历史记录已清除` });
  } else {
    res.status(400).json({ error: '请求中必须包含 sessionId 字段' });
  }
});

// 启动服务器
app.listen(PORT, () => {
  console.log(`智能客服服务器运行在 http://localhost:${PORT}`);
  console.log(`尝试发送 POST 请求到 http://localhost:${PORT}/api/chat`);
});

5. 运行与测试

package.json中添加启动脚本,以便快速运行。

// package.json 中添加
"type": "module",
"scripts": {
  "start": "node server.js",
  "dev": "node --watch server.js"
}

现在,你可以启动服务器了。

npm run dev

服务器启动后,你可以使用curl、Postman或任何HTTP客户端进行测试。以下是一个curl测试示例:

curl -X POST http://localhost:3000/api/chat \
  -H "Content-Type: application/json" \
  -d '{
    "sessionId": "user-123",
    "message": "你好,请问你们支持哪些支付方式?",
    "model": "gpt-3.5-turbo"
  }'

如果一切配置正确,你将收到一个包含AI回复的JSON响应。通过改变sessionId,你可以为不同用户维持独立的对话上下文;通过改变model字段,你可以切换使用Taotoken模型广场上的其他模型,无需修改代码。

6. 关键注意事项与后续步骤

在开发过程中,有几个关键点需要注意。首先是API密钥的安全,务必通过环境变量管理,切勿写入代码或提交至版本控制系统。其次是模型的选择,你可以在Taotoken平台的模型广场查看所有可用模型及其对应的ID,根据客服场景对成本、速度和质量的要求进行选择。

对于错误处理,示例中提供了基本的网络和认证错误反馈。在生产环境中,你可能需要更完善的日志记录和监控,并考虑对API调用失败设置重试机制。此外,��前的对话历史存储在内存中,服务器重启会丢失。对于生产环境,你需要将其持久化到数据库(如Redis、MongoDB)中。

这个原型系统为你提供了一个起点。在此基础上,你可以轻松地为其添加前端界面,集成知识库检索(RAG),或连接业务数据库来查询订单、物流等真实信息,从而构建一个功能完整的智能客服系统。所有与大模型的交互,都通过统一配置的TaoToken端点完成,简化了开发和运维的复杂度。


你可以访问 Taotoken 获取API Key并探索更多可用的模型,开始你的智能应用开发。

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐