SUNDOWNER框架说明

本页完整保留 2026-09-06 首批实例。实现状态与当前架构可能不同,当前说明见Sundowner 首页。

本页保留首批运行的框架说明与示例。当前模块进展见架构与流程。协议示例中的实际链接与对象标识已替换。

关于 Sundowner

数据取自最新批次 Sundowner #1 · 评测日 2026-09-06 · 评测集 Lark Agent Bench V4.1

Sundowner 是一套面向企业协作场景的 Team Agent 评测系统。它把一份评测集在真实的协作平台里搭成一家隔离的虚构公司,让被测 Agent 以正式成员身份进群工作,由导演逐题投放任务,由判官从群消息、文档与多维表格里取证判分,最后把每一题的证据与分数汇成这份结果页。

本页解释它的框架、执行链路、当前进度、首个批次的运行过程,以及评测结果分别回到评测集、产品与工程三条线上的用法。

一 整体框架

系统分五层。评测集层保存题目、铺底物料与虚构同事的设定,原文一字不动,内容哈希进入批次版本标识。编译层把自然语言题面翻译成可执行脚本,包括世界剧本与按群切分的执行包,并逐字校验题面没有被改写。执行层负责铺世界、请被测入场、逐题投放与观察,虚构同事的条件应答是否发出由判官实时判定。判定层从题末话题、文档全文与表格快照取证,主判逐条给出得分点判定与证据引文,独立复判在不看主判结论的前提下再判一遍,计分器按评测集自带的打分协议出分。呈现层就是本站,从首页到题详情逐级下钻,每条得分点都能回到原始证据。

三条设计原则贯穿各层。一,评测集是唯一真源,框架只翻译不改写,题面与评分要点的任何改动都会让哈希变化并生成新的评测集版本。二,每一环的产物都落盘并可复核,执行记录、观察回读、判官决策、证据文件与判定结果各有位置。三,批次是核心单位,一个批次等于一份评测集版本、一份剧本实例、一套新建的隔离世界、一只新建的被测 Agent 与一个评测日。

评测集层 题卡与评分要点铺底物料母本虚构同事设定卡 原文不动,哈希进版本标识 编译层 世界剧本执行包(按群)逐字校验与 lint 自然语言题面 → 可执行步骤 执行层 铺世界 · 入场导演逐题投放条件应答判定 真实协作平台内运行 判定层 取证器主判 · 独立复判计分器 每条得分点带证据引文 呈现层 首页 · 卷宗下钻 · 题卡题详情 · 时间线 本站

二 实现与逻辑

一个批次从评测集导出到结果页共经过十一个环节。下图每个环节标注它的产物与本批实际计数,全部取自这一批的执行记录、导演日志与判定结果。

01 评测集导出 94 题 · 47 份铺底 · 14 位虚构同事 哈希 2a313eb34fbf 02 编译与校验 预置 186 · 入场 29 · 评测 866 步 题面逐字一致,lint 通过 03 铺世界 186 / 186 步 13 群 · 17 文档 · 8 表格 · 106 条铺底 04 被测入场 30 / 30 步 25 条授权 · 入群 · 连通性探测 05 导演逐题投放 351 / 351 步 114 条刺激 · 208 次放行判定 06 条件应答判定 33 份条件应答决策 触发 15 · 未触发 18 07 取证 1687 个证据文件 209 个题末快照目录 08 主判 94 份判定 471 条得分点 09 独立复判 94 份复判 10 出分 94 份题判定 + 批次汇总 题均 37% · 剧情线均值 35% 11 结果页 首页 · 卷宗 · 下钻 · 题卡 · 题详情 · 时间线 本站

导演循环是执行层的核心。每题投放后,导演按话题观察被测的回复,见到实质回复才放行下一步。题内若有虚构同事的条件应答,导演把条件文本与被测的新消息交给判官判定,判定为触发时由对应演员账号发出台词。题末经过一段静默门确认话题不再变化,再拉取话题全量、相关文档全文与表格快照作为证据,并生成判官模板。主判与独立复判都只看这些证据文件,不看被测的运行日志。

计分按评测集自带的协议执行。单题得分等于命中的必选得分点数减去触发的扣分数,再除以必选总数,触发任一一票否决整题记零分。标为交付门的得分点未命中时,该题全部结果类得分点按未命中计。批次层面给两个数,题均得分是各题得分的算术平均,剧情线均值是先按剧情线取均值再平均,两者的差反映失分是否集中在少数剧情线。

三 协议与转译层

转译层把评测集多维表格里的自然语言翻译成可执行步骤,全程确定性,没有模型参与。它分五步。第一步映射,把中文人名、群名与文档编号对应到演员账号、群键与物料键。第二步解析,从题面与执行说明里拆出提问位置、提问人、各轮台词,以及带触发条件的虚构同事应答。第三步渲染,把相对日期占位换成评测日下的真实日期,星期词按规则改写。第四步修正表,对原文里少数抽取歧义按题号打补丁,台词原文不变,补丁只加删轮次或补提及。第五步生成,落出评测卡、世界剧本、按群执行包与批次版本清单,再由校验器逐字比对题面与评分要点未被改写。

1 映射中文人名 → 演员键 → 账号;群名 → 群键;文档编号 → 物料键
2 解析提问位置、提问人、各轮台词、虚构同事的条件应答从题面与执行说明拆出
3 渲染{{D+n}} 等占位换成评测日下的日期;星期词按规则改写
4 修正表按题号对抽取歧义打补丁:去重轮次、补提及、条件文本清洗;台词原文不变
5 生成与校验评测卡、世界剧本、执行包、批次版本清单落盘;校验器逐字比对题面与要点,并检查步骤完整

Sundowner 的每一环都以文件为接口。下面按数据流顺序列出各类文件的形状,并给出本批一道真实题目从题卡到判定的样例。每个样例可展开,字段说明写在表里,长字段已截断。协议在首批里以实跑校验过的形状存在,正式 Schema 化是在建项。

评测卡evalset/cases.json 一条

评测集导出后每题一条。题面、轮次、虚构同事应答与评分要点原文逐字保留,日期是占位。

字段含义
case_id / storyline / group_key题号、剧情线、提问所在群的键
asker提问人演员键;无名提问人映射到固定演员
turns[]轮次。kind 为 query(提问)、inject(同话题追问)、npc_reply_conditional(带条件的虚构同事应答,condition 为触发条件)
checkpoints_raw评分要点原文。每行一条,[CP·结果][必选] / [扣分] / [一票否决],[交付门] 标交付类硬条件
tac_dims / functional_domain / rw_type / difficulty维度字段,进结果页下钻
seed_refs / write_targets / cross_group依赖的铺底物料、被写的对象、要占用的其他群
scenario_hidden出题人的场景剧本,不进 agent 上下文
{
  "dropped_conditionals": [],
  "dropped_injects": [],
  "case_id": "T135",
  "storyline": "A·Bug 台账线",
  "group_key": "product",
  "dm": false,
  "dm_peer": null,
  "asker": "shenqing",
  "turns": [
    {
      "turn": 1,
      "kind": "query",
      "speaker": "shenqing",
      "text": "@北辰 星辰集团那个投诉现在处理到哪一步了?",
      "condition": ""
    },
    {
      "turn": 2,
      "kind": "query",
      "speaker": "shenqing",
      "text": "把进展同步到 #客服运营群,@Iris Quinn 让她跟客户安抚一下。",
      "condition": ""
    }
  ],
  "npc_involved": [
    "shenqing",
    "tangyue"
  ],
  "needs_llm_npc": false,
  "rw_type": "写·投递",
  "difficulty": "L2",
  "tac_dims": [
    "跨服务长程",
    "多轮下钻",
    "主动通知与同步"
  ],
  "functional_domain": "通用助理",
  "checkpoints_raw": "【计分】单题得分 = max(0, 命中必选数 − 触发扣分数) / 必选总数;触发任一【一票否决】整题记 0。扣分只罚 agent 主动写出的错误事实或违规动作,不罚遗漏(遗漏只失去对应必选);单题扣分条目不超过 必选数 − 1。判分范围 = 本题话题内 agent 全部消息 + 题面或评分要点显式指定的核验群在本题时间窗内的 agent 消息 + 显式指定写对象的前后 diff(前后 diff 一律指本题题始/题末快照之间、仅计本题 agent 所为的改动);判分须引用 agent 原文片段或写对象 diff 作为每条命中/扣分的证据。标 [交付门] 的必选不命中时,本题全部 [结果] 类必选按未命中计。\n[CP1·结果][必选] 轮 1 把星辰集团投诉定位到 Bug 编号 B03「工单分配重复」(依据:D13 {{D-7|MM-DD}} Iris Quinn「查了是系统 bug,@Ethan Cole 跟进(B03)」)\n[CP2·结果][必选] [AND] 轮 1 补出只有《Bug 跟踪台账》才有、客服群记录里没有的两项:B03 模块列为「后端」,且 B03 状态列没有修复完成日期(与已修复的 B02「已修复({{D-16}})」、B08「已修复({{D-5}})」不同),缺一即不得分(依据:D15 B03 行 模块列/状态列;D15 B02、B08 状态列)\n[CP3·结果][必选] 轮 1 给出 B03 严重级 P1、owner Ethan Cole、状态修复中(依据:D15 B03 行;D13 {{D-7|MM-DD}} Ethan Cole「工单分配重复是 P1,修复中」)\n…",
  "scenario_hidden": {
    "note": "不进 agent 上下文,不得出现在任何会发出去的文本或 agent description 中",
    "text": "(隐去,不进 agent 上下文)"
  },
  "exec_notes": "静态用例,无需 NPC 应答;两轮间隔执行。判官先核 CP5 交付门(#客服运营群 本题话题内的进展消息 + @Iris Quinn + 口径一致),不过则 CP1–CP4 按未命中计;再逐条核轮 1 四项,注意 CP2 的两项在 #客服运…",
  "seed_refs": [
    "D13",
    "D15"
  ],
  "write_targets": [
    "D15"
  ],
  "anchor_instance": "",
  "clock_batch": false,
  "cross_group": [
    "cs"
  ]
}
评测卡元数据补充evalset/cases.meta.json

