"""
HTML 提取工具对比评估 - Dataset 批量执行示例
这个示例展示了如何使用 Executor 批量评估 JSONL 数据集中的 HTML 提取工具对比任务。
特点:
1. 支持从 JSONL 文件批量读取数据
2. 使用 LLMHtmlExtractCompareV2 进行评估
3. 自动生成评估报告
4. 支持保存好样本和坏样本
数据格式要求:
{
"data_id": "唯一标识",
"content": "工具A提取的文本",
"magic_md": "工具B提取的文本",
"language": "zh" 或 "en"
}
使用方法:
python examples/compare/dataset_html_extract_compare_evaluation.py
"""
import os
from pathlib import Path
from dingo.config.input_args import InputArgs
from dingo.exec.base import Executor
# 获取项目根目录
PROJECT_ROOT = Path(__file__).parent.parent.parent
# API 配置
OPENAI_MODEL = 'deepseek-chat'
OPENAI_URL = os.getenv("OPENAI_BASE_URL")
OPENAI_KEY = os.getenv("OPENAI_API_KEY")
common_config = {
"model": OPENAI_MODEL,
"key": OPENAI_KEY,
"api_url": OPENAI_URL,
}
def evaluate_html_extract_compare_dataset():
"""
批量评估 HTML 提取工具对比数据集
数据集格式:
{"data_id": "001", "content": "工具A文本", "magic_md": "工具B文本", "language": "zh"}
"""
print("=== HTML Extract Compare Dataset Evaluation ===")
print(f"使用模型: {OPENAI_MODEL}")
print(f"API URL: {OPENAI_URL}")
print()
# 配置参数
input_data = {
"task_name": "html_extract_compare_v2_evaluation",
"input_path": str(PROJECT_ROOT / "test/data/html_extract_compare_test.jsonl"),
"output_path": "output/html_extract_compare_evaluation/",
# "log_level": "INFO",
# 数据集配置
"dataset": {
"source": "local", # 本地数据源
"format": "jsonl", # JSONL 格式
},
# 执行器配置
"executor": {
"max_workers": 4, # 并发数
"batch_size": 1, # 批次大小
"result_save": {
"bad": True, # 保存工具B更好的样本(eval_status=True)
"good": True # 保存工具A更好或相同的样本
}
},
"evaluator": [
{
"fields": {"id": "data_id", "prompt": "content", "content": "magic_md"},
"evals": [
{"name": "LLMHtmlExtractCompareV2", "config": common_config},
]
}
]
}
# 创建 InputArgs 并执行
input_args = InputArgs(**input_data)
executor = Executor.exec_map["local"](input_args)
print("开始执行评估...")
result = executor.execute()
# 打印结果
print("\n" + "=" * 60)
print("评估完成!")
print("=" * 60)
print(f"任务名称: {result.task_name}")
# print(f"评估组: {result.eval_group}")
print(f"总样本数: {result.total}")
print(f"工具B更好的样本数: {result.num_bad} ")
print(f"工具A更好或相同: {result.num_good} ")
print(f"\n输出路径: {result.output_path}")
# # 打印详细统计
# if hasattr(result, 'type_count') and result.type_count:
# print("\n详细统计:")
# for eval_type, count in result.type_count.items():
# print(f" - {eval_type}: {count}")
#
# print("=" * 60)
return result
if __name__ == "__main__":
evaluate_html_extract_compare_dataset()