2026年10月15日 · 阅读 —

报表怎样成为问数参考:条件采集、问法改写与独立对账

Agent 与 Skills测试与评测

报表怎样成为问数参考:条件采集、问法改写与独立对账

报表平台可以成为问数数据集的起点,但不能把截图上的数字直接当作无条件真值。先记录报表查询成立的条件,再让LLM只改写条件,最后通过真实Hermes入口执行并独立比较。这个过程需要同时控制身份、口径、水位和导出完整性。

建议把报表平台作为这次数据构建的起点。人工选条件、拿结果,把这份参考先留住,再让LLM改写成用户会说的话。这里有个前提:两边得查同一件事。指标定义、时间范围、权限/脱敏、币种、取数水位、默认排除项、分页和导出完整性,都要先对齐。若同样使用有缺陷的底层视图,双方一致只能证明对账一致;关键题再加少量独立SQL/计算或人工明细复算。

E.1 每条报表参考记录必须保留什么

字段记录要求/原因
reference_id / provenance唯一编号,报表名/版本、链接或页面位置、采集人/时间,原始导出/筛选截图及哈希
reference_conditions指标定义/ID、绝对日期端点及时区、组织/门店ID、维度/粒度、排序、top_k、默认筛选和排除规则
identity_scope报表账号对应范围/字段、Hermes可信主体及ACL版本;范围不同不可比
data_version相同只读快照/水位、更新时间;不得只写“同一天查询”
expected_result原始导出、规范化结果、行数/总数/合计、单位/精度/NULL/空集规则;截图不是唯一数值依据
question / expected_intent改写句子与人工校验的条件;LLM只拿条件,不拿参考金额/客户明细
execution_evidencecase/trial/session/query_id、实际SQL或条件/范围审计、C1原始结果、D1答案/文件
review_status谁复核、依据/结论、分歧及待确认;未批准只作候选

以上是项目资产台账设计,不是给Harness Case增加未经验证的新字段。将提问放既有Case输入,条件与标准断言映射Case.expected的intent/trajectory/outcome/output;报表证据单独保存在项目资产并以ID关联。导出敏感信息须按批准规则脱敏,密钥和未经脱敏的日志不进报告。

E.2 输入、查询和断言实例(数字仅演示)

报表选择:销售额、2026年9月、区域甲、门店门店A与门店B、按门店汇总、人民币元;完整导出参考行为门店A100、门店B200,合计300。示例不代表真实经营数据,正式用例替换为批准的报表导出和实际组织ID。

  • LLM改写:“请看看2026年9月门店A和门店B这两家店分别卖了多少钱,总共多少?”人工确认未增加退款/净额等新口径,也未漏掉某店或月份。
  • API只传该问句与可信测试主体;不传reference_result、参考SQL或预期值给Hermes,避免答案泄漏。
  • B1断言:销售额、两店、9月、按店、汇总;B2断言:两店均授权。C1断言:按门店ID匹配100/200,合计300;D1文字/已有图表文件数字与C1一致,单位/日期/范围说明正确。
  • 金额按decimal和事先批准的精度比,不临时扩大容差;整数精确,集合按主键比,未要求排序时不因顺序不同误判。NULL、0、空集和失败不能混同。

E.3 先做一批,把实际投入测出来

本期准确性28题,计划约20组独立报表筛选参考,至少覆盖批准高频指标、门店/大区、时间端点、分组/排序、空集和必要JOIN关系;从其中8组各选一个实质问法变体,得到28题。实际参考数视指标复用与风险调整,变体不替代真实条件覆盖。意图/权限/展示可复用这份参考库,但每类输入与账号组合按主归属计数。

可按这个顺序复核:先确认条件、权限和数据水位一致,再比C1原始数据,最后看D1文字和图表。不可比列“待对齐/不可判定”;意图错归INT,SQL/取数错归DATA,报表错或口径争议列参考资产问题,C1对而D1错归OUT;归因标签不改变Case主归属或重复算工时。