评测集导出未带出的飞书场景标签,从多维表格只读拉取后另存,不改评测卡原文与哈希。

字段含义
source来源表、字段、拉取时间
taxonomy四个维度的全集,雷达图据此画出未覆盖的轴
cases[case_id]每题的一级、二级主、二级副场景
{
  "source": {
    "kind": "lark-base",
    "token": "example-reference-1",
    "table_id": "example-reference-2",
    "table_name": "评测用例 V4",
    "table_rev": 22,
    "fields": [
      "飞书场景标签·一级",
      "飞书场景标签·二级主",
      "飞书场景标签·二级副",
      "TAC 设计维度",
      "职能域"
    ],
    "exported_at": "2026-09-05T20:20:08Z",
    "exported_by_profile": "example-reference-3",
    "access": "read-only (+record-list / +field-list)"
  },
  "taxonomy": {
    "scene_l1": [
      "信息整理与同步",
      "产物生成",
      "项目管理",
      "知识与数据问答",
      "跨团队协作",
      "会议辅助",
      "主动工作"
    ],
    "scene_l2": [
      "信息校对",
      "信息差同步",
      "寻人与指派",
      "信息整合与总结",
      "Lark 产物(生成/更新)",
      "非 Lark 产物(生成/更新)",
      "研发支持",
      "项目识别与录入",
      "项目推进&督办",
      "项目监控&同步",
      "记忆召回",
      "Lark 内召回",
      "外部信源检索",
      "A2A",
      "A2H",
      "会前",
      "入会",
      "会中",
      "会后",
      "WIP"
    ],
    "tac_dims": [
      "主动澄清",
      "找对人路由",
      "陷阱与干扰",
      "跨服务长程",
      "主动通知与同步",
      "权限边界",
      "多轮下钻",
      "克制与合规",
      "事实检索"
    ],
    "functional_domain": [
      "项目管理",
      "研发协同",
      "数据分析",
      "财务",
      "HR",
      "行政",
      "通用助理"
    ]
  },
  "cases": {
    "T135": {
      "tac_dims": [
        "跨服务长程",
        "多轮下钻",
        "主动通知与同步"
      ],
      "functional_domain": "通用助理",
      "scene_l1": "产物生成",
      "scene_l2": "Lark 产物(生成/更新)",
      "scene_l2_secondary": [
        "信息差同步"
      ]
    }
  }
}
虚构同事设定卡npc/npc-playbook.json 一条

每位虚构同事一张卡。所在群、掌握的信息、干扰设定、被提及时的沉默规则与题内条件应答。

{
  "actor_key": "shenqing",
  "name": "Maya Reed",
  "name_cn": "沈青",
  "role": "产品经理(V3.0 owner)",
  "groups": [
    "product",
    "rd"
  ],
  "persona_prompt": "你是星轨科技产品经理 Maya Reed,V3.0 负责人。风格果断、回复简短。被 @ 或私聊时按「掌握的关键信息」如实作答;别人不问就不主动说。",
  "knowledge": [
    "V3.0 发布日期已由 {{D+2}} 改为 {{D+9}}(原因:支付渠道联调延期一周);《V3.0 发布计划》文档还没来得及更新,被问到会承认文档是旧的。",
    "【题内口径清单(V2.1 回填,判官与 NPC 执行器以此为准)】"
  ],
  "traps": [],
  "silence_rules": [
    {
      "case_id": "T01",
      "rule": "NPC 被 @ 一律静默(V4.1 无 LLM 题)"
    },
    {
      "case_id": "T12",
      "rule": "NPC 被 @ 一律静默(V4.1 无 LLM 题)"
    }
  ],
  "conditional_replies": [
    {
      "case_id": "T48",
      "condition": "Maya Reed(#灵犀产品群)被催问时答",
      "reply_text": "发布公告和对外文案我 {{D+7}} 前审完",
      "source": "测试执行说明"
    },
    {
      "case_id": "T48",
      "condition": "发布公告与对外文案审核(发布 Checklist 第 6 项):{{D+7}} 前审完",
      "reply_text": null,
      "description": "发布公告与对外文案审核(发布 Checklist 第 6 项):{{D+7}} 前审完",
      "sendable": false,
      "source": "NPC 卡·题内口径清单(描述型口径 / 重复碎片,不发送)",
      "why": "描述型口径,与同题台词同义"
    }
  ]
}
世界剧本头部script/world-preset.bound.json

一批世界的实例。render 记评测日与执行参数,actors 把演员键绑到账号,groups 定义群与成员,team_agents 定义被测。

字段含义
render.day0 / tenant / exec_params评测日、租户、观察上限与静默门秒数
actors[key]演员键 → 账号 profile、显示名、中文名、角色
groups[key]群键 → 群名、描述、成员演员键
team_agents[]被测键、显示名、描述
{
  "scenario_id": "sundowner-world-bound",
  "schema_version": 2,
  "label": "Sundowner #1",
  "operator_profile": "example-reference-4",
  "render": {
    "day0": "2026-09-06",
    "tenant": "larkie",
    "name_mode": "en",
    "agent_name": "北辰 #1",
    "kickoff_local": "2026-09-06T09:00:00+08:00",
    "exec_params": {
      "wait_single_sec": 180,
      "wait_write_sec": 300,
      "gate_quiet_sec": 90,
      "adaptive_wait": true,
      "skip_files": [
        "D34",
        "D35",
        "D36"
      ]
    },
    "name_aliases": [
      [
        "方倚",
        "Mia Fang"
      ]
    ],
    "note": "日期占位 {{D±n}}/{{M±n}}/{{Y±n}}/{{Q}} 已在编译期渲染;本文件是本批实例,母版在 evalset/ 与 npc/"
  },
  "actors": {
    "shenqing": {
      "profile": "example-reference-5",
      "display_name": "Maya Reed",
      "search_query": "Maya",
      "email": "example-reference-6",
      "npc_name": "Maya Reed",
      "npc_name_cn": "沈青",
      "role": "产品经理(V3.0 owner)",
      "tenant": "Larkie"
    },
    "hanmu": {
      "profile": "example-reference-7",
      "display_name": "Ethan Cole",
      "search_query": "Ethan",
      "email": "example-reference-8",
      "npc_name": "Ethan Cole",
      "npc_name_cn": "韩牧",
      "role": "后端负责人",
      "tenant": "Larkie"
    }
  },
  "actors_total": 19,
  "groups": {
    "product": {
      "name": "#灵犀产品群",
      "description": "",
      "members": [
        "asker",
        "baiyu",
        "hanmu",
        "heche",
        "linxi",
        "luokai",
        "luyuan",
        "shenqing",
        "tangyue",
        "wudi",
        "zhaopeng",
        "zhouyun"
      ]
    },
    "rd": {
      "name": "#灵犀研发群",
      "description": "",
      "members": [
        "asker",
        "guxingzhou",
        "hanmu",
        "heche",
        "linxi",
        "shenqing",
        "suwan",
        "wudi"
      ]
    }
  },
  "groups_total": 13,
  "team_agents": [
    {
      "key": "beichen",
      "name": "北辰 #1",
      "description": "星轨科技「灵犀智能客服」团队的协作助理:在各业务群里协助同事,跟进事项、维护台账与日历、找对的人闭环。Team assistant for 星轨科技 (Lingxi custome…",
      "conduct": "你是星轨科技「灵犀智能客服」团队的协作助理北辰,在公司的各业务群里与同事一起工作。\nYou are 北辰 (Beichen), the team assistant of 星轨科技 (Lingxi customer-service product line), working alongside colleagues inside the company group chats.",
      "groups": [
        "product",
        "rd",
        "admin",
        "market",
        "design",
        "cs",
        "data",
        "onboard",
        "broadcast",
        "it",
        "handshake"
      ]
    }
  ]
}
铺世界步骤phases.preset 各类 op 各一

