[控场AI]
· 14 分钟阅读· 7,033 字

用Claude与MCP构建隐私优先的医疗影像AI Agent

用Claude与MCP构建隐私优先的医疗影像AI Agent

以Aegis本地引擎配MCP窄工具,让模型只编排流程、不接触PHI的隐私优先Agent架构。

文章以医疗影像AI的隐私风险为切入,提出一套可复用的隐私优先Agent架构:Aegis作为本地去标识化引擎处理DICOM元数据与烧录文字,Claude通过MCP只调用六个窄口径工具(预热、单文件去标识化、批量启动、状态查询、运行摘要、复核队列),从而让图像像素与PHI始终留在本地信任边界内。方案强调工具返回schema本身就是安全控制,须排除图像字节、OCR文本、DICOM标签值和异常载荷,并对批处理采用start/status分离、对重型模型预热。文章还强调边界可测性——用MCP Inspector离线验证、负面测试索取患者姓名、比对审计CSV与对话摘要,并提醒去标识化是受监管主张而非合规保证。

医疗影像AI最敏感的环节,是把包含患者身份信息的原始数据交给模型。一个名为 Aegis 的本地去标识化引擎,配合 Claude 的 MCP(Model Context Protocol)工具调用能力,给出了一条值得借鉴的架构路线:模型只负责流程编排,图像像素与 PHI(受保护健康信息)始终留在本地信任边界内。

这套方案的核心承诺可以一句话概括——模型协调流程,敏感医疗数据不越界。它不只是技术演示,更是一种可复用的隐私优先 Agent 设计范式。

为什么隐私边界比功能更重要

传统的多模态助手要检查或转换一张图像,通常需要先把图像读入上下文。这意味着图像和其中可能包含的 PHI 都会经过模型这一层,形成一条本不必要的泄露路径。

而成熟的本地处理流水线其实早已具备处理这些文件的能力。MCP 的价值在于:它允许我们把动作(启动去标识化、查询状态、列出待复核队列)和结构化摘要暴露给模型,而不是把原始内容交给模型。

二者的区别是本质性的:前者是"授予访问患者数据",后者是"授予访问一小组经过批准的有限能力"。这确实降低了暴露面,但并不意味着系统自动合规、安全或通过临床验证。文件名、目录路径、计数、错误信息、工具返回值仍会进入对话,必须当作数据来对待。

隐私优先架构的第一步是最小化跨越边界的内容,第二步是验证边界确实守得住。

PHI(Protected Health Information,受保护健康信息) 是美国 HIPAA 隐私规则下的核心法律概念,指可关联到特定个人的健康状态、医疗服务或支付信息,且能识别个人身份的数据。它不仅包括诊断、处方、就诊记录,还包括姓名、出生日期、证件号、设备序列号、影像中的烧录文字,乃至能间接指向个人的文件路径和日期戳。判断某数据是否属于 PHI 的关键在于"可识别性"——同一信息去掉直接标识符后,若仍可通过组合关联还原到个人,仍可能被视为 PHI。这正是文章中反复强调文件名、目录路径、计数、错误信息也要当作数据对待的原因:它们的敏感度不取决于字段名,而取决于是否构成识别路径。

Aegis 在本地做了什么

Aegis 是整个方案中的本地处理引擎。MCP 并不会提升它的 PHI 检测准确率,也不会替代它的复核逻辑。

针对 DICOM 文件,Aegis 会清洗可识别元数据,并检查像素中元数据规则无法移除的"烧录文字"(burned-in text)。OCR 检测候选文本区域,NER 帮助分类敏感实体,策略规则决定哪些内容需要遮蔽、加入白名单或转人工复核。

输出结果包括:转换后的文件、像素检测记录、标签操作记录,以及一个针对不确定情况的人工复核队列。

这种职责分离至关重要:去标识化引擎负责医疗影像处理,Agent 负责流程协调。开发阶段应使用合成样本而非真实患者数据,并同时检查成功与不确定的结果。只有当 Agent 的摘要能追溯到流水线自身的审计证据时,它才真正值得信任。