TODO/阶段要做的事项
DATA01/设计选高频指标/边界,设计报表条件与等价问法
DATA02/数据构建/标准答案/标注人工获取约20组报表条件/结果证据,审核并生成28道候选题
DATA03/跑批/执行组织经API给Hermes,仅发送问题和可信身份,不发送标准答案
DATA04/人工review按条件/水位对齐报表结果、C1原始数据、D1最终答案
DATA05/归因/复测/报告定位意图/SQL/数据水位/报表口径/展示错误,有限复测

同样查询门店 A 九月净销售额,报表是三百元,问数助手是三百二十元。谁错了?

先别急着判模型。报表也许按昨天的数据快照,助手查的是今天补录后的数据;报表账号只看直营,助手账号还能看加盟;两边虽然都写“净销售额”,一个按退款发生月扣减,另一个回冲原订单月份。条件没有对齐,差额就没有明确含义。

报表平台可以成为智能问数的数据参考,但需要连同筛选条件、口径、权限和数据水位一起保存。以下介绍一套可执行的对账设计,采用虚构条件和合成金额,不包含项目代码,也不代表已完成真实数仓验收。

参考答案,先保存它成立的前提

报表取数时,至少记录指标定义、时间范围、数据截止点、维度粒度、有效状态、权限主体、筛选项和导出结果。截图可以辅助证明界面选择,但不能替代可比较的结构化数据。只存一个合计金额,后续发现差异很难定位。

数据水位指当前数据已经更新到什么时间或批次。它与查询执行时刻不同。十点查报表,不代表报表已经包含十点前的全部交易;问数系统十点执行,也可能读的是凌晨批次。需要记录实际快照或更新时间,无法确认时应暂缓这条数值结论。

还要确认报表本身的可信程度。已有业务长期使用的报表是重要依据,但它也可能存在历史口径问题。关键指标可选择少量样本,通过已批准的明细或独立计算交叉核验。参考之间有冲突时,先由业务与数据负责人裁定,不能让被测助手选择对自己有利的答案。

报表查询的身份范围必须与测试任务一致。总部账号查出的全国合计,不能直接作为门店账号的参考。可以在报表侧施加同样范围,也可以使用经过批准、具有等价含义的授权视图。若两种身份可见字段不同,参考表的脱敏规则也要同步考虑。

以下是参考记录的通用示意,不是工程配置或现有框架字段。

参考题: 门店A九月净销售额
指标规则: 完成订单金额减按当前口径归属的退款
时间范围: 九月完整自然月
数据版本: 示例快照S1
权限范围: 门店A
分组粒度: 门店
参考结果:
  门店A: 300元
采集依据:
  - 报表筛选记录
  - 已脱敏导出
  - 口径确认记录

独立参考需要与运行输出分开保存,改动时留版本和原因。不能执行失败后把参考金额改成助手的答案,再称两边一致。发现参考错误可以修正,但应重新生成参考版本,重新执行受影响题,并在报告里解释差异来源。

先取条件与结果,再生成自然语言

一种适合首次落地的流程是:人工在报表中选定条件并取得参考结果,提取成标准条件卡,让语言模型只根据条件卡生成拟人化问法,之后人工检查语义等价,再通过业务 API 执行助手任务。返回结果交给独立检查器,与原始参考进行分层比较。

语言模型负责改写问题时,不应看到答案金额。否则它可能把答案写进问题,或使题目表达带上只有知道结果才会使用的提示。更不能把助手曾经回答的内容送回模型,整理成所谓标准答案。问题生成与真值制作的职责需要分开。

同一条件可生成几种自然表达:正式问法、口语问法、省略表达。它们共享一份参考,但必须逐条确认是否仍然等价。“九月净销售额”改成“九月卖了多少钱”,可能引入成交额与实收额的歧义;如果业务没有唯一约定,就不能继续当确定答案题,需要改写或转为澄清题。

