# 2026-05-15 Agent健身房复盘 一句话概括:**这次发现的不是已经自动修复的问题,而是 5 类以后会反复浪费时间的操作摩擦 / 工具缺口。** | 优先级 | 发现的问题 | 真实含义 | 计划怎么解决 | | --- | --- | --- | --- | | 1 | 大批量 Ark 打标靠人工盯日志和手动降并发 | 一旦并发过高就会产生大批 429/空响应;如果没有自动分类、补跑和闭合检查,2 万级任务会反复消耗几十分钟人工监控。 | 做 `ark_batch_doctor.py`:preflight 估 token/并发,watch 分类 429/timeout/schema,repair 只补失败行,finalize 校验全量闭合。 | | 2 | 风神导出的字段、粒度和参评口径每次都要重新确认 | 字段名、指标聚合和日期覆盖不是稳定常识;昨天就出现了缺日期和 0.5 解决率这种边界,直接影响后续打标和解决率口径。 | 做 `aeolus_field_export_doctor.py` + `aeolus_dataset_fields.yml`:导出后检查必需字段、日期断档、session 粒度和指标分布。 | | 3 | 客服知识库转 skill 依赖临时抓取、临时口径和手工校验 | 同一类任务昨天生成了 130、150、261 个 skill;如果没有源验证、scope audit 和 validator,口径分歧或 frontmatter 小错误会被放大。 | 做 `kefu-doc-skillizer` skill:固定知识库文档清单、富文本解析、列映射、scope_decision、SKILL.md 生成和 validator 报告。 | | 4 | 浏览器扩展上架流程容易在登录、素材、隐私和提交确认之间反复卡住 | Viva 上架不是一次点击上传,而是跨 Chrome/Edge、账号验证、素材尺寸、隐私声明和最终发布确认的长状态流。 | 做 `browser-extension-store-submit` skill + `store-submission/checklist.json`,把 release zip、素材、权限、登录 handoff、发布确认做成状态机。 | | 5 | 召回 Top 知识从消息级导出补到 session 表时容易改坏原始粒度 | 用户要的是风神原始 JSON 证据;如果 agent 把多行召回拼接成整理文本,后续召回质量分析会失去可追溯性。 | 做 `check_retrieval_topk_grain.py`:补 Top1/2/3 时逐字保留风神原始字段,阻止 `[1][2][3]` 拼接和字段重命名。 | ## 下一步 | 顺序 | 先做什么 | 为什么 | | --- | --- | --- | | 1 | 先做 Ark 批量打标限流自愈器 | 昨天 2.7 万 session 打标已经暴露 5,745 条 429 失败;这是最高频、最高耗时的数分瓶颈。 | | 2 | 再做风神取数口径验收器 | 它是打标前置条件,可以防止字段、日期、粒度和指标口径错了还继续跑模型。 | | 3 | 随后沉淀客服知识库 Skill 化流水线 | 昨天已经进入百级 skill 批量生成,必须把口径和 validator 固化,避免每批重新解释。 | | 4 | 最后补发布状态机和召回 Top 保真检查 | 前者减少长 UI 上架任务的交接成本,后者防止小表格交付里把原始证据改坏。 | ## 一、候选详情 ### 1.1 Ark批量打标限流自愈器 | 字段 | 内容 | | --- | --- | | id | `ark-batch-labeling-autotune` | | 类型 | 诊断工具 | | 风险 | medium | | 摘要 | 这个主题有效,不是噪音。片段显示同一批 Ark 打标在高并发下出现大规模 429 TPM 限流,但通过降并发、只补失败行、截断长原声和人工兜底,最终把 stage1/stage2 都收敛到无缺口结果。适合沉淀成一个批量打标运行前/运行中/运行后的诊断工具,减少靠人工反复观察日志和手动调参。 | 计划改动: - 新增工具入口:在 `data-analysis-workspace/tools/ark_batch_doctor.py` 增加 CLI,支持 `doctor preflight|watch|repair|finalize --run-dir <dir> --raw <raw.jsonl|csv> --config <yaml>`;也可以在现有 Ark 批处理脚本里暴露 `--doctor` 入口。 - 输入来源:读取批处理配置、raw/result jsonl、错误日志、每行 token 估算、stage 定义和已有 clean/finalize 输出;核心检查包括并发、平均/分位 token、429/timeout/empty_response/schema_error 分类、ok_rows/error_rows 是否与输入总数闭合。 - 成功/失败信号:成功信号是 `ok_rows + accepted_override_rows == total_rows`、429 比例低于阈值、clean 逻辑保留任一成功记录且没有后续 timeout 覆盖成功;失败信号是 429 集中爆发、同一 row 多次失败、empty response 残留、finalize 后仍有缺口。 - 建议落地路径:先接入商品域 v31/stage1/stage2 的批处理目录,生成 `doctor_report.md`、`repair_plan.json` 和 `only_errors_input.csv`;按 128 -> 96 -> 48 -> 24 自动降并发,必要时触发文本截断和人工 override 清单。 ### 1.2 风神取数口径验收器 | 字段 | 内容 | | --- | --- | | id | `aeolus-field-export-doctor` | | 类型 | 诊断工具 | | 风险 | medium | | 摘要 | 该主题有明确价值:片段显示用户已经从记录 Aeolus 数据集入口推进到字段说明、日期字段、session id、参评口径和粒度确认。真实导出还暴露了日期断档、唯一 session 数和人工工单解决率非二值等问题,适合沉淀成导出后必跑的口径验收工具。 | 计划改动: - 在 `/Users/bytedance/Documents/job-bu/data-analysis-workspace/tools/aeolus_field_export_doctor.py` 新增 CLI 工具入口:`python tools/aeolus_field_export_doctor.py --dataset <dataset_key> --file <csv_or_xlsx> --date-start <YYYY-MM-DD> --date-end <YYYY-MM-DD>`;输入来源为风神导出的 CSV/XLSX 和字段说明表。 - 把 `references/dataset_fields.md` 拆出或同步生成 `/Users/bytedance/Documents/job-bu/data-analysis-workspace/references/aeolus_dataset_fields.yml`:每个 dataset 声明日期字段、session id、文本字段、参评/解决率指标、预期维度、聚合方式、允许取值和是否可为空。 - 核心检查步骤固定为:读取导出 schema;校验必需字段存在;检查 `p_date` 日期覆盖和断档;按 `main_session_id` 统计唯一数与重复倍数;检查是否被 `原声/进线渠道` 等维度放大;用 `人工工单解决率` 非 NaN 识别参评,并输出 0/1/0.5/NaN 分布。 - 成功/失败信号和落地路径:成功时输出 `required_fields_ok/date_coverage_ok/grain_ok/metric_distribution_ok`、唯一 session 数和样例;失败时列出缺字段、断档日期、异常粒度或指标值并阻止进入下游打标。把入口写进风神 browseUse skill 与数分 skill 的 `SKILL.md`,规定每次 Aeolus 导出后先跑 doctor。 ### 1.3 客服知识库Skill化流水线 | 字段 | 内容 | | --- | --- | | id | `kefu-doc-skillization-pipeline` | | 类型 | 工具升级 | | 风险 | medium | | 摘要 | 这个主题有效,不是噪音。片段显示用户已经多次把客服知识库、wiki 或 knowledgeId 文档批量转成 SKILL.md,过程中反复遇到源页面失效、浏览器抓取不稳定、口径范围分歧和 YAML/frontmatter 校验问题,适合沉淀成可复用流水线。 | 计划改动: - 新增 skill:`/Users/bytedance/.codex/skills/kefu-doc-skillizer/SKILL.md`,定义从 kefu knowledgeId/wiki 文档到 SKILL.md 的标准流程:输入清单、源验证优先级、字段拼接规则、输出目录、校验和审计产物。 - 新增脚本:`/Users/bytedance/.codex/skills/kefu-doc-skillizer/scripts/extract_skill_blocks.py`,支持读取 `.xlsx/.csv` 清单和本地富文本 HTML,把前两列合成 `description`,后两列合成正文处理内容,并输出 `skills/<domain>/<slug>/SKILL.md` 和 `manifest.generated.csv`。 - 新增脚本:`/Users/bytedance/.codex/skills/kefu-doc-skillizer/scripts/validate_skill_pack.py`,检查 YAML/frontmatter 合法性、description 长度与特殊字符转义、正文原文保留、重复 slug、空 skill、source_url/knowledgeId 缺失,并生成 `validation_report.json`;遇到 `<=` 等 YAML 风险只修 frontmatter,不改正文原文。 - 更新 `/Users/bytedance/Documents/job-bu/AGENTS.md` 的知识库来源约定:客服知识库 skill 化任务默认先用本地富文本 HTML 做结构化拆分,再用当前浏览器活页或 Edge URL 做抽样/逐个验证;若 wiki、本地旧清单和业务窄口径冲突,必须输出 `scope_decision.md` 记录采用口径和被排除文档。 ### 1.4 浏览器扩展上架状态机 | 字段 | 内容 | | --- | --- | | id | `browser-extension-store-state-machine` | | 类型 | 流程模式 | | 风险 | medium | | 摘要 | 这个主题有明确价值:片段不是单点故障,而是一次浏览器扩展上架过程中的多阶段状态流,包括 fork 改造、权限收敛、打包、Chrome/Edge 登录验证、资料补齐、发布确认和审核等待。可沉淀为一套状态机式 checklist,避免 agent 在商店 UI、登录 handoff、权限审核和提交确认之间反复失焦。 | 计划改动: - 在 `/Users/bytedance/Documents/product-bu/AGENTS.md` 增加“浏览器扩展上架默认流程”:先做 manifest 权限收敛和隐私政策,再生成 release zip,之后按 Chrome Web Store 与 Edge Partner Center 两条状态流分别处理,并把“提交/发布前必须等待用户明确确认”写成硬规则。 - 新增 workspace skill:`/Users/bytedance/Documents/product-bu/.codex/skills/browser-extension-store-submit/SKILL.md`,覆盖入口条件、Chrome/Edge 上传步骤、登录 handoff 保留标签页策略、资料项检查、截图/icon 尺寸要求、提交后 Pending review 记录方式。 - 在扩展项目内新增 `store-submission/state-machine.md` 和 `store-submission/checklist.json`:状态包括 `source_forked`、`permissions_sanitized`、`zip_built`、`listing_assets_ready`、`chrome_auth_waiting`、`edge_auth_waiting`、`store_fields_complete`、`user_publish_confirmed`、`submitted_pending_review`、`review_blocked`;每个状态记录必填证据、下一步和阻塞信号。 - 给打包脚本增加轻量 preflight,例如 `scripts/store_preflight.py`:读取 `manifest.json`、release zip、privacy/listing 文案和 assets,检查 host_permissions、localhost/Anki 残留权限、300x300 图标、1280x800/640x400 截图、隐私政策文件是否存在,并输出 `PASS/WARN/BLOCKED`。 ### 1.5 召回Top知识粒度保真检查 | 字段 | 内容 | | --- | --- | | id | `retrieval-topk-grain-guard` | | 类型 | 诊断工具 | | 风险 | low | | 摘要 | 这个主题有效,核心问题是风神召回 Top1/2/3 字段来自消息级导出,不能在 session 维度做拼接聚合。错误聚合会把原始 JSON 证据改写成带 [1][2][3] 前缀的二次文本,影响后续判断召回是否命中真实知识。 | 计划改动: - 新增工具入口 `/Users/bytedance/Documents/job-bu/data-analysis-workspace/tools/check_retrieval_topk_grain.py`,CLI 形态为 `python check_retrieval_topk_grain.py --case-file <case.xlsx> --retrieval-export <fengshen.xlsx|csv> --session-col 智能会话id --top-cols 标注-知识Top1 标注-知识Top2 标注-知识Top3 --out <report.xlsx>`。 - 输入来源固定为两类:一是待补召回信息的 case 表,必须包含 `智能会话id` 和对话原文;二是风神原始导出表,允许消息级多行,但 Top1/Top2/Top3 字段必须以原始单元格文本读入,不做 split、join、dedupe 拼接。 - 核心检查步骤:先统计 case 行数、唯一 session 数、风神导出消息行数和重复 session 分布;再为每个 session 选取第一条 Top1/2/3 任一非空的原始记录;随后检查 Top 字段是否被加过 `[1]`、`[2]`、`[3]` 这类聚合前缀,是否仍像 JSON/原始结构,最后输出抽样 diff 和异常 session 清单。 - 成功信号:输出行数等于 case 行数,唯一 `智能会话id` 不丢失,Top1/2/3 列名保持原名,单元格值与风神某一条原始记录逐字一致;失败信号:同一字段出现多条拼接、`[n]` 前缀、JSON 被格式化成说明文本、输出唯一 session 数和 case 不一致。建议落地为 `data-analysis-workspace` 的通用诊断脚本,并在 `/Users/bytedance/Documents/job-bu/AGENTS.md` 增加一条召回字段保真规则。 ## 二、证据详情 ### 2.1 Ark批量打标限流自愈器 | session | cwd | snippet | | --- | --- | --- | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | 人工侧打标被升级成两步法:先在近30天 2.7 万人工参评 session 里筛商品域,再只对商品域继续打 v31 二/三/四级标签。 | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | stage1 全量主跑结束后,128 并发下后段出现 21,449 条成功、5,745 条失败;错误基本都是 Ark TPM 限流 429,不是 prompt/schema 问题。 | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | agent 降到 48 并发只补失败行,最后剩两条模型空响应,人工 override 为非商品域,保证 stage1 全量无缺口。 | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | stage2 先用 48 并发并截断原声到 4,500 字符,后续升到 96 并发;9,195 条全部成功后生成 clean、汇总 Excel、标签汇总和代表 case。 | ### 2.2 风神取数口径验收器 | session | cwd | snippet | | --- | --- | --- | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | 用户追问 skill 里每个数据集是不是应该有字段说明表;agent 将字段说明拆到 references/dataset_fields.md,并要求取数前确认日期字段、session id、参评/是否解决字段、文本字段、粒度。 | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | 截图口径被提炼为:维度 p_date / 原声 / main_session_id / 进线渠道,指标聚合(人工工单解决率);参评识别不是找原始是否解决字段,而是人工工单解决率不为非数。 | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | 近30天导出成功后校验发现 27,276 个唯一 main_session_id,2026-05-12 无记录,人工工单解决率出现 6 条 0.5,说明该指标不是纯二值字段。 | | `019e2a96-05a5-7633-a6eb-7fdcb8278ae5` | `~/Documents/job-bu` | 用户要求新建风神 browseUse skill,并把离线打标/人工客服原声、智能商服/抖小来的 Aeolus 数据集入口记录到数分 skill。 | ### 2.3 客服知识库Skill化流水线 | session | cwd | snippet | | --- | --- | --- | | `019e2ac2-ebe0-7221-ae86-0893808a34a8` | `~/Documents/job-bu` | 用户要求从 kefu knowledgeId 文档表格里抽取 n 个 SKILL.md:前两列合成描述,后两列合成处理内容。 | | `019e2ac2-ebe0-7221-ae86-0893808a34a8` | `~/Documents/job-bu` | 浏览器自动抓取没拿到新 block:受控 debug Chrome 没在跑,旧快照失效;最终用当前 Edge 页面作活体验证,结构化拆分仍优先用本地富文本 HTML。 | | `019e2ac2-ebe0-7221-ae86-0893808a34a8` | `~/Documents/job-bu` | 首篇文档生成 130 个 SKILL.md,validator 抓到第112个 description 原文含 <=,只改 frontmatter 描述、正文原文保留,最终 failed=0。 | | `019e2ac2-ebe0-7221-ae86-0893808a34a8` | `~/Documents/job-bu` | 后续商品域 skill 化发生口径分歧:本地旧清单 20 篇、wiki 第三部分 44 篇、窄口径商品管理/商家商品 22 篇;最终按窄口径逐个用 Edge 打开 22 个 URL,收拢/生成 261 个 SKILL.md。 | ### 2.4 浏览器扩展上架状态机 | session | cwd | snippet | | --- | --- | --- | | `019e29c7-e669-77b3-958b-109eb04e9559` | `~/Documents/product-bu` | Viva 新插件先从 anki-local-extension fork 到 web-review-extension,去掉 Anki/localhost 权限,生成 release zip、商店资料和隐私政策。 | | `019e29c7-e669-77b3-958b-109eb04e9559` | `~/Documents/product-bu` | Chrome/Edge 上传阶段多次卡在登录验证:Chrome 是 Google passkey,Edge 是 Microsoft Partner Center 登录;agent 反复轮询并保留 handoff 标签页。 | | `019e29c7-e669-77b3-958b-109eb04e9559` | `~/Documents/product-bu` | Edge 包校验通过后还要补可用性、属性、Store listing、300x300 图标、1280x800 或 640x400 截图,并在点击发布前等待用户明确确认。 | | `019e29c7-e669-77b3-958b-109eb04e9559` | `~/Documents/product-bu` | Chrome 后台脚本读取受限,改用 Computer Use 视觉操作;最终补齐 listing、Privacy、Distribution,提交后状态为 Pending review,因 host_permissions 可能更深审核。 | ### 2.5 召回Top知识粒度保真检查 | session | cwd | snippet | | --- | --- | --- | | `019e2ada-1d24-72f1-9be7-5e3ed2a348dc` | `~/Documents/job-bu` | 用户要求把价格上下限咨询 case 导出,并用智能会话 id 去风神反查当时召回的 top1/2/3 参考知识。 | | `019e2ada-1d24-72f1-9be7-5e3ed2a348dc` | `~/Documents/job-bu` | agent 找到本地风神导出字段 智能会话id + 标注-知识Top1/2/3,但源表是消息级,同一会话可能有多行,于是先按 session 聚合去重汇总。 | | `019e2ada-1d24-72f1-9be7-5e3ed2a348dc` | `~/Documents/job-bu` | 用户指出原始字段不应该被聚合成每个字段三条,应该保持风神原始 JSON 形态;agent 承认处理方式不对,改为每个智能会话 id 取第一条 Top1/2/3 任一非空原始记录。 | | `019e2ada-1d24-72f1-9be7-5e3ed2a348dc` | `~/Documents/job-bu` | v2 Excel 校验为 242 行、242 个唯一智能会话id,列名恢复为 智能会话id / 对话原文 / 标注-知识Top1 / 标注-知识Top2 / 标注-知识Top3,没有旧版 [1][2][3] 拼接前缀。 |