DICOM(Digital Imaging and Communications in Medicine) 是医学影像领域通用的文件与通信标准,一张 CT 或 MRI 图像不仅包含像素矩阵,还附带大量元数据标签(患者姓名、检查编号、设备参数、机构信息等)。所谓"烧录文字"(burned-in text),是指超声、X 光或透视设备在成像时直接把患者姓名、检查时间、体位标注等字符渲染进像素本身,而不是放在元数据标签里。这类文字无法通过删除标签清除,必须依赖 OCR 在像素层定位、再决定遮蔽或复核。此外,OCR(光学字符识别) 负责把像素中的候选文本转录为字符串,NER(命名实体识别) 负责判断这些字符串属于人名、日期还是设备编号等类别,二者分工决定了后续策略规则的走向。

架构先行:谁在管什么

在写代码之前需要先把架构理清。Claude Desktop 是 MCP Host,FastMCP 进程是 Server,六个 Python 函数是可被 Claude 发现和请求的 Tool。

Host 将 Server 作为本地子进程启动,通过标准输入输出交换 JSON-RPC 消息。Server 在同一台机器上调用 Aegis,图像文件、模型、输出目录和复核队列都留在本地。只有经过 PHI 最小化处理的结果——任务状态、计数、文件名、路径、决策类别——会通过 MCP 返回。

用户坐在控制点上,批准工具调用,并将助手报告与审计文件进行比对。这一本地人机协作模式必须有目录限制和干净的日志记录才成立。

这个架构之所以有用,是因为每个组件只承担一个职责,敏感数据边界在视觉上可测试。

MCP(Model Context Protocol) 是一套让模型宿主与外部工具服务通信的开放协议,采用客户端—服务器结构:Host(如 Claude Desktop)负责发起对话和管理用户授权,Server 负责暴露可被发现的 Tool,二者通过 JSON-RPC 消息交互。当 Server 以本地子进程方式运行时,通常使用 stdio 传输——标准输入输出成为协议通道,这也解释了为何日志必须走标准错误(stderr)而非标准输出(stdout):任何多余的 print 都会污染 JSON-RPC 数据流。FastMCP 是基于 MCP 的 Python 实现框架,用于把普通 Python 函数快速注册为可被模型调用的工具,并自动生成工具描述与参数 schema。

划定信任边界:什么能过,什么不能过

最安全的设计从列清单开始——什么允许从 Aegis 流向 Claude,什么必须留在本地。

允许输出:聚合计数、任务 ID、已清洗文件名、状态转换、需复核标志。

禁止输出:图像字节、像素裁剪、OCR 文本、DICOM 标签值、原始异常载荷、再识别密钥。

即便是允许字段也需要仔细审查——嵌入在文件名或目录路径中的患者姓名依然敏感。因此工具返回的 schema 本身就是一项安全控制,而不只是方便响应的格式。

建议做一次"负面测试":直接要求 Agent 提供一个已检测到的患者姓名,确认没有任何工具能满足这个请求。只有当正常返回和失败路径都拒绝披露禁止内容时,边界才算真实存在。

设计六个窄口径工具面

Server 暴露六个工具:warm-up(预热模型)、deidentify_file(单文件去标识化)、start_batch_job(批量任务启动)、get_job_status(任务状态)、summarize_run(运行摘要)、list_review_queue(复核队列)。

每个工具只回答一个用户意图,返回易于检查和测试的受限结果。长耗时工作被拆分为 start 与 status 两个工具;审计类问题读取已有记录,而不是重新打开图像。

warm-up 控制真实去标识化请求前的模型加载延迟;review queue 工具只返回文件名和计数,帮助分配工作而不披露文件内容。

一个小的工具面比一个通用的"执行任何操作"函数更容易授权、文档化、测试和监控。面向安全的用户决策来设计工具,而不是照搬 Python 包里的每个内部函数。

用结构化摘要替代敏感细节

单文件工具接收本地输入路径和可选输出目录,把转换委托给 Aegis。它返回成功状态、源文件名、输出位置、检测计数、决策计数、清洗标签数和复核状态。

它刻意排除:图像数据、OCR 提取字符串、像素裁剪、原始 DICOM 值。

需要人工复核的标志把不确定检测转化为明确的下一步行动。异常也要在返回前清洗,因为库错误可能意外带出路径或敏感值。

用合成图像验证工具,并将报告计数与生成的审计行进行比对。只有当有用的摘要足够充分、敏感细节在结构上无法获取时,工具才算"设计上安全"。

保护 JSON-RPC 通道与日志