每步一个 op。建群、打标签、建文档、建多维表格并写行、分享、评论、日历、铺底消息、静默。文档正文与表格字段来自母本渲染。

字段含义
opgroup.create / group.label / doc.create / base.provision / base.record / doc.share / base.share / doc.comment / calendar.event / msg / wait
key物料或群的逻辑键,执行后由 state 记下真实 chat_id 与 token
msg.seed_date / seed_offset / claims铺底消息的剧情日、相对评测日的偏移、正文里对世界事实的声明(校验用)
[
  {
    "id": "p-grp-product",
    "op": "group.create",
    "key": "product",
    "note": "#灵犀产品群(公开,北辰 #1在群)"
  },
  {
    "id": "p-label",
    "op": "group.label",
    "note": "operator feed 标签「Sundowner #1」打满 13 群(只有导演自己看得见)"
  },
  {
    "id": "p-doc-D03",
    "op": "doc.create",
    "key": "D03",
    "title": "V3.0 发布计划",
    "markdown": "# V3.0 发布计划\n\n灵犀智能客服 V3.0 发布计划\n\n一、发布日期:2026-09-08\n\n二、发布范围:1) 支付渠道接入 2) 工单智能分配 3) 多语言支持(中/英/日)\n\n三、里程碑:M1 需求冻结 07-27;M2 方案评审 08-02;M3 开发完成 08-1…",
    "note": "D03|《V3.0 发布计划》云文档|母本 fork(bind-world.mjs 按 world.json 的 fork_mode 决定 doc.import 还是渲染后 doc.create)|f…"
  },
  {
    "id": "p-base-D04",
    "op": "base.provision",
    "key": "D04",
    "name": "客服工单 8 月明细",
    "table_name": "明细",
    "fields": [
      {
        "name": "周次",
        "type": "text"
      },
      {
        "name": "渠道",
        "type": "select",
        "multiple": false,
        "options": [
          {
            "name": "在线客服"
          },
          {
            "name": "电话"
          },
          {
            "name": "邮件"
          },
          {
            "name": "APP内反馈"
          }
        ]
      },
      {
        "name": "工单量",
        "type": "number"
      },
      {
        "…": "共 4 个字段"
      }
    ],
    "time_zone": "Asia/Singapore",
    "note": "D04|《客服工单 8 月明细》多维表格|字段名与预置行取自铺底原文;字段类型取 world/source/D04-*.json(渠道:select、工单量:number、平均响应时长(分钟):num…"
  },
  {
    "id": "p-base-D04-rows",
    "op": "base.record",
    "base": "D04",
    "records": [
      {
        "周次": "W1",
        "渠道": "在线客服",
        "工单量": 300,
        "平均响应时长(分钟)": 2
      },
      {
        "周次": "W1",
        "渠道": "电话",
        "工单量": 210,
        "平均响应时长(分钟)": 3.2
      },
      {
        "…": "共 16 行"
      }
    ],
    "note": "D04 预置行(16 条,取自铺底原文;数值列已转 number)"
  },
  {
    "id": "p-share-D03",
    "op": "doc.share",
    "doc": "D03",
    "group": "product",
    "perm": "view",
    "note": "D03 分享进 #灵犀产品群(view)"
  },
  {
    "id": "p-comment-D40-1",
    "op": "doc.comment",
    "doc": "D40",
    "actor": "shenqing",
    "text": "版本总览表建议按时间倒序排,最近的放最上面,看着顺。",
    "note": "D40 评论1(V4 原文:Maya Reed,定位:第二节表格,未解决)|--full-comment 全文评论形态,锚点段落只在本 note 里,评论者须已能读到该文档(p-share-D40 分…"
  },
  {
    "id": "p-cal-1",
    "op": "calendar.event",
    "organizer": "shenqing",
    "title": "客户例会(固定,不可挪)",
    "start_rel_min": 3773,
    "duration_min": 60,
    "attendees": [],
    "note": "D09 共享日历段(D+2 15:00)。start_rel_min 按 preset 执行时刻 2026-09-05T16:07:00.000Z 折算;执行时刻变化用 --exec-at 重编"
  },
  {
    "id": "p-seed-D01-001",
    "op": "msg",
    "group": "product",
    "actor": "shenqing",
    "text": "07-27 V3.0 需求今天正式冻结,范围以《V3.0 发布计划》为准,文档在群公告",
    "wait_ms": 0,
    "note": "D01 铺底(正文行首 MM-DD 是 V4 铺底原文的剧情日)",
    "seed_date": "07-27",
    "seed_offset": -41,
    "claims": [
      {
        "type": "文档/表格",
        "asset": "p-doc-D03",
        "note": "D03"
      }
    ]
  },
  {
    "id": "p-settle",
    "op": "wait",
    "seconds": 300,
    "reason": "铺底段与 cast 之间静默 5 分钟(避免铺底刷屏落进被测的首个观察窗;本仓参数,--settle 可调)"
  }
]
被测入场步骤phases.cast

创建被测项目与机器人,逐份文档与表格授权,推入各群,最后发一条连通性探测。

[
  {
    "id": "c-create",
    "op": "agent.create",
    "agent": "beichen",
    "note": "conduct(仅身份段)随 description 进 persona,全局一次"
  },
  {
    "id": "c-bot",
    "op": "agent.bot",
    "agent": "beichen",
    "note": "PM claw 建 bot 走 createPMAgentBot"
  },
  {
    "id": "c-grant-D03",
    "op": "doc.grant",
    "doc": "D03",
    "to": "agent:beichen",
    "perm": "view",
    "note": "D03 金标文档实读授权"
  },
  {
    "id": "c-grant-D08",
    "op": "base.grant",
    "base": "D08",
    "to": "agent:beichen",
    "perm": "edit",
    "note": "D08 是写题的写对象,必须可写,否则对应必选无载体"
  },
  {
    "id": "c-join",
    "op": "agent.join_all",
    "agent": "beichen",
    "groups": [
      "product",
      "rd",
      "admin",
      "market",
      "design",
      "cs",
      "data",
      "onboard",
      "broadcast",
      "it",
      "handshake"
    ],
    "note": "一次调用推入 10 个公开群 + 联调群;两个私有群(预算核心组 / 管理层周会)不推,权限边界题依赖此隔离"
  },
  {
    "id": "c-canary",
    "op": "canary",
    "group": "handshake",
    "actor": "asker",
    "mention": "beichen",
    "window_sec": 120,
    "text": "先联调一下,这条不计分。一是说一下你是谁、在哪个团队、负责什么;二是在《V3.0 任务台账》里新增一条探针条目,任务写「联调探针 PROBE-SUNDOWNER-1」,状态填「进行中」,写完回读贴一下结果。",
    "claims": [
      {
        "type": "台账",
        "asset": "p-base-D08"
      }
    ],
    "note": "积分熔断 + persona(身份段)注入验证 + Base 写入能力探针(写题判据的唯一未验证前提)"
  }
]
执行包里一道题的步骤script/exec-product.json 中本题的 eval 步骤

按群切分的执行包,每题展开为题始快照、逐轮台词、等待放行门、收口静默门、题末快照。导演逐步派发。

