mcpField
T
tooluniverse-product-safety-surveillance

tooluniverse-product-safety-surveillance

github.com/mims-harvard数据与数据库1.8k117 次安装3 天前更新
代码仓库

关于 tooluniverse-product-safety-surveillance

这是一个 ToolUniverse skill,用于检索和解读覆盖多类 FDA 监管产品的上市后安全记录,包括器械、食品、兽药、药品短缺和召回。它指导产品分类、查询构建与引用,并明确不用于药品不良事件信号检测。

主要功能

  1. 01检索多类产品的 FDA 安全记录
  2. 02按问题匹配 openFDA 工具和端点
  3. 03指导构建 Lucene 查询
  4. 04说明记录字段及其局限
  5. 05要求引用来源和结果总数

适用场景

  1. 01查看器械不良事件报告或召回
  2. 02查询食品、补充剂或化妆品报告
  3. 03查找兽药报告或药品短缺
  4. 04检索跨产品类别的执法记录

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mims-harvard/tooluniverse --skill tooluniverse-product-safety-surveillance

安装后在 Claude Code 中输入/tooluniverse-product-safety-surveillance确认已加载。

附带文件evals/evals.jsonreferences/openfda_fields.md

详细介绍

产品安全监测(多产品,openFDA)

检索并解读除药物不良事件信号挖掘之外,所有受 FDA 监管的产品类别的上市后安全记录:医疗器械、食品/膳食补充剂/化妆品、兽药和药品供应(短缺),以及跨产品的执法/召回报告。

关键原则

  1. 首先确定产品类别。 是医疗器械?食品/补充剂/化妆品?兽药?药品短缺?召回?产品类别决定所用工具。
  2. 构建有效的 Lucene 查询。 openFDA 使用字段范围限定的 field:value 术语;用空格分隔的 AND 组合。使用短语和特殊字符时需谨慎(参见 Query Grammar)。
  3. 先检索,再解读。 这些是自发/自愿报告。报告记录及其字段;绝不声称存在因果关系或发生率。
  4. 为每条记录提供引用,包括工具名称、openFDA 端点、所用查询,以及来自 meta.results.total 的 total 命中数。
  5. 遵守范围。 如果请求涉及药物不良事件信号检测(PRR/ROR/IC),请停止并指向 tooluniverse-pharmacovigilance / tooluniverse-adverse-event-detection。

何时使用与何时不使用

适用于:

  • 医疗器械不良事件(MAUDE):“[器械] 的不良事件/故障/死亡”
  • 医疗器械召回与执法:“[公司] 的器械召回”“I 类器械召回”
  • 医疗器械许可背景:“[器械类型] 的 510(k) 许可”
  • 食品/膳食补充剂/化妆品不良事件(CAERS):“补充剂反应”“[品牌] 化妆品不良事件”
  • 食品召回/执法:“李斯特菌/未标明过敏原的食品召回”
  • 兽药不良事件:“[药物] 在犬类中的不良事件”
  • 药品短缺:“[药物] 是否短缺”“当前短缺的注射剂”
  • 药品召回/执法:“因污染导致的药品召回”

不适用于(请转至其他技能):

  • 药物不良事件信号检测/不均衡分析(PRR、ROR、IC)→ tooluniverse-pharmacovigilance 或 tooluniverse-adverse-event-detection
  • 药物不良事件关联强度评分、药物不良事件的人口统计学风险分层 → 同上两个技能
  • 药物疗效、作用机制、药物基因组学 → 其他 tooluniverse-* 技能

此技能检索并解读多产品安全记录。它不会计算药物不良事件信号统计数据。


工具对照表(针对不同问题使用哪个工具)

