OPEN API

开放 API

整套决策世界模型以一个 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>"}。 停用是软删除,历史调用记录保留。
POST/v1/simulate 同步 · 典型 40–90 秒

完整跑一遍五段推演链路并返回结果。这是唯一需要的核心接口。

请求参数

字段类型必填说明
textstring情境描述,20–8000 字。自由文本,无需任何格式
domainstring行业模板 id,默认 general,取值见下方
action_countnumber候选行动数量,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 }
}
以上为本平台一次真实推演的原始返回,未做任何修饰——可在 审计记录页中按 run_id 找到同一条记录逐项核对。
注意本例中 topActionChanged: true:若不做一致性校准,系统会把「支气管镜活检」而非「痰检」排在第一位。 校准把一个高信息量但高负担(burden 0.530)的有创操作,让位给了一个信息量较低但几乎无负担(burden 0.098)、 能先排除感染性病因的检查。
GET/v1/runs/{run_id}

取回完整推演记录,包含 /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;若观察到负值,属于实现缺陷,请报告
maxIpfResidualIPF 收敛后的最大边缘残差,正常应在 1e-14 量级。数值越小表示校准越彻底
rankKendallTau校准前后行动排序的 Kendall τ-b 秩相关。为 1 表示排序未变;小于 1 表示校准改变了推荐顺序
topActionChanged排名第一的行动是否发生变化。为 true 时,不做校准就会把另一个行动推荐给使用者
想直观看到这一机制,可用免密的 POST /api/kernel/calibrate 接口(见下)自行构造反例, 或访问校准对比实验页面。

错误码

状态码含义处理建议
400请求体不合法,或 text 少于 20 字 / 超过 8000 字按提示修正后重试
401密钥无效或已停用检查 Authorization 头
429超出调用频率限制退避后重试,或申请提高配额
500推演失败。常见原因:底座模型未能给出至少两个互斥假设,或全部候选动作推演失败 补充更多观测信息后重试;错误信息会说明具体失败环节
推演过程中的非致命问题不会导致失败,而是记入 warnings 数组并照常返回, 例如「某动作的分支后验键名无法对齐假设集合,已按顺序兜底」。 生产接入时建议对 warnings 非空的结果做人工复核。

免密只读接口

POST/api/kernel/calibrate 纯确定性 · 毫秒级

直接调用校准内核,不经过任何大模型。用于验证算法本身。

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 迭代次数与残差,以及非负性/有界性是否成立。

GET/api/health
GET/api/domains
GET/api/stats
GET/api/runs?limit=50&domain=medical

限制与 SLA

项目当前值说明
单次输入长度20 – 8000 字超长文本请先做摘要或分次推演
候选行动数2 – 6每个行动需要一次独立的前向推演调用
假设数上限6超出部分按相对可能性截取,并记入 warnings
调用频率30 次 / 分钟 / 密钥可按合同调整
请求超时660 秒同步接口,建议客户端超时设为 300 秒以上
数据留存完整记录落盘可按合同改为不落盘或定期清除;私有化部署时数据不出内网
私有化部署:整个平台是零第三方运行时依赖的 Node.js 服务, 底座模型地址通过环境变量 LLM_BASE_URL / LLM_MODEL 指定, 可替换为客户内网的任意 OpenAI 兼容端点。推演内核不联网、不上传任何数据。