Ctrl K
ComunidadGuías…

scripts/generate_production_catalog.py

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/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()