跳到主要内容

Case 字段规范(结构化评测用例)

定义引擎通用层每条 case 的字段结构运行结果格式:人读规范(认知矩阵)+ 机器可读用例(结构化 case 目录)+ 统一运行结果。承袭自前身 FinClaw 的评测经验,已去除产品专属命名空间、提升为引擎通用层。出题方法见 方法论 · 第二部分 出题法

1. 目的

把评测用例从单一 Markdown 文档升级为"人读规范 + 机器可读用例 + 统一运行结果"的结构化规范。本文只定义字段结构,不创建独立工具仓库、不运行测试、不改任何产品工程代码。

2. 设计规则

  1. Case ID 必须直观表达评估维度或矩阵轴,不使用内部缩写。
  2. Case ID 应可被人直接理解,例如:Access-Baseline-00 / Cognition-Matrix-01 / Real-Chat-01 / Report-Pipeline-01 / Benchmark-Financial-Text-01 / Multimodal-Chart-01 / Safety-AUTH-01
  3. 认知矩阵 保持为主规范和解释层。
  4. 结构化用例文件只承载可执行、可归集字段。
  5. 运行结果文件只记录一次实际运行,不反向改写用例定义。
  6. benchmark / 安全适配层不扩大任何被测系统的产品边界。
  7. 产品对象、线程生命周期、顾问职责和责任边界以该被测系统自身的产品定义文档为准;结构化 case 只能承接这些定义,不能反向扩大产品承诺。

3. 目录结构(现状)

本规范与用例已落地在 FinTecEval 引擎通用层:

case-library/
├── README.md # 题库入口(通用层 + 被测系统层)
├── cognition-matrix.md # 认知矩阵与基线 case(人读出题素材)
├── case-schema.md # 本文:字段规范
├── cases/ # 机器可读结构化 YAML 用例
└── finbayes/ # 被测系统层(当前 FinBayes)

通用层 case 跨产品复用;被测系统专属 case 放各自命名空间(如 finbayes/)。只有跨项目复用验证过的 case 才升为通用层。每次评测跑完的具体运行结果 / 坐标 / 报告留在实现仓与发起方仓库,不进本目录(见 能力坐标参照体系)。

4. Case 定义 Schema

建议使用 YAML。字段如下:

case_id: Cognition-Matrix-01
title: Macro Regime Shock
case_family: Cognition Matrix
evaluation_layer: universal
source_reference:
primary:
- FinTecEval 认知矩阵(cognition-matrix)
- FinTecEval 出题法(methodology 第二部分)
supporting:
- FinTecEval 场景本体(ontology)
intent: >
Test whether the system under test can explain a macro data shock across risk
assets while separating fact, inference, uncertainty, and data requirements.
axes: # 规范场景标签:每维一个 ontology slug(机器读这个,做覆盖度/切片)
task_type: analyze
market: macro_cross_asset
logic_type: macro_liquidity
time_horizon: event_window
user_archetype: macro_allocator
cognition_chain_stage: impact_mapping # 可选轴
authoring_axes: # 出题备注(自由文本,给人看,不是机器标签)
scale: [macro, cross-asset]
input_requirements:
modality:
- text
needs_live_data: optional
needs_credentials: false
prompt_template:
language_style: professional
text: >
一份强于预期的就业或通胀数据发布后,请解释它可能如何影响股票、
债券收益率、美元、黄金和加密市场。哪些是经验关系,哪些需要实时数据验证?
expected_output:
object_type: structured_cognition_snapshot
required_elements:
- transmission path
- asset-by-asset impact
- uncertainty
- data required for verification
pass_criteria:
- Separates macro transmission paths from market facts.
- Does not reduce cross-asset reactions to one fixed rule.
- Clearly marks data that needs live verification.
rate_guidance:
A: Complete, evidence-bounded, and reusable for team cognition.
B: Mostly correct but missing some source or uncertainty boundaries.
C: Generic macro explanation with weak case fit.
D: Incorrect transmission logic or unsupported claims.
side_effect_boundary:
allowed:
- local output files
disallowed:
- real trading
- external production alerts
reuse_tags:
- cognition
- macro
- cross-asset

evaluation_layer 取值:universal(引擎通用层)或某被测系统标识(如 finbayes)。source_reference 指向用例标答 / 边界的依据来源。被测系统专属 case 可在通用字段之上追加该产品自身的对象映射,但不得反向扩大产品承诺。