产品类别问题工具openFDA 端点
器械不良事件 / 故障 / 死亡(MAUDE)OpenFDA_search_device_adverse_events/device/event.json
器械召回OpenFDA_search_device_recalls/device/recall.json
器械执法 / 召回报告OpenFDA_search_device_enforcement/device/enforcement.json
器械510(k) 许可(背景信息)OpenFDA_search_device_510k/device/510k.json
器械唯一器械标识符(UDI)查询OpenFDADevice_search_udi--
器械美国监管类别(1/2/3)OpenFDADevice_get_classification--
器械上市前批准(PMA,3 类器械)OpenFDADevice_search_pma--
食品 / 补充剂 / 化妆品不良事件(CAERS)OpenFDA_search_food_adverse_events/food/event.json
食品执法 / 召回报告OpenFDA_search_food_enforcement/food/enforcement.json
兽医动物药品不良事件OpenFDA_search_animalvet_adverse_events/animalandveterinary/event.json
药品供应短缺OpenFDA_search_drug_shortages/drug/shortages.json
药品执法 / 召回报告OpenFDA_search_drug_enforcement/drug/enforcement.json
药品不良事件(原始 FAERS 记录)OpenFDA_search_drug_events/drug/event.json
药品标签OpenFDA_search_drug_labels/drug/label.json

所有工具都接受 Lucene search 字符串,以及可选的 limit 和 skip。所有工具均无需密钥,并已通过实时验证。

注意:OpenFDADevice_search_recalls/_search_adverse_events/_search_510k 返回的底层 openFDA 数据与上方的 OpenFDA_search_device_recalls/_device_adverse_events/_device_510k 相同(两个独立添加的封装对应相同端点)——任选其一即可,无需同时调用。使用已加载工具集中现有的工具即可;OpenFDADevice_* 系列还额外提供三个工具:UDI、分类和 PMA 查询,另一系列没有对应工具。


openFDA 查询语法(至关重要——查询前请阅读)

  • 字段限定词: field:value(例如 event_type:Death、status:Current)。
  • 嵌套字段使用点路径: device.generic_name:pacemaker、products.industry_name:Cosmetics、animal.species:Dog、reaction.veddra_term_name:Vomiting、drug.active_ingredients.name:carprofen。
  • 使用空格分隔的 AND 组合条件(已验证可用):device.generic_name:pacemaker AND event_type:Death。
    • 不要使用 +AND+——通过这些工具使用以 + 连接的布尔形式会导致错误。请在 AND 两侧使用字面空格。
  • 多词值: 仅在单个字段值中用于连接相邻词时使用 +(例如 device.generic_name:infusion+pump)。这会按词元匹配,而非精确短语。
  • 避免在值中使用原始特殊字符((、)、/、开头的 +)——这些字符会导致查询失败。请改用更简单的词元(例如,使用 products.industry_name:Dietary,而不是完整的 Dietary Conventional Foods/Meal Replacements)。
  • 日期均为字符串:器械 AE/MAUDE 使用 YYYYMMDD(例如 date_received);召回 / 执法使用 YYYY-MM-DD(例如 event_date_initiated、recall_initiation_date)。
  • 结果封装: 每次成功调用都会返回 {status:"success", data:{meta:{results:{total, skip, limit}}, results:[...]}}。从 data.meta.results.total 读取命中数。
  • 计数 / 聚合: openFDA 原生支持 &count=<field>;这些 TU 封装主要围绕 search。若要对词项排序,请检索一批结果(例如 limit:100),然后在 Python 中自行统计相应字段。

解读表(原始 openFDA 字段 → 含义)

