整套决策世界模型以一个 HTTP 接口对外提供:传入一段自由文本描述的情境, 返回结构化世界状态、带概率的假设分布、按效用排序的候选行动,以及本次推演的一致性校准指标。 接入方无需理解内部算法,也无需自建大模型。
所有 /v1/* 接口使用 Bearer 令牌。密钥形如
dztx_ 加 48 位十六进制串,服务端只保存 SHA-256 哈希,明文仅在创建时返回一次。
Authorization: Bearer dztx_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
签发密钥需要管理员令牌(部署时通过环境变量
ADMIN_TOKEN 设置):
curl -X POST http://<host>/api/keys \
-H "X-Admin-Token: $ADMIN_TOKEN" \
-H "Content-Type: application/json" \
-d '{"label":"某三甲医院-试用"}'
DELETE /api/keys,请求体 {"id":"<密钥 id>"}。
停用是软删除,历史调用记录保留。完整跑一遍五段推演链路并返回结果。这是唯一需要的核心接口。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
| text | string | 是 | 情境描述,20–8000 字。自由文本,无需任何格式 |
| domain | string | 否 | 行业模板 id,默认 general,取值见下方 |
| action_count | number | 否 | 候选行动数量,2–6,默认 4。数量越多耗时越长 |
{
"run_id": "43b2d3ce-db95-49a7-9653-5dbac499cb16",
"domain": "medical",
"summary": "58岁男性,长期吸烟,新发刺激性干咳、痰中带血、体重下降、盗汗,CT示肺部恶性征结节伴纵隔淋巴结肿大",
"urgency": "urgent",
"risk_score": 86,
"entropy_bits": 1.8967,
"observability": 0.4722,
"hypotheses": [
{ "id": "h1", "label": "非小细胞肺癌(NSCLC),肺腺癌可能性大", "posterior": 0.3882 },
{ "id": "h2", "label": "肺结核(慢性纤维空洞型或淋巴结结核)", "posterior": 0.2869 },
{ "id": "h3", "label": "肺真菌病(如隐球菌或曲霉感染)", "posterior": 0.1772 },
{ "id": "h4", "label": "类癌或神经内分泌肿瘤", "posterior": 0.1477 }
],
"recommendations": [
{ "rank": 1, "action": "痰抗酸染色、Xpert MTB/RIF及真菌培养",
"utility": 0.5244, "info_gain_bits": 0.2621,
"timeliness": 0.929, "burden": 0.098, "expected_risk": 55.0 },
{ "rank": 2, "action": "支气管镜检查+活检及刷检",
"utility": 0.5189, "info_gain_bits": 0.6281,
"timeliness": 0.893, "burden": 0.530, "expected_risk": 72.6 },
{ "rank": 3, "action": "PET-CT全身显像",
"utility": 0.4842, "info_gain_bits": 0.2409,
"timeliness": 0.964, "burden": 0.327, "expected_risk": 67.6 }
],
"calibration": {
"actionsEvaluated": 3, "coherenceViolations": 3, "violationRate": 1,
"negativeInfoGain": 0, "negativeRate": 0,
"meanMarginalError": 0.088942, "maxMarginalError": 0.120135,
"minRawInfoGain": 0.1455, "minCalibratedInfoGain": 0.2409,
"maxIpfIterations": 49, "maxIpfResidual": 8.83e-15,
"rankOrderCalibrated": ["a2", "a1", "a3"],
"rankOrderUncalibrated": ["a1", "a2", "a3"],
"rankKendallTau": 0.3333, "rankChanged": true, "topActionChanged": true
},
"report": { "headline": "优先痰检排查感染性病因,避免过早有创检查",
"reasoning": "...", "safetyNet": [...], "watchouts": [...] },
"warnings": [],
"telemetry": { "totalMs": 93435, "kernelDeterministic": true, "kernelTrainableParams": 0 }
}
topActionChanged: true:若不做一致性校准,系统会把「支气管镜活检」而非「痰检」排在第一位。
校准把一个高信息量但高负担(burden 0.530)的有创操作,让位给了一个信息量较低但几乎无负担(burden 0.098)、
能先排除感染性病因的检查。取回完整推演记录,包含 /v1/simulate 精简返回中省略的部分:
每个结构化变量的证据出处、每个动作的逐结局分支及其校准前后条件后验、
未校准对照组的完整打分。用于合规审计与第三方独立复算。
curl http://<host>/v1/runs/8f3c1a94-...-2b6e \ -H "Authorization: Bearer $DZTX_KEY"
模板只改变三件事:效用函数的权重、时间预算、以及给底座模型的角色提示。 推演内核完全相同——新增一个行业不需要改内核任何一行代码。
| id | 名称 | 决策对象 | 信息权重 | 时效权重 | 代价权重 | 时间预算 |
|---|
| 字段 | 含义 |
|---|---|
| entropy_bits | 先验信念的香农熵 H(b),单位 bit。越大表示当前越不确定;上界为 log₂K,K 为假设数 |
| observability | 观测覆盖度:显著性加权的已观测变量比例,按未补齐的信息缺口折损,取值 [0,1] |
| hypotheses[].posterior | 当前信念 b(h),各项之和为 1 |
| info_gain_bits | 执行该行动的期望信息增益 IG(a) = H(b) − Σo P(o|a)·H(q*(·|o,a)),单位 bit |
| timeliness | 时效契合度:1 − min(τ/(2·B), 1),τ 为出结果所需天数,B 为该行业的时间预算 |
| burden | 执行负担:0.5·不可逆性 + 0.3·成本 + 0.2·min(τ/30, 1),取值 [0,1] |
| expected_risk | 按结局分支概率加权的期望风险分,0–100 |
| utility | 综合效用 U(a) = winfo·ĨG + wtime·S + wburden·(1−C),ĨG 为按 log₂K 归一化的信息增益。排序即按此值降序 |
utility 与排序。
calibration 是本平台区别于「让大模型直接给建议」的关键,它记录了底座模型这一次的输出质量。
| 字段 | 怎么读 |
|---|---|
| violationRate | 本次有多大比例的候选行动,其条件后验违反全概率约束 Σ P(o|a)·q(h|o,a) = b(h)。 这是底座模型的固有缺陷,不是使用者的输入问题 |
| negativeInfoGain | 有多少个行动的原始信息增益为负。负值在物理上不可能——做一次检查不会让人更不确定。 出现负值即证明输入的条件后验不自洽 |
| minCalibratedInfoGain | 校准后的最小信息增益。由定理保证 ≥ 0;若观察到负值,属于实现缺陷,请报告 |
| maxIpfResidual | IPF 收敛后的最大边缘残差,正常应在 1e-14 量级。数值越小表示校准越彻底 |
| rankKendallTau | 校准前后行动排序的 Kendall τ-b 秩相关。为 1 表示排序未变;小于 1 表示校准改变了推荐顺序 |
| topActionChanged | 排名第一的行动是否发生变化。为 true 时,不做校准就会把另一个行动推荐给使用者 |
POST /api/kernel/calibrate 接口(见下)自行构造反例,
或访问校准对比实验页面。| 状态码 | 含义 | 处理建议 |
|---|---|---|
| 400 | 请求体不合法,或 text 少于 20 字 / 超过 8000 字 | 按提示修正后重试 |
| 401 | 密钥无效或已停用 | 检查 Authorization 头 |
| 429 | 超出调用频率限制 | 退避后重试,或申请提高配额 |
| 500 | 推演失败。常见原因:底座模型未能给出至少两个互斥假设,或全部候选动作推演失败 | 补充更多观测信息后重试;错误信息会说明具体失败环节 |
warnings 数组并照常返回,
例如「某动作的分支后验键名无法对齐假设集合,已按顺序兜底」。
生产接入时建议对 warnings 非空的结果做人工复核。直接调用校准内核,不经过任何大模型。用于验证算法本身。
curl -X POST http://<host>/api/kernel/calibrate \
-H "Content-Type: application/json" \
-d '{
"prior": [0.40, 0.30, 0.20, 0.10],
"branchProbs": [0.50, 0.30, 0.20],
"posteriors": [[0.70,0.15,0.10,0.05],
[0.10,0.60,0.20,0.10],
[0.05,0.20,0.55,0.20]]
}'
返回校准前后的边缘分布、边缘偏差、信息增益、 IPF 迭代次数与残差,以及非负性/有界性是否成立。
| 项目 | 当前值 | 说明 |
|---|---|---|
| 单次输入长度 | 20 – 8000 字 | 超长文本请先做摘要或分次推演 |
| 候选行动数 | 2 – 6 | 每个行动需要一次独立的前向推演调用 |
| 假设数上限 | 6 | 超出部分按相对可能性截取,并记入 warnings |
| 调用频率 | 30 次 / 分钟 / 密钥 | 可按合同调整 |
| 请求超时 | 660 秒 | 同步接口,建议客户端超时设为 300 秒以上 |
| 数据留存 | 完整记录落盘 | 可按合同改为不落盘或定期清除;私有化部署时数据不出内网 |
LLM_BASE_URL / LLM_MODEL 指定,
可替换为客户内网的任意 OpenAI 兼容端点。推演内核不联网、不上传任何数据。