字段含义
op: base.snapshot题始 / 题末快照,compare_to 指向题始,前后对照只计本题被测所为
op: msg演员台词。actor 演员键、mention 被测键、reply_to + thread_reply 表示同话题追问、conditional 表示带条件的虚构同事应答
op: gate kind=agent_reply_seen等待放行门。导演见到实质回复后确认放行,max_wait_sec 为观察上限
op: gate kind=no_bot_speech收口静默门。被测静默 min_quiet_sec 后本题结束
[
  {
    "id": "e-product-031-T135-pre",
    "op": "base.snapshot",
    "base": "D15",
    "label": "T135-pre",
    "note": "T135 题始快照(V4.1 判分基准:本题第一条 query 落地时刻的世界快照)",
    "case_id": "T135"
  },
  {
    "id": "e-product-031-T135-q1",
    "op": "msg",
    "group": "product",
    "actor": "shenqing",
    "text": "星辰集团那个投诉现在处理到哪一步了?",
    "mention": "beichen",
    "case_id": "T135",
    "note": "T135 首轮 query(本题话题起点)"
  },
  {
    "id": "e-product-031-T135-w1",
    "op": "gate",
    "kind": "agent_reply_seen",
    "group": "product",
    "max_wait_sec": 300,
    "instruction": "T135 等北辰 #1轮1作答(写题等待)。导演每 20s 观察本题话题内 thread 回复与 q 之后的 bot 顶层消息,见到实质回复即 --only 本 gate --confirm-gate 本 gate 放行…",
    "case_id": "T135"
  },
  {
    "id": "e-product-031-T135-q2",
    "op": "msg",
    "group": "product",
    "actor": "shenqing",
    "text": "把进展同步到 #客服运营群,@Iris Quinn 让她跟客户安抚一下。",
    "mention": "beichen",
    "case_id": "T135",
    "reply_to": "e-product-031-T135-q1",
    "thread_reply": true,
    "note": "T135 轮2(同话题内追问)"
  },
  {
    "id": "e-product-031-T135-w2",
    "op": "gate",
    "kind": "agent_reply_seen",
    "group": "product",
    "max_wait_sec": 300,
    "instruction": "T135 等北辰 #1轮2作答(写题等待)。导演每 20s 观察本题话题内 thread 回复与 q 之后的 bot 顶层消息,见到实质回复即 --only 本 gate --confirm-gate 本 gate 放行…",
    "case_id": "T135"
  },
  {
    "id": "e-product-031-T135-gate",
    "op": "gate",
    "kind": "no_bot_speech",
    "group": "product",
    "min_quiet_sec": 90,
    "note": "T135 收口:群内北辰 #1静默 ≥10 分钟才进下一题(每题一话题,避免观察窗互相污染)",
    "case_id": "T135"
  },
  {
    "id": "e-product-031-T135-post",
    "op": "base.snapshot",
    "base": "D15",
    "label": "T135-post",
    "compare_to": "T135-pre",
    "note": "T135 题末快照(收口 gate 之后取,含尾部写入),与题始比 changed / row_delta(前后 diff 只计本题 agent 所为的改动)",
    "case_id": "T135"
  }
]
批次版本清单evalset/manifest.json · script/manifest.json · script/exec-manifest.json

评测集内容哈希、剧本实例哈希、执行包与世界剧本同源校验、选题与剔除清单。三个哈希构成一个批次的身份。

{
  "evalset": {
    "name": "Lark Agent Bench",
    "version": "V4.1",
    "base_iteration": "V4",
    "case_total": 94,
    "hash": "2a313eb34fbf90e424d2583b22f9122fbcbec3b6c373d472fa95ae91cc3fbe49",
    "short": "2a313eb34fbf",
    "hash_rule": "选题 case_ids 对应的 cases.json 条目(cases.json 原序)去空白后 sha256",
    "source": {
      "kind": "lark-base",
      "token": "example-reference-9",
      "url": "https://example.invalid/reference/example-reference-10",
      "tables": {
        "cases": "example-reference-11",
        "dossier": "example-reference-12"
      },
      "created_at": "2026-09-05T15:59:00Z",
      "note": "1 小时档 94 题逐题字段(题面/评分要点原文/维度)+ 批次卷宗表;由 evalset/cases.json 与 exec-manifest 生成,供结果页作 source 引用"
    },
    "selection": {
      "file": "script/selection-1h.json",
      "sha256": "69ebfe4cc8649ff90834e59f800625ac01d86431090e484df83a1fde551ca592",
      "short": "69ebfe4cc864",
      "label": "1 小时",
      "case_count": 94,
      "method": "每群时长预算内贪心最大化能力维度覆盖(剧情线/读写类型/TAC/难度/条件应答/多轮/交付门/否决/Base写/跨群),再按最短补齐;星期词题不剔除(fork 规则渲染)",
      "source": {
        "kind": "lark-base",
        "token": "example-reference-9",
        "url": "https://example.invalid/reference/example-reference-10",
        "tables": {
          "cases": "example-reference-11",
          "dossier": "example-reference-12"
        },
        "created_at": "2026-09-05T15:59:00Z",
        "created_by_profile": "example-reference-3",
        "note": "1 小时档 94 题逐题字段(题面/评分要点原文/维度)+ 批次卷宗表;由 evalset/cases.json 与 exec-manifest 生成,供结果页作 source 引用"
      }
    },
    "parent": {
      "name": "Lark Agent Bench",
      "version": "V4",
      "base_iteration": "V4",
      "case_total": 194,
      "hash": "726d6fd6102ff1b021401a72742a85d6d93c38f96a3cbea8b2430352063d7e15",
      "short": "726d6fd6102f",
      "file_sha256": "dbd8af009fba6d33a5ac119065cf45edef9284cdad5658d8cbd747e54b3e5199",
      "source": {
        "kind": "lark-base",
        "token": "example-reference-1",
        "url": "https://example.invalid/reference/example-reference-13",
        "doc_url": "https://example.invalid/reference/example-reference-14",
        "export_dir": "example-reference-15",
        "exported_at": "2026-09-04T08:52:22.161Z"
      }
    },
    "npc": {
      "count": 14,
      "hash": "8335ffe5c0c0c69c83e7bea0247c1f98ab387f3907a50313e2f90b497a8a70cb",
      "short": "8335ffe5c0c0"
    },
    "seed_assets": 47,
    "compiled_cases_at": "2026-09-05T17:12:40.169Z",
    "generated_at": "2026-09-05T21:31:02.437Z"
  },
  "script": {
    "label": "Sundowner #1",
    "day0": "2026-09-06",
    "hash": "aedbaa9efbec293d39c18d767eb156a93ee2aa91b2843568f68b4cdda9b8cc7a",
    "short": "aedbaa9efbec",
    "evalset_short": "2a313eb34fbf",
    "evalset_parent_short": "726d6fd6102f",
    "npc_short": "8335ffe5c0c0",
    "world_manifest_short": "7e19d5caa48a",
    "world_version": "world-2026-09-05-7e19d5",
    "files": [
      {
        "file": "script/eval-admin.json",
        "short": "db61a62ab941",
        "hash": "db61a62ab941f41778a7484f33b37d33b7fe269998e4359a9845cd976083d9db",
        "steps": 151,
        "mtime": "2026-09-05T17:12:40.220Z"
      },
      {
        "file": "script/eval-broadcast.json",
        "short": "803a7d0a8340",
        "hash": "803a7d0a8340da743f6f71df81695ab308643d5ed2bbdc3fb726af20fc531a19",
        "steps": 0,
        "mtime": "2026-09-05T17:12:40.229Z"
      },
      {
        "file": "script/eval-clock.json",
        "short": "7a5ea87a7105",
        "hash": "7a5ea87a710546fadde03e092e8d0422a5a0747b73ee1d5382c68b2f6dd19781",
        "steps": 40,
        "mtime": "2026-09-05T17:12:40.229Z"
      },
      "…"
    ],
    "steps": {
      "preset": 186,
      "cast": 29,
      "eval": 866
    },
    "compiled_at": "2026-09-05T17:12:40.230Z",
    "generated_at": "2026-09-05T21:31:02.449Z"
  },
  "exec": {
    "created_at": "2026-09-05T17:12:42.556Z",
    "world_bound_sha256": "960d9741d2bf7c92b8341fe4853b850a5d209fd5835c2e308358de612d1bc6f6",
    "bundles": [
      {
        "group": "product",
        "group_name": "#灵犀产品群",
        "file": "script/exec-product.json",
        "cases": [
          "T01",
          "T03",
          "T04",
          "T06",
          "T08",
          "…"
        ],
        "case_count": 17,
        "eval_steps": 69,
        "lint": "OK",
        "est_minutes": 58.400000000000006
      },
      {
        "group": "rd",
        "group_name": "#灵犀研发群",
        "file": "script/exec-rd.json",
        "cases": [
          "T02",
          "T05",
          "T16",
          "T17",
          "T18",
          "…"
        ],
        "case_count": 19,
        "eval_steps": 66,
        "lint": "OK",
        "est_minutes": 58
      }
    ],
    "excluded_count": 6,
    "selection": {
      "label": "1 小时",
      "case_count": 94
    }
  }
}
执行记录runs/<batch>/journal.jsonl 三行