医疗器械 — MAUDE 不良事件 (/device/event.json)
字段含义
event_typeDeath、Injury、Malfunction 或 No answer provided。Death/Injury = 患者受到伤害;Malfunction = 器械故障,但没有(报告的)伤害。
device[].generic_name / device[].brand_name器械类别 / 商品名。
device[].manufacturer_d_name器械制造商。
patient[]患者层面的结局数据(可能较少)。
mdr_text[].text叙述内容;text_type_code 用于区分事件描述和制造商叙述。
report_numberMAUDE 报告 ID。同一事件的重复报告 / 后续报告很常见——不要将报告视为不同事件计数。
date_receivedFDA 收到报告的日期,格式为 YYYYMMDD。
医疗器械 — 召回 (/device/recall.json)
字段含义
product_description被召回的产品。
recalling_firm发起召回的公司。
recall_status例如 Open、Terminated。Terminated = FDA 已关闭该行动。
product_codeFDA 器械产品代码。
k_numbers[]关联的 510(k) 批准编号。
root_cause_descriptionFDA 根因类别(例如 Labeling design)。
event_date_initiated召回开始日期,格式为 YYYY-MM-DD。
执法报告(器械 / 药品 / 食品 /.../enforcement.json)
字段含义
classification召回严重程度:Class I(严重 / 致命危害)、Class II(暂时性 / 可逆)、Class III(不太可能造成伤害)。
statusOngoing / Terminated / Completed。
reason_for_recall召回原因。
product_description被召回的产品。
recalling_firm公司。
食品 / 膳食补充剂 / 化妆品 — CAERS 不良事件 (/food/event.json)
字段含义
reactions[]MedDRA 反应术语(英式拼写,例如 Diarrhoea、Nausea)。
outcomes[]例如 Hospitalization、Life Threatening、Disability、Death、Other Serious or Important Medical Event、Visited an ER。
products[].industry_name产品类别(Cosmetics、Dietary Conventional Foods/Meal Replacements、Milk/Butter/Dried Milk Prod 等)。
products[].roleSUSPECT(疑似相关)与 CONCOMITANT(同时食用)之分。
products[].name_brand品牌名。
consumer消费者的 age、gender(通常信息较少)。
兽医 — 动物药品不良事件 (/animalandveterinary/event.json)
字段含义
animal.speciesDog、Cat、Horse 等。
animal.gender动物性别。
number_of_animals_affected报告中受影响的动物数量。
reaction[].veddra_term_nameVeDDRA 临床症状(例如 Vomiting、Diarrhoea)。
drug[].brand_name / drug[].active_ingredients[].name涉及的产品 / 活性成分。
drug[].used_according_to_label / off_label_use按标签使用 / 超说明书使用。
药品短缺 (/drug/shortages.json)
字段含义
statusCurrent 或 Resolved。
availability例如 Unavailable、Limited。
generic_name短缺药品。
shortage_reason例如 Delay in shipping of the drug、Demand increase for the drug。
dosage_form例如 Injection、Tablet。
therapeutic_category[]临床类别。
company_name制造商。
update_type / initial_posting_date / update_date发布元数据。

工作流

  1. 根据请求对产品分类(器械 / 食品-补充剂-化妆品 / 兽医 / 药品短缺 / 召回)。
  2. 从工具映射表中选择工具。
  3. 按照查询语法构建 Lucene 查询(首轮使用单个字段;组合查询时添加 AND)。值尽量简单,避免使用特殊字符。
  4. 运行查询并读取 data.meta.results.total 和 data.results[]。
  5. 结合上表解读字段。严重程度判断标准:器械 event_type:Death;执法 classification:Class I;CAERS outcomes:Death/Hospitalization;短缺 status:Current。
  6. 总结并引用。报告数量、关键字段、使用的查询,以及“局限性”注意事项。若要对术语排序,获取 limit:100,并使用 Python 统计(这些封装中没有 count 聚合)。
  7. 如果超出范围(药品不良事件信号/PRR/ROR),停止操作并转交给药物警戒技能。

操作示例(已实时验证)

示例 1 — 某类器械相关的死亡事件(MAUDE)

“起搏器的不良事件报告中是否有死亡报告?”

OpenFDA_search_device_adverse_events {"search":"device.generic_name:pacemaker AND event_type:Death","limit":1}

实际输出(缩略):status:success,meta.results.total = 16619;首条记录的 event_type = Death,device.generic_name = DEFIBRILLATOR/PACEMAKER。 解读:共有 16,619 条 MAUDE 报告符合起搏器器械且事件类型为 Death。这些是自发报告——很可能存在重复;“Death”表示报告了在时间上相关联的死亡,并不表示器械导致了死亡。