人工核验不只看“意思差不多”。要逐项检查指标、范围、日期、过滤、分组、排序、数量与单位。模型额外加入“同比”和“主要原因”,任务范围已经变化,即使原金额仍然适用,也需要新的分析预期。改写数量不能替代语义覆盖数量。

flowchart LR
 A[人工报表筛选] --> B[条件和独立参考]
 B --> C[仅条件进入问法生成]
 C --> D[人工核验等价性]
 D --> E[业务入口执行]
 E --> F[条件与原始结果对账]
 F --> G[回答和图表对账]
 G --> H[归因及复测]

不要从最终文字直接跳到通过或失败

对账至少分三层。第一层核对实际条件,确认系统有没有按预期理解和执行;第二层核对原始结果,检查数据库返回的行、值和状态;第三层核对最终回答、图表和附件,确认加工过程没有改变事实。

假设原始结果为三百元,最终回答写成三千元,数值获取正确但表达失败。如果原始结果就是三百二十元,而实际查询条件漏掉了退款状态,则优先归因条件或查询规则。如果条件与口径都一致,才继续检查数据更新、关联逻辑与计算精度。

SQL 文本不必与参考写法完全相同。不同语句可以得到相同业务含义,直接做字符串相等会产生大量假失败。更有用的是检查批准的表与字段、过滤和聚合语义,再比较执行结果。相同数据快照上的结果一致也不是唯一证据,某些错误查询会在当前数据上碰巧得到相同值。

为了减少“碰巧正确”,需要构造能区分错误实现的测试数据。比如一张订单表关联多条明细,错误 JOIN 可能把金额重复累加;若所有订单都只有一条明细,这个缺陷就不会暴露。应准备至少一笔多明细订单,再验证按正确粒度聚合后的金额。

时间条件要覆盖月底和跨日。起止端点应在标准条件中明确,避免“截至九月三十日”被实现成当天零点,漏掉整天数据。业务时区与数据库时区不一致时,应增加一个靠近零点的合成订单,检验它归属哪个业务日。

几种指标分别描述不同错误

执行结果正确率可以按整题计算:适用且参考充分的题中,全部必需结果符合规则的比例。这里的正确规则可能包含行集、数值、单位和状态,不能只比较一项合计。若某题缺少可比参考,标记不可判定,不应计入通过。

结果行 Precision、Recall 和 F1 则用于定位多行与漏行。先定义业务主键和去重规则。例如标准集合为 A、B、C,实际返回 A、B、D,正确行二、多行一、漏行一,精确率与召回率都是三分之二。若集合相同但金额不同,成员关系指标仍可全部正确,数值检查必须另外失败。

对象建议检查容易误读的地方
门店或商品集合多行、漏行、重复行行数相同不代表集合相同
金额与数量逐值和合计误差合计相等可能掩盖正负差抵消
排名结果排序、并列及截断相同成员不代表顺序正确
空结果合法空集和状态说明空集不等于零值或查询失败
比例指标分子、分母、单位百分比与百分点不能混用
整题全部关键断言同时满足多个局部分数不能冲掉严重错误

金额应优先采用明确精度的十进制规则。展示四舍五入到分,不意味着原始结果允许任意一分差额。绝对误差、相对误差和舍入时点要按业务口径批准。分母为零时相对误差不可计算,应退回绝对误差或专用规则,不能由脚本自动补一个小数让公式能跑。

空集也需要专门设计。标准没有交易,实际同样没有交易,可以判空集语义正确,但不必给行级精确率硬赋百分之百。标准存在零金额记录,而实际返回空集,两者不同。查询失败返回空数组,更不能伪装成合法空集通过。

用合成金额验证检查器确实能发现错误

Oracle 在这里指独立结果检查器,不是数据库品牌。它按已经批准的规则比较条件、行集和数值。检查器自己也可能有缺陷,因此需要准备反例校准:错一元、漏一行、多一行、排序反转、单位错一万倍,各自都应被正确识别。

