1. 已标注数据集:35 条 JSONL Case
当前不是只靠肉眼观察 Demo,而是把输入、期望字段、负例、数量要求和 URL 抽取要求写成可重复运行的 golden set。
| 数据集 | 数量 | 定位 | 当前使用方式 |
|---|---|---|---|
| v1_golden.jsonl | 14 条 | 文件类稳定回归:PDF、图片、Markdown、公开简历模板。 | 适合本地回归和 CI 前质量检查。 |
| v1_url_golden.jsonl | 20 条 | 真实 URL 专项:个人主页、学术主页、作品集、公开人物资料、非单人页面。 | 默认 skip=true,用于手动或专项 live web 回放。 |
| scoring_smoke.jsonl | 1 条 | 验证 scorer 自身逻辑,确保评分器没有坏。 | 快速 smoke,不代表整体效果。 |
2. 覆盖形态:文件、图片、公开主页和负例空间
数据集覆盖了主链路,但还未达到生产级覆盖。当前重点是先保证评分框架、契约和核心输入形态跑通。
文件类
- 单页 PDF
- 多页 PDF
- 公开 PDF 模板
- Markdown / 纯文本
视觉类
- 图片简历
- 扫描件类输入
- 图片型 PDF 作为目标场景
- 后续补学生证 / 工牌负例
URL 类
- 个人主页
- GitHub Pages 简历
- 学术主页
- 机构 profile / faculty page
边界类
- 非单人实验室页面
- 公开人物资料
- docx 样本已纳入但暂未默认通过
- 防爬 / 验证码需专项扩充
当前覆盖重心
3. 评分公式:不只看 JSON 是否生成
评分器会检查字段召回、负例控制、数量覆盖和同一履历项的组合匹配。URL 还会单独评分前置抽取质量。
结构化解析默认分
score =
field_recall * 0.70
+ negative_precision * 0.20
+ count_coverage * 0.10
pass_threshold = 0.85
带 item_groups 的严格分
score =
field_recall * 0.50
+ item_groups * 0.20
+ negative_precision * 0.20
+ count_coverage * 0.10
前置抽取分
extraction_score =
required_snippets * 0.50
+ noise_control * 0.20
+ page_coverage * 0.20
+ min_chars_passed * 0.10
聚合总分
overall_score =
extraction_score * 0.30
+ structured_score * 0.70
| 断言类型 | 评什么 | 例子 |
|---|---|---|
| expected.fields | 关键字段是否被抽到。 | 姓名、学校、公司、职位、项目、奖项。 |
| negative_fields | 不该出现的错误是否被避免。 | 没有学生会经历时,不应编造学生会。 |
| minimum_counts | 履历项数量是否达到最低覆盖。 | 多页简历至少抽出 4 条 resume_items。 |
| item_groups | 同一条履历项内部字段是否组合正确。 | resume_type=2 + 学校 + 专业 + 学位必须在同一项。 |
| extraction | URL 或文档抽取正文是否可靠。 | 必须包含关键片段,不能含验证码或污染文本。 |
4. 评测流水线:先验数据质量,再跑解析,再归因失败
前置抽取问题不要误判成模型问题;结构化问题也不要混进网页抓取。当前工具链按阶段拆开,再聚合。
数据集门禁
检查 case id、样本文件、字段深度、live web skip 状态。
生成输出
使用 parser_v1 或外部方案生成 raw_outputs。
前置评分
检查正文关键片段、噪音、页覆盖和最小长度。
结构化评分
检查 JSON 契约、字段、负例、数量和履历项组合。
报告归因
输出通过率、失败明细、耗时、token、成本和错误阶段。
5. 报告口径:质量、耗时、成本一起看
现有报告已经能支持横向比较不同模型、Fast / Full、thinking 开关和 URL 抓取方案,但样本规模还属于阶段性验证。
质量指标
- pass_rate
- average_score
- field recall
- negative precision
- page2 recall
性能指标
- latency_ms.total
- latency_ms.extraction
- latency_ms.structured
- p50 / p90
- error_stage
成本指标
- prompt_tokens
- completion_tokens
- total_tokens
- estimated_cny
- model / method 分桶
6. 当前版本评测结果
这里记录 2026-06-22 已实际运行的验证结果。更完整的中文报告见 docs/evaluation-current.md。
resume-lab 部署包
55 passed,耗时 34.86s。
- 覆盖静态页、健康检查、内嵌解析运行时。
- 确认 `/evaluation.html` 可作为演示页面资产。
agent-tools 履历测试
142 passed,耗时 1.74s。
- 覆盖履历 parser、service、URL cleaner/fetcher、评测工具。
- 评测报告输出已中文化。
数据集质量门禁
34 cases,0 errors,0 warnings。
- 检查主 golden set 的结构、引用文件和标注质量。
- 不调用模型,适合作为快速门禁。
| 历史 URL 5 Case 横评 | 通过 | 通过率 | 平均总分 | 平均耗时 |
|---|---|---|---|---|
| ark_official_mini_260428_5url/aggregate | 5/5 | 100% | 0.9950 | 33.6s |
| ark_official_260428_5url/aggregate | 5/5 | 100% | 0.9950 | 45.2s |
| ark_official_pro_260215_5url/aggregate | 5/5 | 100% | 0.9827 | 131.4s |
| thinking_enabled/aggregate | 4/5 | 80% | 0.9705 | 42.2s |
7. 当前短板:框架已有,样本仍需扩大
这部分建议汇报时主动说明,避免把阶段性评测包装成生产级覆盖。
已具备
- 自动化 JSONL golden set。
- 字段、负例、数量和 item group 评分。
- 前置抽取与结构化解析分开评估。
- 耗时、token、成本和错误阶段可汇总。
- URL live web 默认跳过稳定 CI,避免网络抖动污染回归。
仍不足
- 文件类 golden set 只有 14 条。
- URL case 多数是手动专项,不适合默认 CI。
- 非履历负例、学生证、工牌、验证码、防爬页还需补成稳定样本。
- docx 已有样本但当前仍属于待补齐链路。
- 真实生产数据还需要脱敏、授权和人工标注流程。
8. 未来持续评估:把测试发现变成回归资产
后续关键不是临时跑几个 Demo,而是每次发现问题都转成可重复评分的 case。
补学生证、工牌、无关 PDF、空白图片、图片型 PDF、百度百科/Wikipedia、个人主页和长正文样本。
Demo 发现问题后记录输入、期望、错误输出和修复目标,补进 JSONL,修复后进入固定回归。
固定跟踪 P0 字段召回、非履历拦截、URL 成功率、JSON 失败率、p90 延迟和单次成本。
建议门禁
| 指标 | 建议目标 | 用途 |
|---|---|---|
| 总通过率 | >= 80% | 判断当前版本是否可进入人工验收。 |
| P0 字段召回 | >= 90% | 保护名片初始化关键字段。 |
| 负例控制 | >= 95% | 避免非履历误解析和模型编造。 |
| JSON / 运行失败率 | <= 5% | 控制稳定性和模型截断风险。 |
| 多页后页召回 | >= 75% | 避免只抽第一页造成履历遗漏。 |
9. 文件和命令入口
真正效果评测资产目前主要在 agent-tools 仓库;resume-lab 负责演示和部署体验。以下路径均以 agent-tools 仓库根目录为准。
evals/modules/resume/datasets/v1_golden.jsonl文件类主 golden set。evals/modules/resume/datasets/v1_url_golden.jsonlURL / 公开主页专项 golden set。evals/modules/resume/tools/quality_gate.py数据集质量门禁,不调用模型。evals/modules/resume/tools/resume_eval.py结构化解析评分器。evals/modules/resume/tools/extraction_eval.py前置抽取质量评分器。evals/modules/resume/tools/aggregated_eval.py前置分和结构化分聚合报告。常用命令
# 在 agent-tools 仓库根目录执行
uv run python evals/modules/resume/tools/quality_gate.py
uv run python evals/modules/resume/tools/resume_eval.py \
--dataset evals/modules/resume/datasets/scoring_smoke.jsonl \
--method dataset \
--out-dir evals/modules/resume/reports/smoke
uv run python evals/modules/resume/tools/resume_eval.py \
--dataset evals/modules/resume/datasets/v1_golden.jsonl \
--method parser_v1 \
--out-dir evals/modules/resume/reports/parser_v1_manual