用 Amazon Bedrock 构建可复用的医疗 AI 编排器:MHK 的多租户与事件驱动实践

2026-10-01 16 预计阅读时间: 1 分钟
来源: aws.amazon.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:10 分钟

医疗 AI 项目难的不只是调用大模型,更是把模型接入审核流程,同时控制敏感数据、租户隔离、审计记录和上线节奏。MHK 在 AWS 上构建了 SmartProminence AI Orchestrator,组合 Amazon Bedrock、Amazon ECS 与事件驱动模式,形成一个符合 HIPAA 使用资格要求的智能体工作流框架。根据案例摘要,该方案将人工医疗审核工作量降低了 90%,并把新 AI 功能的部署周期从数月压缩到数周。

编排器比单次模型调用更重要

一次 Amazon Bedrock API 调用只能完成局部任务。完整的医疗审核流程通常还需要:

  • 接收并验证业务请求;
  • 根据租户、产品和审核类型选择工作流;
  • 调用大模型提取信息、分类或生成建议;
  • 调用规则引擎、内部 API 或检索工具;
  • 对结果执行结构校验和置信度检查;
  • 将高风险或不确定结果交给人工复核;
  • 保存决策轨迹,但避免在日志中泄露受保护健康信息(PHI)。

因此,智能体不应被理解成一个可以自由行动的聊天机器人。更稳妥的设计是把它放进受约束的状态机:每一步允许调用哪些工具、可读取哪些数据、失败后如何重试,都由编排层明确控制。

结合摘要中提到的 AWS 服务,可以将参考架构组织为:

业务系统 / API
      |
身份认证、租户识别与请求校验
      |
事件总线或消息队列
      |
