关于 tooluniverse-product-safety-surveillance
这是一个 ToolUniverse skill,用于检索和解读覆盖多类 FDA 监管产品的上市后安全记录,包括器械、食品、兽药、药品短缺和召回。它指导产品分类、查询构建与引用,并明确不用于药品不良事件信号检测。
主要功能
- 01检索多类产品的 FDA 安全记录
- 02按问题匹配 openFDA 工具和端点
- 03指导构建 Lucene 查询
- 04说明记录字段及其局限
- 05要求引用来源和结果总数
适用场景
- 01查看器械不良事件报告或召回
- 02查询食品、补充剂或化妆品报告
- 03查找兽药报告或药品短缺
- 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 监管的产品类别的上市后安全记录:医疗器械、食品/膳食补充剂/化妆品、兽药和药品供应(短缺),以及跨产品的执法/召回报告。
关键原则
- 首先确定产品类别。 是医疗器械?食品/补充剂/化妆品?兽药?药品短缺?召回?产品类别决定所用工具。
- 构建有效的 Lucene 查询。 openFDA 使用字段范围限定的
field:value术语;用空格分隔的AND组合。使用短语和特殊字符时需谨慎(参见 Query Grammar)。 - 先检索,再解读。 这些是自发/自愿报告。报告记录及其字段;绝不声称存在因果关系或发生率。
- 为每条记录提供引用,包括工具名称、openFDA 端点、所用查询,以及来自
meta.results.total的total命中数。 - 遵守范围。 如果请求涉及药物不良事件信号检测(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_type | Death、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_number | MAUDE 报告 ID。同一事件的重复报告 / 后续报告很常见——不要将报告视为不同事件计数。 |
date_received | FDA 收到报告的日期,格式为 YYYYMMDD。 |
医疗器械 — 召回 (/device/recall.json)
| 字段 | 含义 |
|---|---|
product_description | 被召回的产品。 |
recalling_firm | 发起召回的公司。 |
recall_status | 例如 Open、Terminated。Terminated = FDA 已关闭该行动。 |
product_code | FDA 器械产品代码。 |
k_numbers[] | 关联的 510(k) 批准编号。 |
root_cause_description | FDA 根因类别(例如 Labeling design)。 |
event_date_initiated | 召回开始日期,格式为 YYYY-MM-DD。 |
执法报告(器械 / 药品 / 食品 /.../enforcement.json)
| 字段 | 含义 |
|---|---|
classification | 召回严重程度:Class I(严重 / 致命危害)、Class II(暂时性 / 可逆)、Class III(不太可能造成伤害)。 |
status | Ongoing / 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[].role | SUSPECT(疑似相关)与 CONCOMITANT(同时食用)之分。 |
products[].name_brand | 品牌名。 |
consumer | 消费者的 age、gender(通常信息较少)。 |
兽医 — 动物药品不良事件 (/animalandveterinary/event.json)
| 字段 | 含义 |
|---|---|
animal.species | Dog、Cat、Horse 等。 |
animal.gender | 动物性别。 |
number_of_animals_affected | 报告中受影响的动物数量。 |
reaction[].veddra_term_name | VeDDRA 临床症状(例如 Vomiting、Diarrhoea)。 |
drug[].brand_name / drug[].active_ingredients[].name | 涉及的产品 / 活性成分。 |
drug[].used_according_to_label / off_label_use | 按标签使用 / 超说明书使用。 |
药品短缺 (/drug/shortages.json)
| 字段 | 含义 |
|---|---|
status | Current 或 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 | 发布元数据。 |
工作流
- 根据请求对产品分类(器械 / 食品-补充剂-化妆品 / 兽医 / 药品短缺 / 召回)。
- 从工具映射表中选择工具。
- 按照查询语法构建 Lucene 查询(首轮使用单个字段;组合查询时添加
AND)。值尽量简单,避免使用特殊字符。 - 运行查询并读取
data.meta.results.total和data.results[]。 - 结合上表解读字段。严重程度判断标准:器械
event_type:Death;执法classification:Class I;CAERSoutcomes:Death/Hospitalization;短缺status:Current。 - 总结并引用。报告数量、关键字段、使用的查询,以及“局限性”注意事项。若要对术语排序,获取
limit:100,并使用 Python 统计(这些封装中没有count聚合)。 - 如果超出范围(药品不良事件信号/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。
参考资料
- openFDA:https://open.fda.gov
- MAUDE(器械不良事件):https://www.fda.gov/medical-devices/mandatory-reporting-requirements-manufacturers-importers-and-device-user-facilities
- 器械召回/510(k):https://www.fda.gov/medical-devices
- CAERS(食品/补充剂/化妆品):https://www.fda.gov/food/compliance-enforcement/cfsan-adverse-event-reporting-system-caers
- 药品短缺:https://www.fda.gov/drugs/drug-shortages
- 召回分类:https://www.fda.gov/safety/industry-guidance-recalls