基于taotoken与python在ubuntu上构建多轮对话测试工具
告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度基于taotoken与python在ubuntu上构建多轮对话测试工具在AI应用开发与模型选型过程中对多个大语言模型的回答质量、风格一致性和稳定性进行系统性评估是一项关键且耗时的工作。对于AI质量评估工程师或开发团队而言手动切换不同厂商的API、管理各自的密钥、并统一测试流程效率低下且容易出错。本文将介绍如何在Ubuntu工作站上利用Taotoken平台提供的统一API接入能力结合Python SDK构建一个自动化多轮对话测试工具实现高效、可复现的模型质量横向数据收集。1. 场景核心价值与工具设计思路该工具的核心目标是自动化执行预设的多轮对话测试集并将不同模型的响应结果、耗时等关键指标记录下来形成结构化的评估报告。其设计思路围绕以下几个关键点展开统一接入层借助Taotoken的OpenAI兼容API我们无需为每个待测模型单独编写适配代码或管理多个API端点。只需在Taotoken平台创建一个API Key并在其模型广场获取所需模型的唯一标识符如gpt-4o、claude-3-5-sonnet、deepseek-chat等即可通过同一套代码调用它们。测试集与流程定义测试集应包含一系列具有代表性的问题或对话场景可能涵盖事实问答、逻辑推理、创意写作、代码生成、安全合规响应等多个维度。测试流程需要模拟真实的多轮交互即根据模型上一轮的回答自动或按规则生成下一轮的问题。结果收集与分析工具需要精确记录每轮对话的输入、输出、响应时间如response_ms、使用的Token数量等信息。这些数据将输出为结构化的格式如JSON Lines、CSV便于后续进行统计分析、可视化或导入数据库。环境与依赖选择Ubuntu作为运行环境因其在服务器和开发工作站中广泛使用稳定性好且与Python生态兼容性极佳。核心依赖是官方的openaiPython SDK以及用于数据处理和报告生成的常用库如pandas,json。2. 环境准备与Taotoken配置首先确保你的Ubuntu系统已安装Python 3.8或更高版本。可以通过python3 --version命令检查。接着创建一个独立的项目目录并初始化虚拟环境这有助于隔离依赖。mkdir model_qa_evaluator cd model_qa_evaluator python3 -m venv venv source venv/bin/activate安装必要的Python包。我们主要需要openai库来调用Taotoken API同时可以安装pandas和tqdm来辅助数据处理和显示进度。pip install openai pandas tqdm接下来访问Taotoken平台。注册并登录后在控制台的“API密钥”页面创建一个新的密钥。请妥善保存此密钥它将在脚本中作为身份凭证使用。然后前往“模型广场”页面浏览并记录下你计划测试的模型ID。例如你可能对gpt-4o、claude-3-5-sonnet-20241022和qwen-plus感兴趣。这些模型ID将在后续的脚本中直接使用。3. 核心脚本编写与实现我们将编写一个Python脚本其核心是一个测试运行器类。这个类负责加载测试用例、初始化Taotoken客户端、按顺序对每个模型执行多轮对话并收集结果。首先创建一个名为evaluator.py的文件并开始编写代码。第一部分是导入模块和配置常量。import os import json import time from openai import OpenAI from typing import List, Dict, Any import pandas as pd from tqdm import tqdm # 配置 TAOTOKEN_API_KEY os.getenv(TAOTOKEN_API_KEY, your_taotoken_api_key_here) # 建议通过环境变量设置 TAOTOKEN_BASE_URL https://taotoken.net/api TEST_CASES_FILE test_cases.jsonl # 测试用例文件 RESULTS_FILE evaluation_results.jsonl # 结果输出文件 MODELS_TO_TEST [ gpt-4o, claude-3-5-sonnet-20241022, qwen-plus, # 添加更多从Taotoken模型广场获取的模型ID ]重要提示在实际项目中强烈建议将TAOTOKEN_API_KEY通过环境变量传入例如export TAOTOKEN_API_KEYyour_key避免将密钥硬编码在脚本中。接下来定义测试用例的数据结构。一个简单的多轮对话测试用例可以是一个字典列表每个字典代表一轮对话包含roleuser或assistant和content。初始轮次由user开始。我们假设测试用例存储在JSON Lines格式的文件中。然后实现核心的ModelEvaluator类。class ModelEvaluator: def __init__(self, api_key: str, base_url: str): self.client OpenAI( api_keyapi_key, base_urlbase_url, ) def run_single_conversation(self, model: str, messages: List[Dict]) - Dict[str, Any]: 对单个模型运行一轮对话可包含历史消息并返回结果。 start_time time.time() try: response self.client.chat.completions.create( modelmodel, messagesmessages, max_tokens1024, temperature0.7, # 可根据测试需求调整 ) end_time time.time() completion response.choices[0].message usage response.usage return { model: model, input_messages: messages, output_message: completion.content, response_time_ms: round((end_time - start_time) * 1000, 2), input_tokens: usage.prompt_tokens, output_tokens: usage.completion_tokens, total_tokens: usage.total_tokens, finish_reason: response.choices[0].finish_reason, success: True, } except Exception as e: return { model: model, input_messages: messages, output_message: None, response_time_ms: None, input_tokens: None, output_tokens: None, total_tokens: None, finish_reason: str(e), success: False, } def run_multi_turn_test(self, model: str, test_case: List[Dict]) - List[Dict[str, Any]]: 对一个模型执行一个多轮对话测试用例。 conversation_history [] results_per_turn [] for turn in test_case: # 假设test_case中每一轮都是用户输入 conversation_history.append({role: user, content: turn[content]}) turn_result self.run_single_conversation(model, conversation_history.copy()) results_per_turn.append(turn_result) if turn_result[success] and turn_result[output_message]: # 将模型回复加入历史用于下一轮 conversation_history.append({role: assistant, content: turn_result[output_message]}) else: # 如果本轮失败可能终止测试或记录错误 break return results_per_turn def load_test_cases(file_path: str) - List[List[Dict]]: 从JSON Lines文件加载测试用例。 test_cases [] with open(file_path, r, encodingutf-8) as f: for line in f: data json.loads(line.strip()) # 假设每行是一个测试用例包含多轮用户输入列表 test_cases.append([{role: user, content: q} for q in data[questions]]) return test_cases def main(): evaluator ModelEvaluator(TAOTOKEN_API_KEY, TAOTOKEN_BASE_URL) test_cases load_test_cases(TEST_CASES_FILE) all_results [] for model in tqdm(MODELS_TO_TEST, descTesting Models): for case_id, test_case in enumerate(test_cases): case_results evaluator.run_multi_turn_test(model, test_case) for turn_idx, turn_result in enumerate(case_results): record { case_id: case_id, turn_idx: turn_idx, **turn_result # 合并字典 } all_results.append(record) # 保存结果到JSON Lines文件 with open(RESULTS_FILE, w, encodingutf-8) as f: for record in all_results: f.write(json.dumps(record, ensure_asciiFalse) \n) print(f测试完成结果已保存至 {RESULTS_FILE}) # 可选使用pandas进行快速摘要 df pd.DataFrame(all_results) print(df.groupby(model)[[success, response_time_ms, total_tokens]].mean()) if __name__ __main__: main()4. 测试执行与结果分析示例在运行脚本前需要准备测试用例文件test_cases.jsonl。这是一个简单的示例{questions: [请用Python写一个函数判断一个数是否为素数。, 如果输入是负数你的函数会如何处理, 请为这个函数添加文档字符串。]} {questions: [简述牛顿第一定律。, 这个定律在非惯性参考系中是否成立为什么]}运行脚本python evaluator.py脚本将遍历MODELS_TO_TEST列表中的每个模型对每个测试用例执行多轮对话并在控制台显示进度条。测试完成后所有详细结果将保存在evaluation_results.jsonl中。结果文件中的每条记录都包含了模型、测试用例、轮次、输入输出、耗时、Token用量和成功状态等信息。你可以使用Python数据分析库如pandas或可视化工具如matplotlib,seaborn对这些数据进行深入分析。例如可以计算每个模型在所有测试用例上的平均响应时间、成功率、总Token消耗成本结合Taotoken平台的计价规则并对回答内容进行质量评分可引入人工或自动化评分规则。通过这种方式你获得的不再是主观印象而是基于相同测试集和统一接口的客观数据。这些数据能为团队在模型选型、成本预算和性能调优等方面提供坚实的决策依据。整个流程可以集成到持续集成CI系统中定期运行以监控模型服务的稳定性与表现变化。通过上述步骤你可以在Ubuntu环境下快速搭建一个专业的模型自动化测试流水线。Taotoken的统一接入能力简化了多模型调用的复杂性让工程师能够更专注于测试设计与结果分析本身。你可以根据实际需求扩展此工具例如增加更复杂的对话逻辑、集成自动化评分模型、或生成更丰富的图表报告。开始你的模型评估之旅吧访问Taotoken获取API Key并探索更多可用模型。 告别海外账号与网络限制稳定直连全球优质大模型限时半价接入中。 点击领取海量免费额度