Rna SDK
决策内核
JEV 判断的传输、阈值、缓存、账本,以及问题模板应该放在哪里。
决策内核是 Rna 调用 JEV 的唯一通道。代码分布在四个位置:
| 位置 | 内容 |
|---|---|
packages/sdk/src/decision-kernel.mjs | 传输、缓存、账本 |
packages/sdk/src/decision-templates.mjs | 阈值、问题模板,以及把概率合成为结论的函数 |
packages/sdk/src/decision-state.mjs | 状态构建 |
prototypes/control-center/decision-service.mjs | 宿主的调用点 |
模式与后端
- 模式:
off、shadow(只记录,不影响行为)、active。 - 后端:
typesafe(JEV)或llm(由语言模型担任判断)。 - 每个结果都标明
source:judge表示来自判断,fallback表示判断不可用时的规则兜底,rule表示宿主的确定性规则。 - 在 Rna 应用里,判断点都内置,默认
active,只有少数几个处于off或shadow;模式和后端只能用环境变量RNA_JEV_MODE、RNA_JEV_MODES、RNA_JEV_BACKEND做诊断覆盖。后端按 JEV 密钥、快速模型的顺序自动选择,用快速模型(llm)时所有阈值加 0.1。
阈值
阈值按后果轻重分档,常量是 decision-templates.mjs 中的 DECISION_THRESHOLDS。是非题的置信度取 max(p, 1 - p):
| 档位 | 阈值 |
|---|---|
| low | 0.60 |
| medium | 0.75 |
| high | 0.85 |
常量里另有下限 floor 0.5、快速模型的偏移 llmOffset 0.1,以及按判断点单独设定的数字阈值(例如有的点用 {act, ask} 两个阈值)。先在带标注的样本上看真实分布,再为每个问题选档位。不要从别的问题或别的题型照搬。
新增一个判断点
- 在
decision-templates.mjs写问题模板和合成函数。问题写成字面可观察的情况,一个问题只判断一件事。 - 把模板连同每个问题 ID 登记到
TEMPLATE_SPECS。漏登记时内核会以invalid_assessment_plan拒绝整个计划,packages/sdk/test/decision-templates-valid.test.mjs负责守住这一点。 - 在宿主的
decision-service.mjs里登记这个点(标题、风险档、作用),它才会出现在设置的“判断”记录里。 - 在
decision-state.mjs构建状态:只放判断需要的文本,长度、数量、日期在代码里算好再分档。 - 用探针在带标注的样本上跑一遍,把分布记在实测报告旁边,再选阈值。
探针
POST /api/v2/decision-kernel/probe
Content-Type: application/json
{ "state": "…", "questions": { "…": { "type": "noul", "instructions": "…", "criteria": "…" } } }探针用应用里已配置的密钥发一次原始调用,不经过阈值、缓存和账本。可复用的实验脚本是 prototypes/control-center/benchmark/jev-capability-probe.mjs;设置 RNA_STATE 指向主检出的 .state/state.json 可以读取真实规则正文。