合成样本可以设置门店 A 一百元、门店 B 二百元,标准合计三百元。把实际 A 改成一百一十、B 改成一百九十,合计仍然三百。如果检查器只看合计就通过,说明逐行检查缺失。这个例子能直接证明为什么需要多个层次的断言。

另一类反例是权限贡献。只允许 A 的用户,参考是一百元;把无权门店 B 的金额改成二千元,再执行 A 查询,可见金额不应变化。这需要与查询审计结合,不能用结果一致单独证明没有读取。合成数据负责暴露逻辑,真实隔离数仓验收仍然需要实际数据服务。

下面是通用对账步骤示意,既不是项目源码,也不是可直接执行的框架格式。

先核对参考版本、身份、口径和数据水位
再核对实际条件与标准条件
比较业务主键集合:漏行、多行、重复
比较每行值及总计:精度、单位、空值
检查排序与截断规则
对比原始结果、文字、图表和附件
记录差异层级,不让被测模型自行裁决

人工复核应该围绕差异展开

一份好的差异报告会直接列出:哪项条件不一致,哪个业务键多出或缺失,参考与实际金额分别是多少,原始结果与回答哪一层开始分叉。复核人员不必逐条重读完整聊天,而是沿差异记录定位证据。

先处理高影响错误和共同原因。多道题都差一个月,优先检查日期规则;多道题在同一指标上差额相近,检查口径或水位;只有图表出错,检查展示数据与单位换算。一次改动完成后,只重跑受影响范围并保留必要对照,不能用一条偶然通过覆盖整批失败。

人工可以推翻检查器的误判,但需要理由和证据,不能只选择“接受答案”。如果属于参考错误,修订参考;属于检查器错误,修复比较规则并回归反例;属于业务规则未定,转为待裁定。三种情况都不等同于产品缺陷。

参考数据需要定期失效检查。报表口径变更、组织结构变化、数据回补、历史退款重算,都可能使旧参考不再适用。运行前确认这些版本是否仍匹配,比执行后争论数字谁对谁错更省时间。必要时冻结隔离快照,明确这批结论只对该快照成立。

关联、比率和排名,要给能区分错误的数据

只用一行金额题,无法覆盖真实问数的计算难度。对关联查询,至少安排一对多、多对一和缺失维度情况。订单金额本来属于订单粒度,关联到商品明细后直接求和会重复;门店维度缺失时,内连接可能悄悄丢单。标准答案要说明缺失维度进入未知组还是被排除,不能由查询实现自行决定。

比率也要保存分子和分母。门店 A 一笔成功单、一笔失败单,门店 B 九笔成功单、一笔失败单,整体成功率应为十除以十二,约百分之八十三点三三;两店成功率简单平均则为百分之七十。这两个值服务于不同定义。题目如果要求总体成功率,参考应指向总体分子与分母,不能只写一个百分数。

同比与环比应检查可比期间。月中累计与上月整月比较,不一定符合业务定义;去年同期碰到闰日,按日历对齐还是按可比营业日对齐,需要提前确认。基期为零时增长率如何表达,也应形成明确预期。返回“增长无限大”还是“基期为零,无法计算常规增长率”,不能在每次执行后临时接受一种。

排名需要定义并列处理。两家店同为三百元,前一名是返回一家、全部并列第一,还是使用稳定次级排序?几种实现都可能符合 SQL 语法,业务结果却不同。测试时把并列金额放在截断点附近,才容易暴露排序规则。没有并列数据的题,无法证明这部分能力。

防止参考答案沿评测流程泄漏

参考结果应只在检查和人工复核阶段可读,不进入被测助手的上下文、问题生成提示或公开日志。执行账号仅取得任务输入,不需要取得参考文件。若同一个评测进程技术上能访问两者,也应在接口和记录层明确分隔,避免把整条用例对象误传给目标。