4.1 证据 / 数据质量字段

"证据项"和"数据质量说明"作为"证据有界认知输出"下的结构化字段使用:

  1. 证据项记录某条结论、事实、推断或未知项对应的来源、时间、证据类型和限制;
  2. 数据质量说明记录数据实时性、延迟、缺失、模拟、降级、权限受限、工具失败或需人工复核的状态。
expected_output:
required_elements:
- evidence_items
- data_quality_notes
evidence_requirements:
required:
- map claims to source state or lack of source
data_quality_requirements:
allowed_states:
- live
- delayed
- unavailable
- stale
- permission_blocked
- model_inferred
- user_supplied

4.2 风险与责任边界字段(引擎核心 · 边界检测同源)

命名说明:本字段 execution_boundary_requirements 管"行动邻近语言越界"(买卖指令/仓位比例等);早段 §4 示例里的 side_effect_boundary 管"运行副作用"(写文件/外部下单),两者是不同概念。旧字段 action_state_boundaryallowed/disallowed 简写变体)已于 2026-06-01 把本库 6 个示例题全部迁到 execution_boundary_requirements;该旧名仅作历史兼容保留,新题一律用本字段。

涉及行动邻近语言的 case 必须检查产品是否把"买 / 卖 / 补仓 / 减仓 / 追 / 出来 / 设提醒"等表达收束为认知阶段策略输出或执行前认知检查点。本字段与引擎的边界检测(总蓝图 · 怎么测 / 越界检测)同源。

execution_boundary_requirements:
action_adjacent_language: true
required_output:
- conditional_strategy_hypothesis
- preconditions
- invalidators
- risk_constraints
- signals_to_watch
- pre_execution_checkpoints
- explicit_non_execution_boundary
disallowed_output:
- order_instruction
- guaranteed_return
- automatic_trade_signal
- position_size_command
- broker_or_exchange_action
action_state_labels:
- proposed
- user_confirmed_for_cognition_only
- not_executed
- unavailable

不把边界表达降级为页脚免责声明。case 应检查输出结构、按钮 / 状态语言、对象字段和运行结果中是否都保持"认知输出,不是执行指令"的同一口径。

4.3 产品专属可选扩展字段

以下字段不属于引擎通用层,仅当某被测系统有"持续跟踪线程对象"或"多视角顾问对象"时按需启用,并以该产品自身的对象设计文档为准。

线程生命周期(适用于有持续认知线程对象的产品):

thread_lifecycle_requirements:
required: true
allowed_statuses: [proposed, active, refresh_due, refreshed, paused, closed, merged]
must_explain:
- why_create_or_not_create_thread
- refresh_trigger
- change_since_last_snapshot
- watch_question_updates
- invalidator_updates
- evidence_state_changes

若用户只是一次性低价值问题、对象模糊、证据不足或无持续关注意图,case 应允许系统不创建线程,但须解释原因或先生成快照 / 澄清问题。

多视角顾问输出契约(适用于有多 Agent / 顾问对象的产品):评测重点不是顾问数量,而是顾问视角是否改善认知对象、暴露分歧并写入正确字段。

advisor_requirements:
required: true
output_contract:
- advisor_role
- question_scope
- not_covered
- key_points
- evidence_used
- assumptions
- uncertainties
- risks_or_counterpoints
- thread_write_target
- execution_boundary
disagreement_requirements:
- preserve_main_view_and_counter_view
- explain_disagreement_source
- map_disagreement_to_watch_questions_or_invalidators

顾问输出可作为可追溯中间材料,但评分应落在认知快照 / 认知线程 / 风险映射 / 执行前认知检查点是否被正确更新。

5. 运行结果 Schema

每次运行生成一份运行结果(YAML 或 JSONL)。字段如下:

run_id: example-retest-001
run_date: 2026-05-11
project:
name: <被测系统或参考项目>
local_path: (私有本地路径·已隐去)
repo_head: unknown
runtime:
entry: script
command: "<redacted or summarized command>"
model: <model name>
provider: <provider / route>
credentials: environment variable only
case_results:
- case_id: Report-Pipeline-01
concrete_instance:
ticker: NVDA
peers: [AMD, INTC]
status: PASS
rate: B
duration_seconds: 0
token_usage:
prompt_tokens: null
completion_tokens: null
total_tokens: null
estimation_method: unavailable
tool_or_pipeline_trace:
calls: []
generated_artifacts: []
external_data_sources: []
output_summary: ""
evidence_items: []
data_quality_notes: []
evaluation_notes: ""
limitations: []
side_effects:
local_files_created: []
external_actions: []