本地 stdio MCP Server 将标准输出保留给 JSON-RPC 消息。一句随意的 print 就可能破坏协议流,让一个健康的 Server 看起来像是断开或格式错误。

应用日志应通过 Python logging 输出到标准错误,既能保持可见,又不会变成协议数据。日志同样需要 PHI 最小化——换一个流并不会让敏感内容变得安全。

应记录事件名、任务 ID、已清洗文件名、计数、耗时、错误类别,而不是原始医疗值。要在故障场景下测试 Server,确认响应和日志都守得住。

批处理放到后台,模型留在对话里

一个目录可能包含成百上千张图像,一次阻塞式 MCP 调用是错误的交互模式。

start_batch_job 创建短任务 ID、初始化进度记录、启动 worker 并立即返回。Host 可以继续对话,本地进程更新已处理数、总数和错误数。get_job_status 读取该记录,无需触碰源图像或等待批处理完成。

内存注册表在 Server 进程存活期间可跨轮次工作,但重启后活跃任务 ID 会消失。已处理文件和审计报告留在磁盘上,持久化实现可以从持久任务记录中重建状态。

当工作耗时超过一次舒适交互的时间,就应该把 start 和 status 分开。

预热重型模型

OCR 与 NER 模型加载时间可能长到让第一次真实工具调用看起来超时。惰性流水线工厂只在需要时构建模型栈并缓存供后续调用。

warm_up 工具让这个成本变得显式、可观察、易于批准。预热后只返回简单的 ready 状态,而不是模型权重、样本文本或内部数据。同一个 Server 进程必须服务后续请求,缓存才有意义。

分别测量冷启动和热启动,让用户理解自己是在等待初始化还是文件处理。预热把一个不可预测的首次调用延迟变成工作流中可控的一步。

读取审计记录,而不是读取图像

summarize_run 读取 Aegis 已经生成的像素检测和标签操作 CSV,聚合成"已遮蔽""已加入白名单""低置信度"等决策类别,而不返回被检测到的字符串。

list_review_queue 识别需要人工关注的文件,但不打开或显示其内容。这些工具让 Claude 在处理完成后回答运营层面的问题,同时让原始图像留在上下文之外。

要限制响应大小并清洗文件名,避免一个庞大或命名糟糕的队列变成新的泄露通道。将审计文件视为唯一事实来源,对话摘要只是基于它派生的视图。

隐私优先 Agent 推理的是关于流程的证据,而不是敏感媒体本身。

用 MCP Inspector 先测一遍

在任何语言模型介入之前,先用 MCP Inspector 直接连接本地 Server,逐个演练每个工具。

用 aegis-mcp 可执行文件启动 Inspector,连接 stdio server,确认六个工具都可被发现。运行 warmup,然后对合成测试图像调用 deidentify_file,检查结构化 JSON 结果。使用 messages 视图查看请求与响应,同时检查终端中的 stderr 日志。

Inspector 测试能把 Server bug 与模型的工具选择行为、Claude Desktop 配置错误隔离开。在手动工具调用、错误用例和隐私负面测试表现完全符合预期之前,不要接入 AI host。

安全连接 Claude Desktop

Claude Desktop 需要一个指向虚拟环境中 aegis-mcp 可执行文件的 MCP server 条目。使用绝对路径,传参指定输出目录和复核目录,因为 Host 可能从非预期的工作目录启动。

设备选择要有意识:支持的 Apple Silicon 用 mps,兼容的 NVIDIA 用 cuda,可移植的兜底方案用 cpu。输出和复核位置应留在已批准的项目目录内,而不是授予任意文件系统访问权。

保存合法 JSON 后,完全退出并重启 Claude Desktop,以启动新的本地子进程。在批准任何调用之前,先确认六个工具都出现。一个成功的连接只能证明发现和传输正常,不能证明隐私控制或去标识化质量足够。

以工作流的方式与 Agent 对话

先请 Claude 预热 Server,批准工具调用并确认 ready 响应。对单个合成文件请求去标识化,检查返回的计数、输出位置和复核标志。

对一个文件夹,启动批处理任务并保留返回的任务 ID,而不是在一次长交互中等待。类似"那个任务进展如何"的后续问题,应该用同一标识符触发 get_job_status。完成后请求运行摘要和复核队列,再基于这些结构化结果起草一份可直接用于会议的报告。

