OpenMed 的 ask-openmed 工作流路由器:面向临床数据请求的确定性技能路由契约 OpenMed 的 ask-openmed 工作流路由器面向临床数据请求的确定性技能路由契约【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed当一条请求没有点名具体的 OpenMed 工作流、跨越多阶段摄入、脱敏、抽取、交换、验证或数据敏感状态不明时ask-openmed 技能以一套纯本地、确定性的路由契约把请求分发到正确的技能入口。读完本文你将掌握该路由器的五条应用规则、五大路由表与隐私覆盖privacy override的失效-关闭fail-closed设计并能理解仓库测试如何把这些行为不变量固化成 CI 可验证的约束。定位只做路由不碰数据SKILL.md 的 front matter 声明了该技能的元数据name: ask-openmed、category: openmed-core、pairs: adjacent表示它与相邻技能并列而非严格上下游。文档开宗明义地划定了它的职责边界只选择不执行它只从现有技能中选择一个技能标识符skill identifier本身不处理输入、不下载模型、不调用任何服务、不做临床决策零强制网络依赖路由过程中没有任何强制网络调用No mandatory network call is part of this route。这一点在配套文档 router.md 中同样被强调路由器返回一个已存在的技能标识符和下一步交接next handoff不检查临床载荷、不做临床判断。这是典型的选路器模式——把哪个技能先出场这一决策从自然语言启发式变成可复现、可审计的确定过程。确定性路由契约五条规则的执行顺序路由器要求按以下固定顺序应用规则以下完整继承自 SKILL.md 的 Deterministic routing contract 一节只规范化目标表述不触碰数据。对声明的目标goal做三件事转小写、去除首尾空白、折叠连续空白。明确禁止检查或复制数据载荷Do not inspect or copy the data payload。摄入Intake边界优先。若目标匹配任一 Intake 行则即使目标同时提到了后续阶段也先选中第一个匹配的摄入技能。若敏感状态不明其下一步交接就是隐私门deidentifying-clinical-text——先于任何抽取、交换或验证看到解析后的内容。无摄入线索时应用隐私覆盖。若请求要求分析、抽取、交换、分享、上传或验证临床/个人内容且未被显式标记为安全则从隐私门开始。唯一有效的安全标记是这八个短语synthetic input、synthetic note、synthetic record、synthetic dataset、input is synthetic、data is synthetic、already de-identified、already deidentified。若标记前的四个规范化词中出现了no、not、never、unknown、uncertain则该标记失效。任何模糊的安全声明一律按敏感处理。其余表格按固定交接顺序逐一检查隐私 → 抽取 → 交换 → 验证。每个逗号分隔的线索cue被视为规范化目标的大小写不敏感子串选中第一个匹配行。每个线索单元是若干备选项的逗号列表and/or等连接词没有特殊含义。不允许添加同义词或从载荷推断线索。阶段顺序与行顺序打破一切平局。无匹配时回退到方向性技能building-with-openmed。对多阶段请求路由器一次只路由一个阶段按固定交接顺序intake → privacy → extraction → exchange → verification。后续阶段不会因为它被先提及而绕过隐私门。路由输出的最小化契约路由输出只能包含四项所选类别、技能标识符、匹配到的规则索引、下一步交接。原文特别禁止把请求原文、输入值、异常文本或检测到的 span 回显进任何日志或报告Never echo the request, input values, exception text, or detected spans into a log or report。这与 OpenMed 整体的 no-PHI 日志原则一脉相承也呼应了 enforcing-nophi-logging 所覆盖的部署侧防护。五张路由表从摄入到验证的完整路线地图以下完整继承 SKILL.md 中的全部路由表链接已转换为仓库根路径。Intake外部格式进入本地可处理输入用于把外部文档或记录格式转成本地、可处理输入的第一步。目标线索首选技能之后继续laboratory table, lab tableextracting-lab-tables隐私然后验证scan, fax, image, PDF, CSV, table, document OCRingesting-clinical-documents隐私然后抽取C-CDA, CCD, CDA XMLparsing-ccda-documents隐私然后抽取HL7 v2, ADT, ORU, MDM, OBX, pipe-delimited feedparsing-hl7v2-messages隐私然后抽取DICOM header, DICOM-SR metadataextracting-dicom-metadata隐私然后抽取pull FHIR records, page FHIR records, FHIR serverfetching-fhir-resources隐私然后抽取注意第一行与第二行的顺序设计lab table是比table更具体的线索因此 lab 表行必须排在通用文档摄入行之前——这一细节被单元测试专门锁定见下文。Privacy显式隐私目标与隐私覆盖共用此表隐私表既服务于显式的隐私目标也服务于隐私覆盖第 3 条规则第一行是未指明敏感输入时的默认门。目标线索首选技能之后继续remove clinical identifiers, mask clinical identifiers, redact clinical text, anonymize clinical text, de-identify clinical textdeidentifying-clinical-text抽取或交换find identifiers, detect identifiers, PII entitiesextracting-pii-entities脱敏或复核privacy policy, privacy profileconfiguring-privacy-policies脱敏PHI in logs, PHI in errors, PHI in telemetry, no-PHI loggingenforcing-nophi-logging验证de-identify non-English text, multilingual de-identificationdeidentifying-multilingual-text抽取stable pseudonyms, approved linkage pseudonymspseudonymizing-for-gdpr验证Extraction找到并结构化临床含义在摄入与隐私处理之后当请求是关于找到/结构化临床含义时选用。目标线索首选技能之后继续diseases, drugs, anatomy, genes, clinical NERextracting-clinical-entities交换或验证custom entity labels, zero-shot extractionrunning-zeroshot-ner交换或验证housing, food, work, transport, SDOHextracting-sdoh验证lab values, units, reference ranges, abnormal flagsparsing-lab-values术语服务或交换radiology findings, radiology measurements, radiology impressionstructuring-radiology-reports交换或验证note sections, clinical sections, section segmentationsegmenting-clinical-sections抽取Exchange源数据确认安全后才进入交换类技能可以调用用户提供的端点或术语服务但路由器本身不发起任何网络调用。目标线索首选技能之后继续FHIR R4 resources, export to FHIRexporting-to-fhirBundle 或一致性验证FHIR transaction Bundle, FHIR batch Bundleassembling-fhir-bundles一致性验证FHIR Bulk Data export, bulk FHIRexporting-bulk-fhir隐私然后抽取SMART-on-FHIR app, SMART-on-FHIR launchscaffolding-smart-on-fhir一致性验证terminology validation, terminology expansion, terminology translation, terminology serverquerying-terminology-service交换或验证Verification发布、安全、泄漏、审计与符合性检查验证路由用于声明的发布、安全、泄漏、审计、风险或符合性检查。若源数据未被显式声明安全隐私覆盖依然先赢。目标线索首选技能决策或交接residual identifiers, de-identification leakageauditing-deid-leakage有发现即阻断发布de-identification audit trail, no-PHI audit trailauditing-deidentification-runs保留偏移量、哈希与溯源leakage gate, release leakageevaluating-with-leakage-gates泄漏即 fail closedre-identification risk, k-anonymity, quasi-identifiersreviewing-reidentification-risk复核残余风险Safe Harborauditing-safe-harbor-checklist复核无 PHI 报告FHIR US Core, USCDI conformancevalidating-us-core先修正资源再交换HIPAA privacy checklist, HIPAA security checklistchecking-hipaa-compliance先补差距再发布模糊目标与升级示例路由行为的六个边界判例SKILL.md 给出了六个覆盖典型歧义的判例它们共同演示了隐私覆盖 固定交接顺序如何消解模糊性Turn this clinical note into FHIR.——敏感性未声明起点是 deidentifying-clinical-text随后依次交接给 extracting-clinical-entities 与 exporting-to-fhir。Extract medications from a synthetic note.——输入被显式声明为合成数据直接路由到 extracting-clinical-entities。OCR this image and extract findings.——先路由到 ingesting-clinical-documents摄入边界优先抽取之前仍要过隐私门。Is this dataset safe to share?——若未声明已完成脱敏从 deidentifying-clinical-text 开始然后使用 auditing-deid-leakage。Verify this clinical dataset; it is not de-identified.——被否定negated的安全声明不算安全标记因此仍从 deidentifying-clinical-text 开始。这是四词否定窗口规则的直接应用。Which OpenMed workflow fits?——无具体目标使用方向性回退 building-with-openmed待目标与敏感状态明确后再重新路由。文档末尾还给出了一条元约束以上只是路由示例任何演示必须使用合成或占位数据且路由诊断中不得携带源内容。仓库佐证测试如何把路由契约变成可验证不变量路由器不是靠自觉遵守的约定仓库里有一组专门的测试把上述每条行为固化成断言。核心是 test_router_links.py它直接解析 SKILL.md 的文本结构并验证以下不变量链接封闭性test_router_links_resolve_to_existing_skill_identifiers检查路由表中的每个本地链接都必须解析到一个真实存在、且位于skills/目录下的SKILL.md任何试图逃逸技能目录树的链接都会失败章节与守卫句完整性test_router_has_all_goal_sections_and_a_privacy_override断言正文必须同时包含 Intake、Privacy、Extraction、Exchange、Verification 五个二级标题且必须包含 privacy override、no mandatory … network call、case-insensitive substring、stage order and row order break every tie、Do not inspect or copy the data payload、Never echo the request、matched rule index 等关键契约短语线索无歧义性test_router_cues_are_explicit_and_unambiguous解析每一行路由表要求所有线索非空、不含 or 连接词没有特殊语义且全局去重后线索数量不变不允许重复线索它还专门验证extracting-lab-tables行必须排在ingesting-clinical-documents行之前lab_row generic_table_row把具体行先于通用行写成了机器可查的约束敏感默认升级test_router_examples_escalate_ambiguous_sensitive_work断言正文必须包含The sensitivity is unstated、it is not de-identified、does not count as a safe marker等升级示例文本安全标记 fail-closedtest_router_safety_markers_fail_closed_on_negation断言八个安全标记与五个否定词no、not、never、unknown、uncertain全部在正文中显式列出且four normalized words before it与Treat every ambiguous safety statement as sensitive这两句必须存在摄入先于隐私门test_router_applies_intake_before_the_privacy_gate通过字符串位置比较验证2. Apply the intake boundary必须出现在3. For a goal with no intake cue之前。此外test_router_is_present_in_generated_catalogs还验证 ask-openmed 必须出现在两个目录中技能目录 skills/README.md由 build_catalog.py 生成与.claude-plugin/marketplace.jsonClaude Code 插件市场清单。也就是说路由器既要是行为契约也要是可被目录系统发现的正式技能。更广义的技能契约由 validate.py 统一校验它强制 kebab 命名^[a-z0-9](?:-[a-z0-9])*$、描述长度不超过 1024 字符、正文不超过 500 行、单个技能文件不超过 256 KB并且只报告仓库路径与固定消息从不把技能内容复制进校验日志——与路由器的 PHI-free 诊断原则在工具层相互呼应。在技能生态与文档中的位置ask-openmed 属于 OpenMed 的可移植 Agent Skills 体系skills/README.md 说明每个技能是一个含SKILL.md的文件夹遵循开放技能标准可原样用于 Claude Code、OpenAI Codex、OpenCode 及兼容客户端。仓库提供 install-skills.sh 一条命令安装如./install-skills.sh claude安装到~/.claude/skills/也可cp -r skills/*/ ~/.claude/skills/手动复制。路由器在其中扮演的正是总入口当用户用自然语言提出宽泛需求时agent 先经 ask-openmed 选出第一个工作流技能再进入具体技能执行。与 router.md 对照可见两者分工SKILL.md 是供 agent 逐字执行的完整契约含全部线索表router.md 是面向人类读者和外部链接场景的精简版说明并用同一组模糊性示例Turn this note into FHIR、Extract diagnoses from a synthetic note、Verify this clinical dataset; it is not de-identified复核行为一致性。CHANGELOG 中该技能对应的条目也概括了它的四个设计要点fail-closed 隐私覆盖针对模糊或被否定的安全声明、从摄入到验证的固定交接顺序、指向既有技能的规范链接、以及无 PHI 的路由诊断。小结ask-openmed 展示了一种可复用的 agent 技能编排模式用规范化目标 → 具体行先于通用行 → 阶段顺序打破平局的确定性子串匹配替代同义词猜测用八个白名单安全标记加四词否定窗口实现 fail-closed 的敏感默认用类别 标识符 规则索引 下一步交接的最小输出杜绝数据回显。整套契约由单元测试、目录生成与技能校验器三层工具保障使得该走哪个技能这一决策既对 LLM 可执行又对 CI 可验证。【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考