训练数据评估脚本使用说明
一、评估结构
解析conversations数据,分割成pairs
- Pair 1: system+tools+user -> function_call
- Pair 2: system+tools+user+observation -> function_call
- Pair 3: system+tools+user+observation -> gpt
二、评估指标
2.1 基本统计指标
- total_conversations: 总对话数量
- total_pairs: 总评估对数量
2.2 Pair级别指标
Pair 1 指标
- pair1.total: Pair 1 的总数量
- pair1.accuracy: Pair 1 的准确率
- pair1.precision@1: Pair 1 的工具名称精确匹配率
Pair 2 指标
- pair2.total: Pair 2 的总数量
- pair2.accuracy: Pair 2 的准确率
- pair2.precision@1: Pair 2 的工具名称精确匹配率
- pair2_consider_recall.total: 考虑recall条件的Pair 2数量
- pair2_consider_recall.accuracy: 考虑recall条件的Pair 2准确率
- pair2_consider_recall.precision@1: 考虑recall条件的Pair 2工具名称精确匹配率
Pair 3 指标
- pair3.total: Pair 3 的总数量
- pair3.answer_score: Pair 3 的文本生成质量得分
2.3 Recall指标
- recall_metrics.total_pairs: 参与recall评估的pair总数
- recall_metrics.recall@5_1: recall=1的pair数量
- recall_metrics.recall@5_0: recall=0的pair数量
- recall_metrics.recall_rate: recall率
2.4 总体指标
- overall.total: 总体评估对数量
- overall.accuracy: 总体准确率
- overall.precision@1: 总体工具名称精确匹配率
- overall.answer_score: 总体文本生成质量得分
三、指标说明
3.1 准确率 (Accuracy)
- 计算原理: 对于工具调用pair,比较预测的工具调用与目标工具调用的一致性,包括工具名称和参数匹配
- 评分规则:
- 工具名称匹配: 50%权重
- 参数匹配: 50%权重
- 最终得分范围: 0-1
3.2 精确匹配率 (Precision@1)
- 计算原理: 仅考虑工具名称是否完全匹配
- 评分规则: 工具名称完全匹配得1分,否则得0分
3.3 文本生成质量得分 (Answer Score)
- 计算原理: 使用Gemini-2.5-flash模型评估文本生成的四个维度
- 评估维度:
- 内容准确性 (0-10分)
- 完整性 (0-10分)
- 表达质量 (0-10分)
- 格式一致性 (0-10分)
- 最终得分: 四个维度的平均分除以10,范围0-1
3.4 Recall指标
- 计算原理: 基于Pair 1的预测结果调用检索工具,检查Pair 2的目标工具是否在(调用retrieval_tool得到的)检索结果的前5个中
- 计算条件: 仅在Pair 1的precision@1=1.0且有有效预测query时才计算
- 评分规则: 目标工具在检索结果中得1分,否则得0分
3.5 考虑Recall的指标
- pair2_consider_recall: 仅在recall=1的条件下计算Pair 2的指标
- 意义: 评估在工具检索成功情况下的模型表现
四、运行命令
python data_evaluation.py
五、默认输入输出
5.1 输入文件
- 主要输入:
data/9.17_evaluate_data_top5_final.json- 包含待评估的对话数据,格式为conversations数组
- 每个对话包含system、tools、conversations字段
5.1.1 输入文件格式要求
顶层结构:
[
{
"conversations": [...],
"system": "...",
"tools": "..." // 可选字段
},
...
]
必需字段:
conversations(数组,必需): 对话消息序列- 每个消息对象必须包含:
"from": 字符串,必须是"human"、"function_call"、"observation"、"gpt"之一"value": 字符串,消息内容
- 每个消息对象必须包含:
system(字符串,必需): 系统提示词,可包含<tools>标签
可选字段:
tools(字符串,可选): JSON格式的工具定义,默认为"[]"
5.1.2 消息类型说明
| 消息类型 | from值 | 用途 | 示例 |
|---|---|---|---|
| 用户输入 | "human" |
用户的查询或请求 | {"from": "human", "value": "帮我查询收入数据"} |
| 工具调用 | "function_call" |
AI调用的工具和参数 | {"from": "function_call", "value": "{\"name\":\"tool_name\",\"arguments\":{...}}"} |
| 工具返回 | "observation" |
工具执行的结果 | {"from": "observation", "value": "工具返回的结果数据"} |
| AI回复 | "gpt" |
AI的最终回答 | {"from": "gpt", "value": "基于工具结果的回答"} |
5.1.3 对话序列要求
脚本会按照以下逻辑解析conversations来生成评估对:
Pair 1:
human→function_call- 从
"human"消息开始,寻找紧随其后的"function_call"消息
- 从
Pair 2:
human+observation→function_call- 从
"observation"消息开始,寻找紧随其后的"function_call"消息
- 从
Pair 3:
human+observation→gpt- 从
"observation"消息开始,寻找紧随其后的"gpt"消息
- 从
5.1.4 格式验证
严格程度: 中等严格
- ✅ 必需字段:
conversations、system必须存在且格式正确 - ✅ 字段类型: 必须是正确的数据类型(数组、字符串)
- ✅ 枚举值:
"from"字段必须是预定义的值 - ✅ 数组结构: conversations必须是数组格式
- ⚠️ 可选字段:
tools字段可选,有默认值 - ⚠️ 内容验证: 不验证具体的工具调用内容格式
常见错误:
KeyError: 缺少必需字段conversations或systemTypeError: 字段类型不正确(如conversations不是数组)ValueError:"from"字段值不是预定义的枚举值
5.1.5 完整示例
[
{
"conversations": [
{
"from": "human",
"value": "帮我看下2025年6月到8月各种收入类型的占比情况"
},
{
"from": "function_call",
"value": "{\"name\":\"retrieval_tool\",\"arguments\":{\"query\":\"收入分析\",\"source_filter\":\"toollist\",\"user_id\":136451106,\"top_k\":5}}"
},
{
"from": "observation",
"value": "[{\"name\":\"analyze_revenue_by_type\",\"description\":\"收入分析工具\"}]"
},
{
"from": "function_call",
"value": "{\"name\":\"analyze_revenue_by_type\",\"arguments\":{\"start_date\":\"2025-06-01\",\"end_date\":\"2025-08-31\"}}"
},
{
"from": "observation",
"value": "{\"result\":{\"收入\":\"1,285,893.00\",\"门票\":\"47.1%\",\"交通\":\"50.6%\"}}"
},
{
"from": "gpt",
"value": "根据2025年6月到8月的收入数据分析,各种收入类型的占比情况如下:交通收入占50.6%,门票收入占47.1%..."
}
],
"system": "# 工具\n\n你可以调用一个或多个函数来协助处理用户查询。\n\n在 <tools></tools> XML 标签中提供了可用的函数签名:\n<tools>\n</tools>",
"tools": "[{\"name\":\"retrieval_tool\",\"description\":\"检索工具\"}]"
}
]
从上述示例生成的评估对:
- Pair 1:
system + user查询→retrieval_tool调用 - Pair 2:
system + user查询 + 检索结果→analyze_revenue_by_type调用 - Pair 3:
system + user查询 + 分析结果→最终回答
5.2 输出文件
- 主要输出:
metrics/data_evaluation_results.json- 完整的评估报告,包含详细结果和指标统计
- 实时指标:
metrics/realtime_metrics.json- 实时更新的指标数据,每处理一个评估对就更新
- 日志文件:
metrics/data_evaluation.log- 详细的运行日志,包含评估进度和错误信息
- 断点文件:
metrics/evaluation_checkpoint.json- 支持断点续传的中间状态文件(完成后自动删除)
六、技术特性
6.1 断点续传
- 支持中断后从上次位置继续评估
- 自动保存处理进度到checkpoint文件
- 评估完成后自动清理断点文件
6.2 实时指标更新
- 每处理一个评估对就更新实时指标
- 可随时查看当前评估进度和指标状态
6.3 多模型支持
- 预测模型: Qwen3-8B (通过API调用)
- 评估模型: Gemini-2.5-flash (用于文本生成质量评估)
- 检索工具: 调用retrieval_tool
6.4 容错机制
- API调用重试机制(最多3次)
- 指数退避策略
- 详细的错误日志记录
七、注意事项
- API配置: 确保GEMINI_API_KEY和QWEN_API_URL配置正确
- 网络连接: 需要稳定的网络连接访问外部API服务
- 存储空间: 确保有足够空间存储输出文件和日志
- 运行时间: 完整评估可能需要数小时,建议后台运行
- 数据格式: 输入文件必须严格符合指定的JSON格式
- 确保必需字段
conversations和system存在 conversations必须是数组,每个消息包含"from"和"value"字段"from"字段值必须是"human"、"function_call"、"observation"、"gpt"之一- 建议使用提供的示例文件作为模板
- 确保必需字段
- 对话序列: 确保conversations中的消息序列符合评估逻辑要求
每个
"human"消息后应跟随"function_call"消息每个
"observation"消息后应跟随"function_call"或"gpt"消息