助手可以叙述和组织证据,但绝不应声称自己目视检查过图像。良好的 Agent 行为是一串透明的、经批准的工具调用、可观察的结果和有边界的声明。

验证 Agent 的每一项声明

将助手的总数与流水线生成的像素检测 CSV、标签操作 CSV 和任务摘要 JSON 进行比对。已处理文件数、决策类别、错误和复核队列应在工具响应和磁盘记录之间保持一致。

如有不一致,应停止下游使用并创建调查项,而不是用自然语言"解释过去"。记录工具版本、配置、模型版本、时间戳和复核人决策,以支持可复现性。

文件和审计记录是事实来源,Agent 的回答是方便且可验证的解读。

Claude 仍然能看到什么

工具可以阻止像素、OCR 文本和 DICOM 值被返回,但对话元数据仍会到达模型。患者姓名可能通过文件名、文件夹名、提示词、异常或日志跨越边界,即使图像本身没有。

开发阶段使用合成标识符,并在 Agent 交互前按已批准策略重命名输入。返回错误码和已清洗类别,而不是原始堆栈跟踪或库异常。最小化路径、截断列表,在用户不需要完整文件系统细节时优先使用不透明任务 ID。

测试一次直接索取患者姓名的请求,验证可用工具无法回答。"模型从未看到图像"是正确的但也是不完整的——隐私审查必须覆盖通向本地进程的每一个字段。

加固本地工具边界

解析路径并强制每个请求的输入输出都留在显式的白名单根目录内。在模型开始处理前拒绝路径穿越、符号链接逃逸、不支持的扩展名、超大批次和意外的输出位置。

修改类工具保留审批提示,对 Server 进程应用最小权限,分离输入、输出和复核目录。固定包与模型版本,校验下载并记录配置哈希,使结果可复现。限制工具响应,清洗错误,将日志发送到 stderr,绝不在环境变量值中放置机密或 PHI。

为每条护栏添加单元测试,为集成测试使用合成 DICOM 和图像夹具。安全性来自分层:窄工具、受限路径、干净输出、显式批准、可审计证据和人工复核。

去标识化是一个受监管的主张

这个项目展示的是去标识化流水线的 Agent 界面,它并不证明数据集在 HIPAA 隐私规则下已合法去标识化。

HHS 描述了两条正式路径:Safe Harbor 和 Expert Determination。技术清洗器必须针对适用标识符、残余再识别风险、组织策略和预期数据用途进行评估。医疗图像可能包含标识符和元数据、烧录注释、文件名、周边记录以及可关联的上下文信息。

不确定案例必须交给合格的人工复核,真实部署需要安全、隐私、法律、临床和数据治理审批。即便正确去标识化,数据仍可能保留极小的非零再识别风险。

准确的说法是:这个教程为去标识化工作构建了控制措施和证据,而不是合规保证。

HIPAA 隐私规则为"去标识化"给出两条正式路径。Safe Harbor(安全港) 要求移除 18 类指定标识符,包括姓名、日期(除年份)、地理细分、电话号码、设备标识符、面部照片及任何唯一识别码,操作上较为机械但覆盖必须完整。Expert Determination(专家判定) 则允许由具备统计与科学资质的专家评估,只要证明识别个人的风险"非常小"即可,通常需要定量分析残余再识别风险。两条路径的适用性取决于数据类型、用途与接收方。需要注意的是,即便完成去标识化,数据仍被视为具有非零再识别风险,因此医疗 AI 部署往往还要叠加数据治理、访问控制与人工复核等多层措施。

这个模式还能用在哪

同样的 MCP 边界可以封装法律文件脱敏、财务记录掩码、机密日志处理等受控本地流水线。对于计划性的夜间处理,CLI 仍然更简单;MCP 在交互式人机协作与复核场景中最有价值。

下一步工程化方向是持久任务存储、更严格的目录策略、自动化隐私负面测试和独立验证。完全本地的模型 Host 可以减少外部对话暴露,但不能消除访问控制、审计和验证的需求。

系统越大,核心规则越要不变:暴露动作和证据,而不是敏感载荷。 这正是可复用的隐私优先 Agent 范式——本地处理、窄工具、显式复核、可验证的主张。

#MCP#Claude#医疗影像去标识化#隐私优先AI Agent#DICOM#PHI保护#本地AI处理#Aegis
分享:

相关推荐