2026年10月15日 · 阅读 —
报表怎样成为问数参考:条件采集、问法改写与独立对账
报表怎样成为问数参考:条件采集、问法改写与独立对账
报表平台可以成为问数数据集的起点,但不能把截图上的数字直接当作无条件真值。先记录报表查询成立的条件,再让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_evidence | case/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评测 #测试工程 #技术设计