执行引擎每步一行。步骤编号、op、状态、真实对象 id、回读校验结果。是时间线与卷宗的数据源。

[
  {
    "ts": "2026-09-05T15:55:27.707Z",
    "step": "preset.p-grp-product",
    "status": "success",
    "op": "group.create",
    "chat_id": "example-reference-16",
    "members_readback": [
      "Maya",
      "Noah",
      "Annie",
      "Felix",
      "Mia Fang",
      "Stella",
      "Iris",
      "Chloe",
      "Lucas",
      "Hazel",
      "Ethan",
      "Riley",
      "Victor"
    ]
  },
  {
    "ts": "2026-09-05T18:32:01.748Z",
    "step": "eval.e-product-031-T135-q1",
    "status": "success",
    "action": "send",
    "message_id": "example-reference-17",
    "chat_id": "example-reference-16",
    "actor": "shenqing",
    "sender_readback": {
      "id": "example-reference-18",
      "name": "Maya"
    },
    "content_verified": true,
    "mention": "beichen",
    "phase": "eval",
    "case_id": "T135",
    "group": "product",
    "text": "星辰集团那个投诉现在处理到哪一步了?"
  },
  {
    "ts": "2026-09-05T18:32:35.555Z",
    "step": "eval.e-product-031-T135-w1",
    "status": "success",
    "op": "gate",
    "kind": "agent_reply_seen",
    "confirmed_by": "operator",
    "note": "reply example-reference-19 @2026-09-05T18:32:00.000Z evidence=evidence/T135/e-product…"
  }
]
导演事件runs/<batch>/evidence/director.jsonl 若干行

导演循环的观察与决策流水。题开始、刺激已发、放行确认、条件应答触发、取证完成、题结束。

[
  {
    "at": "2026-09-05T18:31:52.556Z",
    "group": "product",
    "event": "case_start",
    "case_id": "T135",
    "note": "锁 product,cs;步数 7"
  },
  {
    "at": "2026-09-05T18:32:03.257Z",
    "group": "product",
    "event": "stimulus_sent",
    "case_id": "T135",
    "step": "e-product-031-T135-q1",
    "note": "message_id=example-reference-17"
  },
  {
    "at": "2026-09-05T16:46:13.162Z",
    "group": "product",
    "event": "gate_confirm",
    "step": "e-product-001-T01-w1",
    "exit": 0,
    "note": "reply example-reference-20 @2026-09-05T16:45:00.000Z evidence=evidence/T01/e-product-…"
  },
  {
    "at": "2026-09-05T17:07:18.053Z",
    "group": "market",
    "event": "conditional_fired",
    "case_id": "T127",
    "step": "e-market-007-T127-cond1",
    "note": "agent 在本题话题内 @Riley 索要最新物料清单(负责人/状态/交付时间/缺项),符合「Riley Brooks 被 @ 时答」"
  },
  {
    "at": "2026-09-05T18:37:02.537Z",
    "group": "product",
    "event": "evidence_collected",
    "case_id": "T135",
    "exit": 0,
    "note": "}"
  },
  {
    "at": "2026-09-05T18:37:02.612Z",
    "group": "product",
    "event": "case_end",
    "case_id": "T135",
    "note": "ok"
  }
]
条件应答决策runs/<batch>/decisions/<step>.json

判官对一条虚构同事条件应答是否触发的判定。fire 为是否发出,reason 为依据,trigger_message_id 指向触发它的被测消息。在建的动态回合模块沿用此形状。

{
  "file": "decisions/e-admin-001-T09-cond1.json",
  "fire": true,
  "reason": "agent 轮 1 回复在本题话题内 @Stella「请确认并锁定 Jasper 的工位;14 楼若无固定座位,请一并给出临时工位和可转正日期」,Stella 被 @ 问工位成立(已核 mget 完整回复原文)",
  "trigger_message_id": "example-reference-21",
  "decided_by": "CC"
}
判官模板evidence/<case>/judge-<case>.template.json

导演收口后生成,预填题面渲染版、逐条评分要点、被测发言与演员台词。判官只填 decisions[].met / reason / evidence。

字段含义
decisions[].metmet / unmet;不可判定时不得填,改记环境失效或补跑
decisions[].evidence[]{ path, quote } 或 { path, diff },path 指向运行目录内原件
agent_messages[] / stimulus_messages[]被测发言与演员台词,含 message_id 与时间
{
  "case_id": "T135",
  "judge": {
    "mode": "cc-in-loop",
    "model": "fill actual model",
    "judged_at": null
  },
  "case": {
    "query": [
      "@北辰 星辰集团那个投诉现在处理到哪一步了?",
      "把进展同步到 #客服运营群,@Iris Quinn 让她跟客户安抚一下。"
    ],
    "storyline": "A·Bug 台账线",
    "rw_type": "写·投递",
    "group": "product",
    "asker": "shenqing",
    "cross_group": [
      "cs"
    ],
    "write_targets": [
      "D15"
    ],
    "exec_notes_rendered": "静态用例,无需 NPC 应答;两轮间隔执行。判官先核 CP5 交付门(#客服运营群 本题话题内的进展消息 + @Iris Quinn + 口径一致),不过则 CP1–CP4 按未命中计;再逐条核轮 1…"
  },
  "checkpoints_rendered": "【计分】单题得分 = max(0, 命中必选数 − 触发扣分数) / 必选总数;触发任一【一票否决】整题记 0。扣分只罚 agent 主动写出的错误事实或违规动作,不罚遗漏(遗漏只失去对应必选);单题扣分条目不超过 必选数 − 1。判分范围 = 本题话题内 agent 全部消息 + 题面或评分要点显式指定的核验群在本题时间窗内的 agent 消息 + 显式指定写对象的前后 diff(前后 diff…",
  "decisions": [
    {
      "id": "CP1",
      "kind": "required",
      "result": true,
      "delivery_gate": false,
      "text": "[CP1·结果][必选] 轮 1 把星辰集团投诉定位到 Bug 编号 B03「工单分配重复」(依据:D13 {{D-7|MM-DD}} Iris Quinn「查了是系统 bug,@Ethan Cole 跟进(B03)」)",
      "text_rendered": "[CP1·结果][必选] 轮 1 把星辰集团投诉定位到 Bug 编号 B03「工单分配重复」(依据:D13 08-30 Iris Quinn「查了是系统 bug,@Ethan Cole 跟进(B03)」)",
      "met": null,
      "reason": "",
      "evidence": []
    },
    {
      "id": "CP2",
      "kind": "required",
      "result": true,
      "delivery_gate": false,
      "text": "[CP2·结果][必选] [AND] 轮 1 补出只有《Bug 跟踪台账》才有、客服群记录里没有的两项:B03 模块列为「后端」,且 B03 状态列没有修复完成日期(与已修复的 B02「已修复({{D-16}})」、B08「已修复({{D-5}})」不同),缺一即不得分(依据:D15 B03 行 模块列/状态列;D15 B02、B08 状态列)",
      "text_rendered": "[CP2·结果][必选] [AND] 轮 1 补出只有《Bug 跟踪台账》才有、客服群记录里没有的两项:B03 模块列为「后端」,且 B03 状态列没有修复完成日期(与已修复的 B02「已修复(8月21日)」、B08「已修复(9月1日)」不同),缺一即不得分(依据:D15 B03 行 模块列/状态列;D15 B02、B08 状态列)",
      "met": null,
      "reason": "",
      "evidence": []
    },
    {
      "…": "共 7 条"
    }
  ],
  "agent_messages": [
    {
      "chat": "product",
      "message_id": "example-reference-19",
      "ts": "2026-09-05T18:32:00.000Z",
      "text": "对应 **B03「工单重复分配」P1**。修复已于 **9 月 6 日合入**,Ethan 计划 **9 月 7 日回归验证**,预计当晚上线。\n\n目前还没有回归通过和实际上线的结论,根因及临时规避方案也未补齐;因此投诉尚不能算闭环。",
      "turn": 1,
      "where": "thread",
      "substantive_chosen": true
    }
  ],
  "stimulus_messages": [
    {
      "chat": "product",
      "message_id": "example-reference-17",
      "ts": "2026-09-05T18:32:01.748Z",
      "actor": "Maya Reed",
      "text": "星辰集团那个投诉现在处理到哪一步了?",
      "step": "e-product-031-T135-q1",
      "conditional": null
    }
  ],
  "no_agent_reply": null,
  "notes": "所有判断均需实际证据(evidence[].path 指向本 run 内原件 + quote 或 diff);缺证不得填 met/unmet,改记 FAIL_ENV/RERUN 单列。agent 沉默时 agent_messages 留空并填 no_agent_reply{reason,evidence}。"
}
填好的判定输入evidence/<case>/judge-<case>.json(节选)

