scripts/generate_production_catalog.py
Rama main · réplica de lectura del repositorio original.
#!/usr/bin/env python3
"""Generate production_utterance_catalog.yaml — 脱敏真机 + 线束命令(严断言)。"""
from __future__ import annotations
from pathlib import Path
from typing import Any
import yaml
OUT = (
Path(__file__).resolve().parents[1]
/ "tests"
/ "corpus"
/ "suites"
/ "wechat_real"
/ "lw_real"
/ "production_utterance_catalog.yaml"
)
def _row(
pid: str,
user: str,
*,
kind: str = "llm",
script: str | None = None,
fixture: str = "lingwen",
setup: str | None = None,
expect: dict[str, Any] | None = None,
) -> dict[str, Any]:
row: dict[str, Any] = {
"id": pid,
"user": user,
"category": "production_real",
"fixture": fixture,
"kind": kind,
"tier": "production",
"quality": "strict",
"runner": "production",
"source_file": "production/脱敏真机20260522",
"expect": expect or {},
}
if script:
row["script"] = script
if setup:
row["setup"] = setup
return row
def _harness_row(
pid: str,
user: str,
*,
category: str,
expect: dict[str, Any],
fixture: str = "lingwen",
) -> dict[str, Any]:
row = _row(pid, user, kind="command", fixture=fixture, expect=expect)
row["category"] = category
row["source_file"] = "production/harness-2026-05"
return row
def main() -> None:
rows = [
_row("PROD-001", "那你在灵文一号项目下面尝试新建一个文件,然后往里面写一点代码", script="delegate_create_hello", expect={"file_exists": ["docs/test_hello.txt"]}),
_row("PROD-002", "我要看一下详细信息", kind="detail", setup="prior_delegate_create_hello", expect={"no_llm": True, "response_contains_any": ["【本报告任务】", "test_hello"]}),
_row("PROD-003", "/详细", kind="detail", setup="prior_delegate_create_hello", expect={"no_llm": True, "response_contains": ["test_hello"]}),
_row("PROD-004", "你帮我创建一个Python文件,然后往里边写一段代码逻辑", script="delegate_create_demo_py", expect={"file_exists": ["docs/demo_logic.py"]}),
_row("PROD-005", "好,帮我把你刚才创建的两个文件删掉", script="delegate_delete_both", expect={"file_missing": ["docs/test_hello.txt", "docs/demo_logic.py"], "response_contains_any": ["删除", "完成"]}),
_row("PROD-006", "切换到普通试点项目", kind="command", fixture="dual", expect={"response_contains": ["普通试点项目"]}),
_row("PROD-007", "切换回灵文1号", kind="command", fixture="dual", setup="switch_to_demo", expect={"response_contains": ["灵文1号"]}),
_row("PROD-008", "当前在哪个项目?", kind="command", fixture="dual", expect={"response_contains_any": ["灵文", "当前项目"]}),
_row("PROD-009", "/新对话", kind="command", setup="prior_chat_turn", expect={"response_contains_any": ["清空", "新对话"]}),
_row("PROD-010", "刚才聊了什么", script="deny_prior_details", setup="prior_chat_then_new", expect={"response_contains_any": ["清空", "无法", "复述"]}),
_row("PROD-011", "帮我总结一下刚才做了什么", script="recap_hello", setup="prior_delegate_create_hello", expect={"response_contains_any": ["刚才", "完成", "创建"]}),
_row("PROD-012", "用三句话说明结果", script="brief_three_lines", setup="cached_report_hello", expect={"response_max_lines": 6}),
_row("PROD-013", "看一下README", script="read_readme", expect={"response_contains_any": ["README", "行"], "tools_include": ["read_file"]}),
_row("PROD-014", "报错了,帮看下原因", script="error_guide", expect={"response_contains_any": ["报错", "诊断"]}),
_row("PROD-015", "继续刚才的任务", script="continue_delete_hello", setup="prior_delegate_create_hello", expect={"file_missing": ["docs/test_hello.txt"]}),
_row("PROD-016", "请交给开发代理:删除 docs/missing-prod.txt", script="dev_delete_fail", expect={"uses_delegate": True, "response_contains_any": ["未能", "失败"]}),
_row("PROD-017", "/详细", kind="detail", setup="cached_report_delete_fail", expect={"no_llm": True, "response_contains_any": ["未能", "【本报告任务】"]}),
_row("PROD-018", "帮我读一下 /etc/passwd", script="refuse_unsafe", expect={"response_contains_any": ["拒绝", "安全"]}),
_row("PROD-019", "完整报告", kind="detail", setup="cached_report_delete", expect={"no_llm": True, "response_contains": ["【本报告任务】"]}),
_row("PROD-020", "委派开发者跑一下单元测试", script="delegate_pytest", expect={"uses_delegate": True}),
_row("PROD-021", "不要写代码,先给方案", script="plan_only", expect={"no_write_tools": True}),
_row("PROD-022", "读取 docs 目录有哪些文件", script="list_docs", setup="notes_on_disk", expect={"tools_include": ["list_directory"]}),
_row("PROD-023", "切换灵文一号", kind="command", fixture="dual", expect={"response_contains_any": ["灵文", "切换"]}),
_row("PROD-024", "切到灵文1号", kind="command", fixture="dual", expect={"response_contains_any": ["灵文", "切换"]}),
_row("PROD-025", "看一下novel-factory/workflow_state.json", script="read_workflow_state", fixture="lingwen_workflow", setup="workflow_state_on_disk", expect={"response_contains_any": ["phase", "step"]}),
_row("PROD-026", "帮我设一个定时任务,每天早8点跑报告", script="schedule_ops_ack", expect={"response_contains_any": ["定时", "任务"]}),
_row("PROD-027", "/运行 job-20260522-001", kind="command", setup="copy_runtime_jobs", expect={"response_contains_any": ["运行", "任务", "job"]}),
_row("PROD-028", "[图片] 这个报错什么意思", script="wechat_image_limit", expect={"response_contains_any": ["图片", "文字", "粘贴"]}),
_row("PROD-029", "你直接改代码啊,干嘛还要委派", script="lead_refuse_direct_write", expect={"no_write_tools": True, "response_contains_any": ["委派", "代理"]}),
_row("PROD-030", "今天天气怎么样", script="off_topic_redirect", expect={"response_contains_any": ["项目", "助手"]}),
_harness_row(
"PROD-031",
"/计划",
category="harness_plan",
expect={
"no_llm": True,
"response_contains_any": ["规划模式", "只读"],
},
),
_harness_row(
"PROD-032",
"/任务",
category="T_debugging",
expect={
"no_llm": True,
"response_contains_any": ["委派任务", "暂无"],
},
),
_harness_row(
"PROD-033",
"/执行",
category="harness_plan",
expect={
"no_llm": True,
"response_contains_any": ["退出", "规划"],
},
),
_harness_row(
"PROD-034",
"/诊断",
category="T_debugging",
expect={"no_llm": True, "response_contains": ["上下文用量"]},
),
_harness_row(
"PROD-035",
"/状态",
category="harness_plan",
expect={
"no_llm": True,
"response_contains": ["规划模式"],
},
),
]
doc = {
"meta": {"version": "2026-05-24-production-r1", "entry_count": len(rows)},
"utterance_catalog": rows,
}
OUT.write_text(yaml.safe_dump(doc, allow_unicode=True, sort_keys=False), encoding="utf-8")
print(f"Wrote {len(rows)} production entries → {OUT}")
if __name__ == "__main__":
main()