Amazon ECS 上的 AI Orchestrator
      |-- Amazon Bedrock:推理与结构化输出
      |-- 业务规则或受控工具
      |-- 人工审核队列
      `-- 审计与结果存储

这是基于相关服务能力整理的实践方式,并不代表 MHK 未公开的具体实现细节。事件驱动设计的价值在于解耦:业务入口不必等待整个 AI 流程结束,工作节点也可以独立扩缩容、重试和演进。

多租户复用不能只靠一个 tenant_id

可复用编排器能够缩短新功能上线时间,但多租户架构不能仅在请求中增加一个租户字段。租户上下文需要贯穿事件、权限、数据、提示词和审计链路。

建议至少明确以下边界:

  1. 入口身份绑定:租户标识应从经过验证的身份或服务凭证中派生,而不是直接信任客户端提交的值。
  2. 数据隔离:对象存储、数据库分区、加密密钥和检索索引都要执行租户级访问控制。
  3. 模型配置隔离:不同租户可以使用不同的模型、提示词版本、工具白名单和人工审核阈值。
  4. 资源保护:按租户设置并发、令牌和成本配额,避免一个租户耗尽共享容量。
  5. 可追溯性:记录工作流版本、模型标识、提示词版本、工具调用结果和最终审批人,但对日志内容做最小化与脱敏处理。

编排器可以复用的是执行骨架,而不是无条件共享全部数据和权限。新增 AI 功能时,理想状态是增加一个版本化工作流定义或任务处理器,而不是复制整套基础设施。

一个可改造的 Bedrock 工作节点

下面是一个最小化示例:ECS 工作容器读取事件,验证租户上下文,然后使用 Amazon Bedrock Converse API 对一段合成医疗审核文本进行结构化分析。示例中的内容不包含真实 PHI,可直接用于连通性测试。

先安装依赖并设置模型 ID。请将 BEDROCK_MODEL_ID 替换为当前 AWS 区域中已获准使用的模型:

python -m pip install boto3
export AWS_REGION=us-east-1
export BEDROCK_MODEL_ID='replace-with-an-enabled-model-id'

创建 event.json:

{
  "tenant_id": "demo-health-plan",
  "workflow": "medical-review-summary-v1",
  "case_id": "synthetic-001",
  "clinical_text": "Synthetic example: the request includes a diagnosis, but no documented prior conservative treatment."
}

创建 worker.py:

import json
import os
import sys

import boto3

ALLOWED_TENANTS = {'demo-health-plan'}
ALLOWED_WORKFLOWS = {'medical-review-summary-v1'}


def handle(event: dict) -> dict:
    tenant_id = event.get('tenant_id')
    workflow = event.get('workflow')

    if tenant_id not in ALLOWED_TENANTS:
        raise ValueError('Unknown tenant')
    if workflow not in ALLOWED_WORKFLOWS:
        raise ValueError('Unknown workflow')

    text = event.get('clinical_text', '')
    if not text:
        raise ValueError('clinical_text is required')

    client = boto3.client(
        'bedrock-runtime',
        region_name=os.environ.get('AWS_REGION', 'us-east-1'),
    )

    response = client.converse(
        modelId=os.environ['BEDROCK_MODEL_ID'],
        system=[{
            'text': (
                'You assist a human medical reviewer. Do not make a final '
                'clinical or coverage decision. Return concise JSON with keys '
                'summary, missing_evidence, and needs_human_review.'
            )
        }],
        messages=[{
            'role': 'user',
            'content': [{'text': text}],
        }],
        inferenceConfig={
            'temperature': 0,
            'maxTokens': 400,
        },
    )

    model_text = response['output']['message']['content'][0]['text']
    return {
        'tenant_id': tenant_id,
        'workflow': workflow,
        'case_id': event.get('case_id'),
        'model_output': model_text,
        'status': 'PENDING_HUMAN_REVIEW',
    }


if __name__ == '__main__':
    with open(sys.argv[1], encoding='utf-8') as file:
        event = json.load(file)
    print(json.dumps(handle(event), ensure_ascii=False, indent=2))

运行:

python worker.py event.json

这个示例刻意把最终状态设置为 PENDING_HUMAN_REVIEW。在真实医疗场景中,模型输出应该先经过 JSON Schema 校验、业务规则检查和风险分级,再决定是否可以自动进入下一步。生产环境还应使用 IAM 任务角色,不要把 AWS 密钥写入镜像或环境文件。

如果将其部署到 ECS,可以让消息队列中的每条事件对应一次任务处理,也可以运行长期驻留的消费者。需要提前定义幂等键,例如 tenant_id + case_id + workflow_version,防止消息重试造成重复审核或重复写入。

“HIPAA-eligible”不等于系统自动合规

Amazon Bedrock 或其他 AWS 服务具备 HIPAA 使用资格,并不意味着部署后的应用天然符合 HIPAA。组织仍需确认适用服务是否包含在与 AWS 签订的业务伙伴协议(BAA)范围内,并完成自身的技术与管理控制。

上线前应检查:

  • PHI 是否只进入经过批准的服务、区域和数据路径;
  • 传输中与静态数据是否加密,密钥权限是否最小化;
  • ECS 任务角色是否只能访问当前工作流需要的模型和资源;
  • 日志、指标、错误栈和提示词追踪是否会意外记录 PHI;
  • 是否定义数据保留、删除和审计策略;
  • 模型输出是否经过确定性校验,并保留人工复核通道;
  • 是否测试提示词注入、越权工具调用、跨租户访问和错误重试;
  • 模型、提示词或工作流升级后,是否重新执行质量与安全评估。

采用时从窄流程开始

MHK 案例展示了复用型 AI 编排层的核心收益:团队不必为每个医疗 AI 功能重新搭建模型调用、运行环境、事件处理和治理能力。但降低 90% 人工工作量不应被简单理解为取消人工审核,更合理的目标是让系统处理信息整理和低风险判断,把人的时间集中到例外与高风险案例。

落地时可以先选择输入边界清楚、结果容易验证、现有人工流程成熟的审核任务。建立基线指标后,再衡量处理时长、人工触达率、错误率、跨租户隔离和单次工作流成本。只有当安全控制与评估流程也能复用时,从“数月到数周”的交付提速才具有可持续性。


相关推荐