使用Node.js和Taotoken快速构建一个多轮对话测试界面

1. 环境准备与初始化

在开始构建多轮对话测试界面之前,需要确保开发环境已配置完成。首先安装Node.js运行环境(建议版本16或以上),然后创建一个新的项目目录并初始化npm包管理:

mkdir taotoken-chat-demo && cd taotoken-chat-demo
npm init -y
npm install openai express body-parser

安装完成后,在项目根目录下创建.env文件用于存储API密钥等敏感信息:

TAOTOKEN_API_KEY=your_api_key_here

2. 配置Taotoken客户端

在项目中创建taotokenClient.js文件,用于初始化与Taotoken平台的连接。这里使用OpenAI兼容的JavaScript SDK:

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;

关键配置说明:

  • baseURL必须设置为https://taotoken.net/api以确保正确路由到Taotoken平台
  • API密钥通过环境变量加载,避免硬编码在源码中
  • 导出的client对象将用于后续所有对话请求

3. 实现命令行对话界面

创建cliChat.js文件实现基础命令行交互。这个版本支持持续的多轮对话并保留上下文:

import client from './taotokenClient.js';
import readline from 'readline';

const rl = readline.createInterface({
  input: process.stdin,
  output: process.stdout
});

const conversationHistory = [];

async function chatLoop() {
  rl.question('You: ', async (userInput) => {
    conversationHistory.push({ role: 'user', content: userInput });
    
    const completion = await client.chat.completions.create({
      model: 'claude-sonnet-4-6',
      messages: conversationHistory,
    });

    const aiResponse = completion.choices[0]?.message?.content;
    console.log('AI:', aiResponse);
    conversationHistory.push({ role: 'assistant', content: aiResponse });
    
    chatLoop(); // 继续下一轮对话
  });
}

console.log('开始对话(输入exit退出)...');
chatLoop();

运行方式:

node cliChat.js

4. 扩展为Web界面

对于需要可视化测试的场景,可以创建简单的Express服务。新建webChat.js文件:

import express from 'express';
import bodyParser from 'body-parser';
import client from './taotokenClient.js';

const app = express();
app.use(bodyParser.json());

const sessionMap = new Map();

app.post('/chat', async (req, res) => {
  const { sessionId, message } = req.body;
  
  if (!sessionMap.has(sessionId)) {
    sessionMap.set(sessionId, []);
  }
  
  const conversation = sessionMap.get(sessionId);
  conversation.push({ role: 'user', content: message });

  try {
    const completion = await client.chat.completions.create({
      model: 'claude-sonnet-4-6',
      messages: conversation,
    });

    const aiResponse = completion.choices[0]?.message?.content;
    conversation.push({ role: 'assistant', content: aiResponse });
    
    res.json({ response: aiResponse });
  } catch (error) {
    res.status(500).json({ error: error.message });
  }
});

app.listen(3000, () => {
  console.log('Chat server running on http://localhost:3000');
});

前端HTML页面可以通过POST请求与这个服务交互,实现多轮对话的持久化。每个会话通过唯一的sessionId区分,确保不同测试会话的上下文隔离。

5. 模型切换与高级配置

Taotoken平台支持通过修改model参数快速切换不同的大模型。在模型广场可以查看完整的模型ID列表。例如要切换到GPT-4类模型:

const completion = await client.chat.completions.create({
  model: 'gpt-4-1106-preview', // 替换为Taotoken平台提供的模型ID
  messages: conversationHistory,
});

对于需要控制生成参数的场景,可以添加temperature等选项:

const completion = await client.chat.completions.create({
  model: 'claude-sonnet-4-6',
  messages: conversationHistory,
  temperature: 0.7, // 控制生成随机性
  max_tokens: 500,  // 限制响应长度
});

6. 部署与后续扩展

完成开发后,可以考虑以下改进方向:

  • 添加对话历史持久化存储(如SQLite或MongoDB)
  • 实现多模型并行测试比较功能
  • 集成用户认证系统供团队协作使用
  • 添加对话质量评估指标记录

项目可以部署到任意支持Node.js的云服务平台。记得在部署环境中正确配置TAOTOKEN_API_KEY环境变量。

Taotoken

更多推荐