跳转到内容

证据链

每个分析操作都会把证据写入会话。这些证据让智能体不只说明发生了什么, 也能说明它如何得出结论;人工审阅者可以沿着这条链追溯到产生结果的输入。

这些记录是仅追加的,并持久化在会话的判断存储中(位于项目本地的 .marivo/)。因此,会话结束后,结论仍然可审计、可重放。

证据链分三个层次记录,从原始观察到带版本的判断:

层次它是什么关键字段
证据项从单个产物中提取的原子、类型化观察(例如“West 区域 revenue 环比下降 12%”)。finding_typeartifact_idsubjectobserved_windowquality_status
命题由系统播种、关于某个主体的论断,从证据项派生(例如“Q4 的 revenue 发生了变化”)。proposition_typesubject_keyseed_finding_refs
评估对某个命题的、带版本的判断:它的状态与置信度。statusconfidenceconfidence_basissupersedes_idis_latest

证据项与命题是不可变的。重新运行操作不会原地修改判断,而是写入一条 新的 评估来取代上一条(supersedes_id),并把最新的一条标记为 is_latest。 完整的判断历史会被保留下来。

session.knowledge() 返回一个不可变的 SessionKnowledge 快照。这是智能体用来决定下一步的 读取视图,承载观察摘要已确定的事实未决的打开项

knowledge = session.knowledge()
# 观察到了什么:每次 observe / derive_metric_frame commit 对应一条有界 digest。
for obs in knowledge.observations():
print(obs.subject.metric, obs.semantic_kind, obs.analysis_purpose, obs.digest)
# 已确定的 facts:带有当前 assessment 的 propositions。
for fact in knowledge.facts(kind="driver"):
print(fact.dimension, fact.contribution_share, fact.status)
# Open items:等待跟进的未决 anomalies 与 questions。
for item in knowledge.open_items(kind="anomaly"):
print(item.subject, item.confidence)
# 建议的下一步 operators,已排序。
for action in knowledge.next_steps(top=3):
print(action)

observations() 按 commit 顺序返回有界摘要:按形状分派的取值摘要(标量的值; 时间序列的首末/极值/方向;segmented 按绝对值排序的 top segments),外加窗口、行数和 analysis_purpose。合计与占比属于组合语义,仅对可加(可加)指标填充; 非可加指标(比率、分位数、采样折叠等)保留逐段取值但不给出合计/占比, 非可加的面板也不做跨桶的分段排名。观察是 ground 事实而不是待检验主张, 因此不携带状态或 confidence。

事实分为五种,每种由一个操作产生:

Fact 种类由谁产生携带
changecompare方向、幅度、对比窗口
driverattribute维度、贡献占比、贡献角色
tested_hypothesishypothesis_test方法、alpha、p 值、是否拒绝原假设
forecastforecast预测窗口、horizon、预测区间
associationcorrelate相关系数、滞后期、连接依据

SessionKnowledge 还提供 open_items(kind="question")blocked_followups()(在某个问题 解决前无法运行的后续项),以及 for_subject(subject) 将整个快照过滤到单个主体。 evidence_completeness 报告底层证据是 completepartial 还是 unavailable

要获取原始记录与完整审计链,使用 session.evidence 命名空间:

方法返回
session.evidence.findings(...)证据项,可按 artifact_idfinding_typesubject 过滤。
session.evidence.propositions(...)命题,可按 proposition_typesubjectstatus 过滤。
session.evidence.assessments(...)评估,默认仅返回最新的。
session.evidence.proposition(id)按 id 取单个命题。
session.evidence.latest_assessment(id)当前评估;若从未评估则返回 None
session.evidence.trace(id)某个命题的完整 EvidenceTrace

trace(id) 是审计入口:EvidenceTrace 会把命题连接到它的 latest_assessmentseed_findings、判断背后的 support_findingsoppose_findings,以及产生它的 source_artifactssource_steps

props = list(session.evidence.propositions(proposition_type="change"))
trace = session.evidence.trace(props[0].proposition_id)
print(trace.proposition.subject_key, "", trace.latest_assessment.status)
for finding in trace.seed_findings:
print(finding.finding_type, "from", finding.artifact_id)

人工审阅者可以沿着这条链,从一个结论回溯到支持它的具体观察与分析步骤。这也是 Marivo 结论 “可审计”而不只是“看起来合理”的原因。关于写入这些证据的操作,参见 分析流程