## 诊断流程样例 ### 入口 ```bash cd /Users/bytedance/Documents/job-bu/data-analysis-workspace python tools/fornax_ark_preflight.py \ --backend fornax \ --config configs/session_labeling.yaml \ --sample data/session_sample_100.jsonl \ --limit 3 ``` ### 输入 | 输入 | 来源 | 用途 | | --- | --- | --- | | `ARK_API_KEY` | `.env` 或环境变量 | 校验当前 key 是否能访问目标 Ark endpoint | | `endpoint_id/model/project` | 标注配置文件 | 检查 endpoint 是否存在、是否有权限、是否被暂停 | | `prompt_id/evaluator_id` | Fornax 链接或配置 | 区分资产读取与真实 evaluator 执行 | | sample records | 待标注 CSV/JSONL 前 1-3 条 | 验证字段名、schema 和输出解析 | ### 步骤 1. 读取配置并打印脱敏后的后端摘要:backend、endpoint/evaluator、输入字段、期望输出字段。 2. 如果是 Ark:先做 endpoint/key 可见性检查,再跑 1 条 chat/completions dry-run;遇到 `InvalidEndpointOrModel.NotFound`、无权限、Safe Experience Mode 上限时直接 fail-fast。 3. 如果是 Fornax:先 `fornax-cli prompt get-by-id` 验证资产存在,但不把它当作推理成功;随后调用 evaluator,并强制把样本包装为 `input_data.input_fields.<key>`。 4. 对返回内容做 schema 校验:必须能解析成标注 JSON,且关键字段非空。 5. 对 401/JWT 失败执行一次登录态刷新或提示 `fornax-cli auth login`,刷新后重试 1 次;仍失败则停止,不进入全量。 6. 写出 `out/preflight/<run_id>.json`,包含 `ok`、`blocked_reason`、`retryable`、`next_action`。 ### 成功信号 ```json { "ok": true, "backend": "fornax", "dry_run_count": 3, "schema_valid": true, "resume_policy": "only_status_ok_is_done" } ``` ### 失败信号 ```json { "ok": false, "blocked_reason": "fornax_jwt_expired", "retryable": true, "next_action": "refresh fornax login, then rerun preflight; do not start full batch" } ``` ### 预期落地效果 批量标注不再从 5279 条全量开始试错,而是在 1-3 条 dry-run 阶段暴露 key 不一致、endpoint 暂停、Fornax 入参协议错误或 JWT 过期。长跑中断后也只把 `status=ok` 当作完成,失败行可自动重试或人工处理。