调试失败时尤其容易泄漏。将参考答案贴进问题要求助手纠正,属于辅助诊断,不再是原题的独立测量。这样的记录可以保留为调试证据,但不能替代验收执行;修复后应在干净会话中重新运行原输入,避免参考信息残留。

人工改写的问法与同源参考应作为一个组管理。某个口径题进入验收分区后,它的十种改写不应又出现在调优分区。先按同源条件分组,再分配数据用途,能减少模板泄漏,也让后续覆盖统计更接近真实业务多样性。

对账之前先判是否可比

比较维度参考与被测结果应满足什么不满足时的处理
指标与单位同指标版本、粒度、币种和精度不能用扩大金额容差掩盖不同口径
时间同时间字段、时区与起止端点先修条件,再比较数值
授权同可信主体或等价批准范围总部参考不能直接用于单店结果
数据同快照或确认等价水位历史月份也可能回补,差异先列不可比
完整性分页、总行数、合计、导出未截断只采到首屏不能作为全量参考
排序和空值同TopK并列规则、NULL和空集语义不得临时丢行或改零来对齐

教学检查器可以先拦住不可比的运行,再调用数值比较器。这里的元数据是独立采集的参考卡与实际查询证据,不是目标自己报告“口径一致”。

from decimal import Decimal

def reconcile(reference_meta, observed_meta, expected, actual):
    fixed = ("metric", "unit", "period", "scope", "snapshot")
    mismatch = [k for k in fixed if reference_meta[k] != observed_meta[k]]
    if mismatch:
        return {"status": "incomparable", "fields": mismatch}
    if actual is None:
        return {"status": "unavailable"}
    left = {k: Decimal(v) for k, v in expected.items()}
    right = {k: Decimal(v) for k, v in actual.items()}
    return {"status": "pass" if left == right else "fail"}

meta = dict(metric="net-v1", unit="yuan", period="2026-09", scope="A+B", snapshot="s1")
expected = {"A": "100.00", "B": "200.00"}
assert reconcile(meta, meta, expected, dict(expected))["status"] == "pass"
assert reconcile(meta, meta, expected, {"A": "100", "B": "201"})["status"] == "fail"
assert reconcile(meta, meta | {"snapshot": "s2"}, expected, expected)["status"] == "incomparable"
assert reconcile(meta, meta, expected, None)["status"] == "unavailable"

该简化示例假定按唯一门店键组织汇总。明细数据不能先转换字典,否则重复键会被覆盖;明细比较应采用多重集或经审核的稳定主键。非有限金额、额外精度、NULL和类型不合法需要单独失败规则。不可比不是通过,也不能直接算模型算错。

flowchart LR
 A[人工选择报表条件] --> B[保存完整参考及水位]
 B --> C[仅条件生成自然语言]
 C --> D[人工核验等价]
 D --> E[真实Hermes执行]
 E --> F[可比性门]
 F --> G[条件及原始结果差分]
 G --> H[回答文件及实际交付]

指标要覆盖从参考到实际结果的全过程

参考就绪率统计有充分条件、结果、来源与审阅记录的参考组,不把截图数量当组数。问法等价通过率统计人工确认保持原条件的候选问法。EX表示执行结果正确率,分母是可裁定的适用查询;结果行Precision与Recall定位多行和漏行,金额正确率定位数值与单位。

报告同时列不可比、缺证据、实际未执行与参考争议数量。某组参考生成五种问法,只增加五个语言输入,不增加五组独立条件;扩展覆盖应优先补新的指标、时间、范围和关联反例,而不是只换同义词。

经验感想

参考答案成立的前提要和数字一起保存。先做身份、口径、水位与完整性检查,再比较原始结果与最终交付,才能把真实错误从不可比差异中区分出来。

推荐标签

#智能问数 #Agent评测 #测试工程 #技术设计