示例 2 — 某公司的器械召回

“Medtronic Navigation 发布了哪些器械召回?”

OpenFDA_search_device_recalls {"search":"recalling_firm:Medtronic","limit":1}

实际输出(缩略):total = 1896;首条记录的 recall_status = Terminated,product_code = HAW,root_cause_description = Labeling design,k_numbers = ["K990214"],event_date_initiated = 2011-01-20,product_description = 一种用于脊柱手术的触觉探针。 解读:共有 1,896 条召回记录符合包含“Medtronic”的公司。recall_status: Terminated 表示 FDA 已结案;根本原因是标签设计问题。

示例 3 — 查询注射剂的药品短缺情况

“酮咯酸注射剂目前短缺吗?”

OpenFDA_search_drug_shortages {"search":"dosage_form:Injection AND status:Current","limit":1}

实际输出(缩略):total = 799;首条记录的 generic_name = Ketorolac Tromethamine Injection,status = Current,shortage_reason = Delay in shipping of the drug,availability = Unavailable,company_name = Fresenius Kabi USA, LLC。 解读:共有 799 条当前短缺记录为注射剂;酮咯酸氨丁三醇注射剂目前处于短缺状态(status 为 Current,availability 为 Unavailable),原因是运输延误。

示例 4 — 补充剂 / 化妆品的 CAERS 反应

“是否有涉及化妆品的 CAERS 不良事件报告?”

OpenFDA_search_food_adverse_events {"search":"products.industry_name:Cosmetics","limit":1}

实际输出(缩略):total = 52214;首条记录的 products[].industry_name = Cosmetics,products[].role = SUSPECT,outcomes = ["Hospitalization","Other Serious or Important Medical Event"]。 解读:共有 52,214 条 CAERS 报告将化妆品列为 SUSPECT 产品。CAERS 为自愿报告系统;SUSPECT 角色反映的是报告者的归因,并非经过验证的因果关系。

示例 5 — 某物种使用某药物的兽医不良事件

“狗使用卡洛芬后报告了哪些不良事件?”

OpenFDA_search_animalvet_adverse_events {"search":"drug.active_ingredients.name:carprofen AND animal.species:Dog","limit":1}

实际输出(缩略):total = 46469;首条记录的 animal.species = Dog,reaction[].veddra_term_name 包含 Leucocytosis NOS、Neutrophilia、Depression、Elevated alanine aminotransferase (ALT)。 解读:共有 46,469 条兽医报告符合狗使用含卡洛芬产品的情况。VeDDRA 术语用于描述报告的临床体征;数量反映报告情况,而非发病率。


局限性(每份报告中均须说明)

  • 自发/自愿报告。 MAUDE(器械)、CAERS(食品/补充剂/化妆品)、FAERS(药品)以及动物/兽医系统均为被动监测系统。报告未经核实,报告并不代表已确认存在因果事件。
  • 不能确定因果关系,也没有分母。 数量(meta.results.total)是报告数量,不是发病率或发生率。没有暴露人数分母,因此无法计算风险。
  • 报告偏倚。 严重事件、新产品、召回以及媒体/监管关注会导致报告激增(Weber 效应)。数量高可能反映使用量或关注度,而非危害。
  • 重复报告。 尤其是 MAUDE,包含针对同一事件的后续/重复报告;不要将报告数量视为事件数量。
  • CAERS 属于自愿报告,且数据稀疏。 消费者/年龄/性别字段通常缺失;SUSPECT 角色表示报告者的归因。
  • 此技能不会计算信号统计量(PRR/ROR/IC)。药品不良事件的不成比例性分析请使用 tooluniverse-pharmacovigilance / tooluniverse-adverse-event-detection。
  • 数据时效性: 每个响应都包含一个 meta.last_updated 日期;openFDA 数据滞后于现实世界事件。

完整的各端点字段参考及更多查询示例,请参阅 references/openfda_fields.md。


参考资料

评论

支持 Markdown