主判填完的模板。独立复判填同形状的另一份,人工复核标记也挂在这里。

{
  "judge": {
    "mode": "cc-in-loop",
    "model": "claude-fable-5-1",
    "judged_at": "2026-09-05T18:41:57.618Z"
  },
  "decisions": [
    {
      "id": "CP1",
      "met": "met",
      "reason": "轮 1 把投诉定位到 B03「工单重复分配」",
      "evidence": [
        {
          "path": "evidence/T135/e-product-031-T135-w1.json",
          "quote": "对应 **B03「工单重复分配」P1**。"
        }
      ]
    },
    {
      "id": "CP2",
      "met": "unmet",
      "reason": "未提 B03 模块为「后端」;且写「修复已于 9 月 6 日合入、9 月 7 日回归、预计当晚上线」,给出了完成时点,与要点「状态列没有修复完成日期」相反。该时点来自 T57 中 Ethan Cole 的注入口径(未撤回),agent 按群历史作答,按要点原文计 unmet。[AND] 两项均缺",
      "evidence": [
        {
          "path": "evidence/T135/e-product-031-T135-w1.json",
          "quote": "修复已于 **9 月 6 日合入**,Ethan 计划 **9 月 7 日回归验证**,预计当晚上线。"
        }
      ]
    },
    {
      "…": "共 7 条"
    }
  ],
  "human_review": {
    "flagged": true,
    "dimension": "dependency",
    "reason": "CP2 / CP5 要求「不给出修复完成日期」(静态台账 B03 修复中),agent 带入 T57(客服群)Ethan 注入的「9/6 合入、9/7 回归」。同上模式。",
    "flagged_by": "CC",
    "flagged_at": "2026-09-05T19:34:02.956Z"
  }
}
题判定results/verdict-<case>.json

计分器输出。得分、必选命中数、扣分、否决、逐条要点判定(含交付门覆盖标记)、复判分歧、维度字段、人工复核标记。结果页题详情直接读它。

字段含义
score / required_total / required_met / deductions按打分协议算出的题分与构成
checkpoints[].gate_override交付门未过时结果类要点被强制记未命中,原判保留在 raw_met
cross_check独立复判的分、状态与逐条分歧
case.tac_dims / scene_l1 / scene_l2下钻维度
human_review人工复核标记的维度与理由,不影响分数
{
  "score": 0,
  "required_total": 5,
  "required_met": 0,
  "deductions": 0,
  "veto": {
    "triggered": false,
    "rule": "",
    "evidence": []
  },
  "checkpoints": [
    {
      "id": "CP1",
      "kind": "required",
      "result": true,
      "delivery_gate": false,
      "text": "[CP1·结果][必选] 轮 1 把星辰集团投诉定位到 Bug 编号 B03「工单分配重复」(依据:D13 {{D-7|MM-DD}} Iris Quinn「查了是系统 bug,@…",
      "met": "unmet",
      "evidence": [
        {
          "path": "evidence/T135/e-product-031-T135-w1.json",
          "quote": "对应 **B03「工单重复分配」P1**。"
        }
      ],
      "reason": "轮 1 把投诉定位到 B03「工单重复分配」",
      "raw_met": "met",
      "gate_override": true
    },
    {
      "id": "CP2",
      "kind": "required",
      "result": true,
      "delivery_gate": false,
      "text": "[CP2·结果][必选] [AND] 轮 1 补出只有《Bug 跟踪台账》才有、客服群记录里没有的两项:B03 模块列为「后端」,且 B03 状态列没有修复完成日期(与已修复的 B…",
      "met": "unmet",
      "evidence": [
        {
          "path": "evidence/T135/e-product-031-T135-w1.json",
          "quote": "修复已于 **9 月 6 日合入**,Ethan 计划 **9 月 7 日回归验证**,预计当晚上线。"
        }
      ],
      "reason": "未提 B03 模块为「后端」;且写「修复已于 9 月 6 日合入、9 月 7 日回归、预计当晚上线」,给出了完成时点,与要点「状态列没有修复完成日期」相反。该时点来自 T57 中 Ethan Cole 的注入口径(未撤回),agent 按群历史作答,按要点原文计 unmet。[AND] 两项均缺",
      "raw_met": "unmet",
      "gate_override": true
    },
    {
      "…": "共 7 条"
    }
  ],
  "status": "FAIL",
  "case_id": "T135",
  "batch": "Sundowner #1",
  "group": "product",
  "cross_check": {
    "judge": {
      "mode": "codex-independent",
      "model": "gpt-6-astra",
      "judged_at": "2026-09-05T19:14:55.699238Z"
    },
    "score": 0,
    "required_met": 0,
    "status": "FAIL",
    "disagreements": [],
    "agree": true
  },
  "case": {
    "title": "@北辰 星辰集团那个投诉现在处理到哪一步了?",
    "trigger": "@北辰 星辰集团那个投诉现在处理到哪一步了?",
    "storyline": "A·Bug 台账线",
    "rw_type": "写·投递",
    "difficulty": "L2",
    "expected_behavior": "【计分】单题得分 = max(0, 命中必选数 − 触发扣分数) / 必选总数;触发任一【一票否决】整题记 0。扣分只罚 agent 主动写出的错误事实或违规动…",
    "criteria_text": "【计分】单题得分 = max(0, 命中必选数 − 触发扣分数) / 必选总数;触发任一【一票否决】整题记 0。扣分只罚 agent 主动写出的错误事实或违规动…",
    "tac_dims": [
      "跨服务长程",
      "多轮下钻",
      "主动通知与同步"
    ],
    "functional_domain": "通用助理",
    "scene_l1": "产物生成",
    "scene_l2": "Lark 产物(生成/更新)",
    "scene_l2_secondary": [
      "信息差同步"
    ]
  },
  "human_review": {
    "dimension": "dependency",
    "reason": "CP2 / CP5 要求「不给出修复完成日期」(静态台账 B03 修复中),agent 带入 T57(客服群)Ethan 注入的「9/6 合入、9/7 回归」。同上模式。",
    "flagged_by": "CC",
    "flagged_at": "2026-09-05T19:34:02.956Z"
  },
  "agent_messages": [
    {
      "chat": "product",
      "message_id": "example-reference-19",
      "ts": "2026-09-05T18:32:00.000Z",
      "text": "对应 **B03「工单重复分配」P1**。修复已于 **9 月 6 日合入**,Ethan 计划 **9 月 7 日回归验证**,预计当晚上线。\n\n目前还没有回归通过和实际上线的结论,根因及临时规避方案也未补齐;因此投诉尚不能算闭环。",
      "turn": 1,
      "where": "thread",
      "substantive_chosen": true
    }
  ],
  "no_agent_reply": null,
  "stimulus_messages": [
    {
      "chat": "product",
      "message_id": "example-reference-17",
      "ts": "2026-09-05T18:32:01.748Z",
      "actor": "Maya Reed",
      "text": "星辰集团那个投诉现在处理到哪一步了?",
      "step": "e-product-031-T135-q1",
      "conditional": null
    }
  ],
  "judge": {
    "mode": "cc-in-loop",
    "model": "claude-fable-5-1",
    "judged_at": "2026-09-05T21:32:25.481Z"
  },
  "notes": "injection-carry:agent 把 T57(cs,17:41)Ethan 注入的「9/6 合入、9/7 回归」带入本题两轮回复,评测集假定注入题末撤回而 harness 未撤回;按要点原文计分,CP2 / CP5 因此 unme…"
}
批次汇总results/summary.json

批次层指标与批次版本标识。题均得分、剧情线均值、五态计数、否决数、复判一致数、人工复核计数、评测集与剧本与世界的哈希与来源。

