医疗编码是个典型的"看起来该自动化、但没人敢全自动"的场景。医生写的病历里充斥着"migrane"这种拼写错误,或者"胸口偶尔扑腾一下"这种口语化描述,而药企和监管机构需要把这些自由文本翻译成 MedDRA(不良事件标准医学术语词典)或 WHODrug(药品词典)里的标准化代码,才能做安全信号分析。一个编码错误,可能把某个不良事件归到错误的安全信号里,后果严重。但另一方面,这活儿又极其枯燥——熟练的编码员每天对着一条条症状逐条查词典。
AWS 这篇博客给出的方案,核心思路一句话:**把流程编排交给确定性的状态机,把需要判断的环节交给 AI Agent,并且让 Agent 只在最便宜的机制搞不定时才上场**。这个"最便宜优先"的升级策略,是整个设计的灵魂。
具体来说,整个工作流用 AWS Step Functions(AWS 的可视化工作流编排服务,可以定义状态机来串起各个步骤)编排,分三级处理每条症状文本。第一级是硬性安全拦截:一个"禁止自动编码"词表,里面是像"HAEMORRHAGE"(出血)这种太宽泛的术语——因为出血部位不同,编码完全不同,绝不能自动归类。这个检查在任何模型调用之前执行,所以它是个无法被提示词绕过的硬控制,而且零成本。第二级是精确匹配:对词典和人工维护的同义词表做大小写不敏感的精确查找,比如"Hypothyroid"映射到"Hypothyroidism"。只有匹配结果唯一对应一个代码时才接受。在 AWS 的示例数据集里,12 个病例中有 5 个在这一级就结束了——1 个被安全词表拦截,4 个以满分置信度自动编码,每个只花了一次索引查询的成本。超过三分之一的工作量根本到不了 Agent 那一步。
只有前两级都搞不定时,才轮到第三级:Amazon Bedrock AgentCore(AWS 的托管式 AI Agent 服务,负责管理 Agent 的运行时和工具调用)驱动的语义搜索。为什么这里需要 Agent?因为"什么时候该去查研究背景信息"是个判断问题,不是固定规则。在测试中,Agent 只对模糊术语调用研究信息工具,对清晰的术语直接跳过。Agent 负责选哪个代码、给出置信度,但它**不决定下一步发生什么**——路由决策全部由状态机掌控。这是整个设计里最关键的边界:如果把整个工作流交给 Agent,执行路径就变成了模型推理的产物,难以审查、难以重放。而现在,合规审查员读状态机定义就能理解执行路径,完全不需要关心 Agent 在运行时想了什么。
这个设计里还有几个值得抄作业的细节。一是状态机刻意选用标准工作流而非快速工作流,因为标准工作流保证恰好执行一次(exactly-once),且可查询的历史记录本身就是每条术语的审计轨迹。对于受监管的编码流程,回答"这条术语为什么这么编码、被谁编码的、什么时候"是硬性要求。二是写回数据库时,存的是症状的完整医学家族树,而不只是一个孤立的代码。比如"muscle spasms"(肌肉痉挛)会一路关联到它的上级分类"musculoskeletal and connective tissue disorders"(肌肉骨骼及结缔组织疾病),这样安全团队可以在任意层级汇总信号,而不只是最底层。三是 Agent 每次决策都要写一句话解释,这样如果类似症状在不同研究里被分到不同类别,团队能追溯具体的研究上下文,而不是对着一个泛泛的置信度分数猜。
架构上还有个务实的选择:参考数据(词典)和它的向量嵌入(embedding,把文本转成数值向量以便语义相似度计算)存在同一个 Amazon Aurora PostgreSQL 数据库里,用 pgvector 扩展(PostgreSQL 的向量检索插件),省掉了单独维护一个向量数据库的同步负担。
这个"确定性编排 + 有界 Agent 推理"的模式,价值远不止医疗编码。任何"大部分情况有明确规则、少数情况需要判断"的流程——比如工单分类、合同审查、客服升级——都可以套用:先用最便宜、最确定性的机制处理能处理的,把真正需要判断的留给 Agent,并且用状态机而不是 Agent 来决定路由。最让我意外的是那个安全词表的设计:把安全规则放在模型之前,而不是指望模型遵守规则。这个思路在 AI 应用里太容易被忽略了——与其费劲调提示词让模型别做某件事,不如在架构层面直接让它没机会做。
要注意的坑也很明确:这个示例只是演示,不能直接用于临床。生产环境必须用已知正确结果的数据集验证,测量编码精度和错误自动编码率。另外 MedDRA 和 WHODrug 都是商业授权词典,部署需要有效订阅。成本方面最大的开销是 Aurora Serverless v2 集群,即使空闲也按最低 0.5 ACU 计费,不用时记得删掉堆栈。

内容与图片版权归原作者所有 · 原文: https://aws.amazon.com/blogs/architecture/automate-medical-coding-with-step-functions-and-amazon-bedrock-agentcore/