跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
PythonAI算法

医疗 AI 可信系统全栈实现:向量索引与贝叶斯网络

医疗 AI 可信系统构建需关注向量索引清洗、检索证据过滤及结构化表示的价值。通过文档切分与索引写入示例,展示数据预处理流程;强调分诊与药物任务中来源过滤的重要性。核心部分利用贝叶斯网络表示诊断状态,以胸痛场景为例,说明后验概率计算如何替代单一结论,结合风险阈值与 Agent 路由提升系统决策可靠性。

心动瞬间发布于 2026/4/7更新于 2026/8/2456 浏览
医疗 AI 可信系统全栈实现:向量索引与贝叶斯网络

文章配图

9.3 向量索引构建示例

文档进入向量库前,通常需要先经过清洗、切分、打标签和嵌入处理。下面展示一个最简流程,真实环境中可以替换为 Milvus 或 Qdrant SDK。

from dataclasses import dataclass
from typing import Iterable
import hashlib

@dataclass
class Chunk:
    chunk_id: str
    text: str
    metadata: dict

def chunk_document(doc_id: str, title: str, text: str, source_type: str) -> list[Chunk]:
    # 按段落切分,过滤空行
    parts = [p.strip() for p in text.split("\n\n") if p.strip()]
    chunks = []
    for i, part in enumerate(parts):
        # 生成唯一 ID,避免冲突
        cid = hashlib.md5(f"{doc_id}-{i}-{part[:100]}".encode()).hexdigest()
        chunks.append(
            Chunk(
                chunk_id=cid,
                text=f"[{title}]\n{part}",
                metadata={"doc_id": doc_id, "source_type": source_type, "seq": i},
            )
        )
    return chunks

def upsert_vector_store(chunks: Iterable[Chunk], embed_fn, store):
    rows = []
    for c in chunks:
        vec = embed_fn(c.text)
        # 将文本本身也存入 payload,方便后续回溯
        rows.append({"id": c.chunk_id, "vector": vec, "payload": c.metadata | {"text": c.text}})
    store.upsert(rows)

9.4 检索后的证据过滤

可信系统不能把 Top-k 检索结果直接交给 LLM。至少应做三步过滤:版本过滤、来源过滤和任务过滤。比如分诊任务应优先召回急诊路径与院内制度,而不是科研论文;药物风险任务应优先结构化说明书和高等级指南,而非社区帖子。经过过滤后,再做重排与证据回指,才能进入后续推理层。

9.5 结构化表示的真正价值

很多团队把结构化表示视为'加一道前处理',但事实上它改变的是系统认知方式。没有它,Agent 面对的是一堆文本;有了它,Agent 面对的是一个带证据索引的状态空间。前者天然容易走向语言幻觉,后者才有可能接入概率图模型与不确定性度量。

10 核心算法与代码实现(二):贝叶斯网络、风险阈值与 Agent 路由

10.1 用贝叶斯网络表示诊断状态

下面给出一个极简的胸痛场景示例。真实医疗系统当然远比这个复杂,但它足以说明'结论不是一句话,而是一组后验概率'。

from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination

model = BayesianNetwork([
    ("age_risk", "mi"),
    ("st_elevation", "mi"),
    ("troponin_high", "mi"),
    ("d_dimer_high", "pe"),
    ("tachycardia", "pe"),
    ("mi", "chest_pain"),
    ("pe", "chest_pain"),
])

cpd_age = TabularCPD("age_risk", 2, [[0.6], [0.4]])
cpd_st = TabularCPD("st_elevation", 2, [[0.85], [0.15]])
cpd_trop = TabularCPD("troponin_high", 2, [[0.8], [0.2]])
cpd_dd = TabularCPD("d_dimer_high", 2, [[0.7], [0.3]])
cpd_tachy = TabularCPD("tachycardia", 2, [[0.75], [0.25]])

cpd_mi = TabularCPD(
    "mi", 2,
    values=[
        [0.99, 0.85, 0.80, 0.30, 0.40, 0.10, 0.08, 0.01],
        [0.01, 0.15, 0.20, 0.70, 0.60, 0.90, 0.92, 0.99],
    ],
    evidence=["age_risk", "st_elevation", "troponin_high"],
    evidence_card=[2, 2, 2]
)

cpd_pe = TabularCPD(
    "pe", 2,
    values=[
        [0.97, 0.70, 0.50, 0.10],
        [0.03, 0.30, 0.50, 0.90],
    ],
    evidence=["d_dimer_high", "tachycardia"],
    evidence_card=[2, 2]
)

# 将 CPD 加入模型
model.add_cpds(cpd_age, cpd_st, cpd_trop, cpd_dd, cpd_tachy, cpd_mi, cpd_pe)

# 验证模型有效性
assert model.check_model()

# 进行推断
infer = VariableElimination(model)
query = infer.query(variables=["mi", "pe"], evidence={"age_risk": 1, "st_elevation": 1})
print(query)

在这个示例中,我们定义了节点之间的依赖关系,并填充了条件概率表(CPD)。实际运行时,VariableElimination 会计算给定证据下的后验概率分布。这种结构化的推理方式比单纯依赖 LLM 生成文本更可控,特别是在高风险的医疗决策场景中。

目录

  1. 9.3 向量索引构建示例
  2. 9.4 检索后的证据过滤
  3. 9.5 结构化表示的真正价值
  4. 10 核心算法与代码实现(二):贝叶斯网络、风险阈值与 Agent 路由
  5. 10.1 用贝叶斯网络表示诊断状态
  6. 将 CPD 加入模型
  7. 验证模型有效性
  8. 进行推断
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 2022 年大厂 Android 面试题汇总与解析
  • Llama.cpp 部署教程:老旧电脑运行大模型方案
  • FPGA 入门指南:从点亮第一颗 LED 开始
  • Neo4j Desktop 使用记录:本地实例、远程连接与 CSV 导入
  • Vue 项目前端国际化 i18n 实现指南
  • Java 8 Lambda 表达式与 Stream 流实战解析
  • Git 连接远程仓库指南
  • ComfyUI 与潜空间:AI 绘画技术原理解析
  • Linux 环境下配置海外软件源及 Antigravity 网络优化指南
  • 基于大模型的聊天助手案例:企业知识库与智能客服实践
  • 循环神经网络(RNN)与序列数据处理实战
  • Whisper 语音识别快速入门:从安装到使用
  • Windows 下多 Python 环境管理与灵活切换实战指南
  • VS Code 与 CMake 快速搭建 C++ 项目原型
  • Spring Boot 4.0 全面拥抱 Jackson 3 深度解析:特性、实战与迁移方案
  • LeetCode 179. 最大数:贪心策略与全序关系证明
  • Mac 本地部署 OpenClaw-CN 指南
  • 边缘 AI 技术详解:从概念到终端部署实践
  • 利用 Qoder 自然语言生成动漫短剧的 AIGC 智能体实战
  • Bun 替代 Node.js:更快的 JavaScript 运行时与开发体验

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • RSA密钥对生成器

    生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online

  • Mermaid 预览与可视化编辑

    基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online

  • 随机西班牙地址生成器

    随机生成西班牙地址(支持马德里、加泰罗尼亚、安达卢西亚、瓦伦西亚筛选),支持数量快捷选择、显示全部与下载。 在线工具,随机西班牙地址生成器在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • curl 转代码

    解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online