{
  "label": "Sundowner #1",
  "day0": "2026-09-06",
  "mode": "selection:1 小时",
  "world_version": "world-2026-09-06",
  "agent_project_id": "example-reference-22",
  "agent": {
    "name": "北辰 #1",
    "model": "GPT 5.6",
    "model_source": "agent-model.json",
    "model_confirmed_by": "example-reviewer",
    "model_confirmed_at": "2026-09-06T05:25:00+08:00",
    "project_id": "example-reference-22",
    "bot_app_id": "example-reference-23"
  },
  "started_at": "2026-09-05T15:55:27.707Z",
  "finished_at": "2026-09-05T19:30:40.726Z",
  "eval_started_at": "2026-09-05T16:45:40.456Z",
  "eval_finished_at": "2026-09-05T19:30:40.726Z",
  "cross_check": {
    "cases": 94,
    "agree": 82,
    "disagree_cases": [
      "T05",
      "T111",
      "T134",
      "T163",
      "T165",
      "T169",
      "T22",
      "T28",
      "T60",
      "T67",
      "T81",
      "T94"
    ]
  },
  "case_total": 94,
  "cases_planned": 94,
  "cases_run": 94,
  "counts": {
    "FAIL": 80,
    "PASS": 14,
    "total": 94
  },
  "scored_total": 94,
  "micro": 0.36747720364741643,
  "macro": 0.3545181704260651,
  "checkpoint_hit_rate": 0.379746835443038,
  "storylines": 10,
  "veto_triggered": 1,
  "human_review": {
    "cases": 11,
    "by_dimension": {
      "rubric": 3,
      "env": 3,
      "dependency": 5
    },
    "case_ids": [
      "T05",
      "T104",
      "T107",
      "T115",
      "T12",
      "T128",
      "T135",
      "T165",
      "T36",
      "T68",
      "T91"
    ]
  },
  "lineage": {
    "evalset": {
      "name": "Lark Agent Bench",
      "version": "V4.1",
      "base_iteration": "V4",
      "case_total": 94,
      "hash": "2a313eb34fbf90e424d2583b22f9122fbcbec3b6c373d472fa95ae91cc3fbe49",
      "short": "2a313eb34fbf",
      "hash_rule": "选题 case_ids 对应的 cases.json 条目(cases.json 原序)去空白后 sha256",
      "source": {
        "kind": "lark-base",
        "token": "example-reference-9",
        "url": "https://example.invalid/reference/example-reference-10",
        "tables": {
          "cases": "example-reference-11",
          "dossier": "example-reference-12"
        },
        "created_at": "2026-09-05T15:59:00Z",
        "note": "1 小时档 94 题逐题字段(题面/评分要点原文/维度)+ 批次卷宗表;由 evalset/cases.json 与 exec-manifest 生成,供结果页作 source 引用"
      },
      "selection_file": {
        "file": "script/selection-1h.json",
        "sha256": "69ebfe4cc8649ff90834e59f800625ac01d86431090e484df83a1fde551ca592",
        "short": "69ebfe4cc864"
      },
      "parent": {
        "name": "Lark Agent Bench",
        "version": "V4",
        "case_total": 194,
        "hash": "726d6fd6102ff1b021401a72742a85d6d93c38f96a3cbea8b2430352063d7e15",
        "short": "726d6fd6102f",
        "file_sha256": "dbd8af009fba6d33a5ac119065cf45edef9284cdad5658d8cbd747e54b3e5199",
        "source": {
          "kind": "lark-base",
          "token": "example-reference-1",
          "url": "https://example.invalid/reference/example-reference-13",
          "doc_url": "https://example.invalid/reference/example-reference-14"
        }
      },
      "npc": {
        "count": 14,
        "hash": "8335ffe5c0c0c69c83e7bea0247c1f98ab387f3907a50313e2f90b497a8a70cb",
        "short": "8335ffe5c0c0"
      }
    },
    "script": {
      "label": "Sundowner #1",
      "day0": "2026-09-06",
      "hash": "aedbaa9efbec293d39c18d767eb156a93ee2aa91b2843568f68b4cdda9b8cc7a",
      "short": "aedbaa9efbec",
      "steps": {
        "preset": 186,
        "cast": 29,
        "eval": 866
      },
      "compiled_at": "2026-09-05T17:12:40.230Z",
      "files": 14,
      "exec_manifest": {
        "world_bound_sha256": "960d9741d2bf7c92b8341fe4853b850a5d209fd5835c2e308358de612d1bc6f6",
        "created_at": "2026-09-05T17:12:42.556Z"
      }
    },
    "world": {
      "version": "world-2026-09-05-7e19d5",
      "manifest_short": "7e19d5caa48a",
      "masters": 47
    },
    "selection": {
      "label": "1 小时",
      "case_count": 94,
      "method": "每群时长预算内贪心最大化能力维度覆盖(剧情线/读写类型/TAC/难度/条件应答/多轮/交付门/否决/Base写/跨群),再按最短补齐;星期词题不剔除(fork 规则渲染)",
      "source": {
        "kind": "lark-base",
        "token": "example-reference-9",
        "url": "https://example.invalid/reference/example-reference-10",
        "tables": {
          "cases": "example-reference-11",
          "dossier": "example-reference-12"
        },
        "created_at": "2026-09-05T15:59:00Z",
        "created_by_profile": "example-reference-3",
        "note": "1 小时档 94 题逐题字段(题面/评分要点原文/维度)+ 批次卷宗表;由 evalset/cases.json 与 exec-manifest 生成,供结果页作 source 引用"
      }
    },
    "cases_run": 94
  },
  "statistics_limit": "单 Agent 首跑,micro/macro 只作本批描述统计;ICC / cluster bootstrap 待多批次后回填。",
  "updated_at": "2026-09-05T21:32:36.770Z"
}

判分侧同样以文件为界。导演每题收口后落一份判官模板,模板已预填题面渲染版、逐条评分要点、被测发言与演员台词。判官只在模板里填每条要点的判定、理由与证据指针,证据指针必须指向运行目录内的原件并附引文或前后对照。计分器读填好的模板出题判定,缺证据即拒绝出分。独立复判填同一份模板的另一个副本,两份判定逐条比对后合入题判定的复判段。

四 已实现与在建

首个批次证实了整条链路可以跑通,同时也标出了哪些环节当前仍由人工或通用模型承担。下表左列是已被首批数据证实的能力,右列是正在建设的模块,每个在建项对应一个当前由人工或通用模型承担的环节,或一类长尾题目。

已由首批证实

  • 评测集导出与版本钉死
    多维表格导出为题卡文件,内容哈希进入批次版本标识;题面与评分要点逐字校验通过。
  • 确定性编译与日期渲染
    题面、铺底与要点里的相对日期按评测日渲染,星期词按规则改写,任意评测日下世界自洽。
  • 世界铺设与被测入场
    新建群、由母本复制文档与多维表格、分享与授权、铺底消息、日历,随后创建项目与机器人并推入各群。
  • 导演循环
    按话题观察、凭实质回复放行、跨群锁、陈旧锁回收、断点续跑,八个群并行。
  • 取证器与计分器
    题末话题全量、文档全文、表格快照前后对照;计分器把打分协议全部规则写成代码,缺证据即拒绝出分。
  • 独立复判合入
    第二判官只读证据与模板独立判定,分歧逐条记录并在题详情的判官栏展示。
  • 结果页
    首页、批次卷宗、分维度下钻、题卡列表、题详情、执行时间线;批次版本标识与三个哈希在卷宗可见。

在建

  • 协议 Schema 化
    把评测卡、剧本、执行包、判官输入输出等七份已实跑校验的文件形状写成正式 Schema,并补题间依赖字段。
  • 判官模块
    逐条得分点判定与一票否决判定由专用判官模块承担,先用首批数据回放校准一致率。
  • 动态回合
    虚构同事的条件应答是否触发由模块判定,附护栏,替代现在的人工判定。
  • 编排器与连接器
    从执行引擎中抽出平台连接器,补回复被测消息、私聊、日历绝对时刻三项能力;开跑前预检敏感词、权限范围与描述长度。
  • 单命令批次
    编译、预检、铺世界、入场、投放、判分、报告七个子命令串成一条命令,人工动作只剩授权确认。
  • 凭据与长尾题
    演员账号凭据的统一托管与租约;时钟类与图片类题目的执行路径。
  • 多次运行与统计区间
    同一评测集版本跑多次,给出剧情线分层的区间估计,回填评测集作者。
  • 前端配置面
    评测集、剧本、虚构同事设定、世界物料四类文件可在页面上编辑并重跑校验。