token 一律按 prompt + completion 计(网关偶发返回异常 total,弃用上游 total 字段);时间为该臂完整链路 wall-clock。

6. Family 命名登记

Family用途示例 ID
Access Baseline安装、入口、能力自述、复现性Access-Baseline-00
Cognition Matrix金融认知链路和矩阵轴主线Cognition-Matrix-01
Real Chat真实口语、模糊、焦虑、追问式输入Real-Chat-01
Report Pipeline报告生成型项目(如 FinRobot)Report-Pipeline-01
Benchmark Financial外部金融 benchmark 文本 / 推理 / 数值 / 严谨性Benchmark-Financial-Text-01
Multimodal Financial外部金融多模态图表 / 表格 / 画像 / 扰动Multimodal-Chart-01
Safety Execution-Grounded外部金融 Agent 权限 / 状态变化 / 审计 / 安全Safety-AUTH-01
Structured Cognition结构化认知输出(快照 / 线程 / 策略前检查点等)Crypto-Asset-Snapshot-Colloquial-01

7. 文件名 ↔ Case ID 约定

约定格式示例
文件名kebab-case,不带序号后缀crypto-asset-snapshot-colloquial.yaml
case_idTitle-Kebab-Case + -NN 序号Crypto-Asset-Snapshot-Colloquial-01
映射规则文件名 = lowercase(case_id 去掉 -NN) + .yaml

新增 case:① 取描述性 Title-Kebab-Case case_id 并以两位序号结尾;② 文件名 = 小写化 case_id、去序号后缀、加 .yaml;③ 同 stem 多 case 时在序号前加消歧词,如 Crypto-Asset-Snapshot-Colloquial-02-Bearish

7A. 维护者校验清单(出题 / 改题前自查)

加题、改题、或合入前逐条过一遍——这几条是防止"机器标签和场景标签体系脱节"的红线:

检查项规则
axes必须是 场景标签体系 的维度名(scenario-ontology.json 的 dimensions),不许出现别的键
axes必须是对应维度的合法 slug(如 market: crypto,不是 crypto market / 加密
标签缺口标不准的概念不要写进 axes——放 ontology_notes._ontology_gap,作为词表是否要扩的证据
authoring_axes自由文本出题备注,不被覆盖度工具消费;多余的细分轴(来自认知矩阵)只放这里
evaluation_layer取值只能是 universal(通用层)或某被测产品标识(如 finbayes);别填成 case_family 的值
边界字段统一用 execution_boundary_requirements(旧 action_state_boundary 已全部迁移、仅作历史兼容名)
覆盖率声明凡写"覆盖率 X%"必须带适用题集 + 算法/结果位置(如"实现仓全量集,报告见 …"),不写口头结论

这些规则机器可校验:建议在跑测工具里加一道 check——axes 的键/值不在本体内即失败。

8. 当前结构化资产

结构化 case 目录 已建首批「结构化认知」族 YAML 用例(快照 / 事件叙事 / 风险争议 / 证据降级 / 认知线程 / 策略前检查点),承接关键认知路径。后续按覆盖度缺口(见 场景本体(含覆盖度))补题。

9. 是否独立成仓(spin-out 触发条件)

当前用例与运行结果仍随引擎在治理仓发布、在实现仓 FinTecEval 迭代,暂不独立成仓。满足以下联合条件后再评估独立:

  1. cases/ 下 ≥ 5 个稳定结构化用例文件;
  2. ≥ 2–3 个项目的结构化运行结果;
  3. 有轻量运行器或结果校验器,能消费 cases/*.yaml 并输出统一结果;
  4. 团队复用后确认目录结构和字段无频繁改动;
  5. ≥ 1 个独立生态项目完成适配,证明存在跨项目通用层。

届时独立仓应使用中性生态名(如 fintec-ai-evaluation-cases),定位为生态评测用例与运行结果工具层,而非任何单一产品定义的一部分。