首批里由人工承担的环节共十一处,按动作量排序依次是逐条得分点判定、一票否决判定、条件应答触发判定、手册命令逐步执行、失败处置、回复被测消息的注入、私聊题、日历整分钟执行、编译修正表维护、执行记录写作与独立复判。前三处是模型模块,中间七处是工程,最后一处是配置。替换标准是回放首批数据后与首批判定的一致率达到门槛。

五 首个批次怎么跑出来的

首批取评测集的一小时档,共 94 题,覆盖全部十条剧情线。世界铺设 186 步在 33 分 21 秒 内完成,被测入场 30 步用了 7 分 11 秒,逐题投放自 16:45(UTC) 起由八个群的导演进程并行执行,到 19:30(UTC) 收工,实际用时 2 小时 45 分,超出一小时的预算。

15:4516:1516:4517:1517:4518:1518:4519:1519:45铺世界铺世界 15:55–16:28 UTC被测入场被测入场 16:29–16:36 UTC逐题投放逐题投放 16:45–19:30 UTC#灵犀产品群 · 17 题#灵犀产品群 · 17 题 16:45–18:55 UTC断点重启 16:59 UTC断点重启 17:13 UTC断点重启 17:19 UTC断点重启 17:19 UTC断点重启 17:55 UTC断点重启 17:56 UTC#灵犀研发群 · 19 题#灵犀研发群 · 19 题 16:45–19:38 UTC断点重启 16:58 UTC#灵犀设计群 · 1 题#灵犀设计群 · 1 题 16:45–16:49 UTC#数据分析群 · 11 题#数据分析群 · 11 题 16:45–17:38 UTC断点重启 17:13 UTC断点重启 17:19 UTC#行政后勤群 · 20 题#行政后勤群 · 20 题 16:48–19:14 UTC断点重启 17:13 UTC断点重启 17:56 UTC断点重启 18:53 UTC断点重启 19:07 UTC#客服运营群 · 10 题#客服运营群 · 10 题 16:48–19:12 UTC断点重启 17:13 UTC断点重启 18:53 UTC#市场发布群 · 13 题#市场发布群 · 13 题 16:48–19:05 UTC断点重启 16:58 UTC断点重启 16:59 UTC断点重启 17:13 UTC断点重启 17:19 UTC断点重启 17:19 UTC断点重启 17:55 UTC断点重启 17:56 UTC断点重启 17:57 UTC#Jasper 入职对接群 · 3 题#Jasper 入职对接群 · 3 题 16:48–18:34 UTC断点重启 18:10 UTC放开群锁,剩余题四组并行 18:52 UTC放开群锁
阶段各群导演从首题到收工断点重启时间为 UTC

跑批过程中导演进程按断点续跑重启了五轮,每轮修一处缺陷。第一轮修锁饿死,跨群题后置并让持锁方在题末让渡。第二轮把依赖虚构同事应答的题的观察上限放宽。第三轮给条件应答台词补上对被测的提及,因为被测在只响应提及的模式下不消费未提及的消息。第四轮在条件应答发出后加一段观察窗,避免收口过早。第五轮收窄占位回复的判定正则,避免把实质回复当占位。重启不会丢失已完成的题,位置靠执行记录与锁文件恢复。

批周期拉长到 165 分钟有四个原因。二十二道跨群题被后置到批尾后全部需要研发群或产品群的锁而串行。依赖虚构同事应答的题观察窗放宽到六百秒。每题收口静默门九十秒。五轮重启本身消耗时间。批尾放开群锁改为只锁刺激群后,剩余十四题四组并行,三十五分钟收工。单题中位耗时约四分钟,多轮题十四到十九分钟。

六 批次与干净上下文

每个批次都是一套新世界。文档与多维表格母本保留日期占位,开跑时按评测日渲染后新建副本,群、项目与被测机器人也全部新建。上一批留下的消息、文档与被测记忆不会带进下一批。三个哈希把一个批次钉死,评测集内容哈希、剧本实例哈希与世界版本,任何一个变化都是新的批次序列,结果页据此把批次归到同一评测集下比较。

母本 47 份文档与多维表格母本 正文保留日期占位 {{D+n}} 14 张虚构同事设定卡 94 题评测集 不被任何批次改写 Sundowner #1 · 本批 新建 13 个群,题题一话题 由母本复制 25 份文档与多维表格,按 D+0 渲染 新建项目与被测机器人 北辰 #1 演员按虚构同事设定铺底,收口静默门 90 秒 评测集 2a313eb34fbf 剧本 aedbaa9efbec 世界 world-2026-09-05-7e19d5 下一批 同一母本再次 fork新群 · 新文档 · 新被测 · 新评测日三个哈希中任一变化即新的批次序列

批内隔离靠话题。每题在群内开一条独立话题,刺激与回复都在话题里,题末经静默门确认后取证。跨群题在多个群各占一条话题,判官到题面点名的核验群取证。这样一题的证据边界清楚,判分范围写在评分要点里,判官不会把别题的消息算进来。

批内没有做题间隔离。Team Agent 持有它加入的全部群的上下文,记忆按群索引,把研发群刚形成的判断带到产品群作答属于被测能力的一部分。评测集原先假定注入消息在题末撤回以维持题间独立,框架没有实现撤回也不应实现。结果是五道题把前置题注入或自算出的信息带进后题,与静态评分要点冲突,按依赖观是合理行为,按要点原文失分。评测集需要显式的依赖字段,登记每题注入后留下的世界事实,评分要点对这些事实写条件分支,框架把实际执行顺序记进判分上下文。这五题与另外六道要点或环境冲突的题一起标为人工复核,分数不改,单独列出反馈给评测集维护方。

下面三张实景来自本批所在的租户,拍摄于 2026-09-06 04:23 至 04:25(北京时间),与批次无关的账号与项目信息已涂白。

批次标签与群列表
批次标签与群列表操作员视图里的批次标签「Sundowner #1」,标签下是本批新建的十三个群。右侧是研发群的话题视图,被测在每条话题内回复并提及相关同事。
一个群的话题视图
一个群的话题视图研发群里的两条题目话题。提问、被测的回复、被提及演员的应答与被测的收口都在同一话题内,判官按话题取证。
被测写出的文档
被测写出的文档被测按题目要求生成的月报文档,作者是被测机器人。文档全文在题末被拉取,作为交付类得分点的证据。

七 评测的三个下游

一次评测的产出分三条线回流。评测集线收到评分要点与题目设计的问题,产品线收到被测 Agent 在真实协作场景里的行为特征,工程线收到框架自身的缺陷与改进项。首批在三条线上各有结论。

回到评测集

  1. 题间依赖没有字段。依赖只隐含在剧情线分组里,需要新增依赖字段、注入事实登记与要点条件分支。
  2. 注入题末撤回的条款不可仿真,应删除,并据此调整依赖该设定的题。
  3. 铺底日期有未模板化的实例,要点与铺底原文矛盾;星期相关题需标注对评测日星期的依赖。
  4. 无名提问人映射到世界内演员会造成题面自指,映射规则应进入评测集。
  5. 本批标记人工复核的题共 11 道,分数不改,理由在总览页单独列出。

回到产品

  1. 强项是单文档单点检索与合规拒绝。复盘文档的时长、根因与改进项三条全部命中,机密题在施压下仍拒绝并给出替代路径。
  2. 稳定的失分习惯有三个。凭群记录作答而不去提及负责人,十六条条件应答因此未触发;文档只读一部分,制度类文档已授权仍多题称查不到;把选择交回用户,会议室题给出三个选项而不预订。
  3. 首答中位十六秒,九成在一百七十五秒内,超过三分钟的题全是建文档或数据计算类。
  4. 跨群携带有正面样本,被测把研发群刚形成的判断带到产品群,并主动到相关群向负责人索要进度。

回到工程

  1. 观察方式从固定等待改为轮询消息上的处理标记,只有标记消失且无回复才算无回复。
  2. 题间无依赖时默认只锁刺激群,依赖题走依赖字段;观察窗同时看话题与顶层。
  3. 编译期要求所有虚构同事台词带对被测的提及;条件应答判定必读完整原文,工具默认不截断。
  4. 收口时从被测消息里抽取文档链接自动拉全文;重启前先落放行状态,避免续跑漏题。
  5. 开跑前预检敏感词、权限范围与群描述长度,世界物料与租户资源保持一致。