news 2026/8/30 11:38:23

Project NOMAD按症状找药:从烧伤、发热到腹泻的OTC匹配完全指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Project NOMAD按症状找药:从烧伤、发热到腹泻的OTC匹配完全指南

Project NOMAD按症状找药:从烧伤、发热到腹泻的OTC匹配完全指南

【免费下载链接】project-nomadProject NOMAD is an offline-first knowledge and education server. Wikipedia, thousands of books, courses, maps, and optional local AI, all running on hardware you own with no internet required.项目地址: https://gitcode.com/GitHub_Trending/pr/project-nomad

Project NOMAD是一个离线优先的知识与教育服务器,其中的药品参考(Drug Reference)模块支持按症状找药:从烧伤、发热到腹泻,它会根据 FDA 官方药品标签,帮你匹配出对应的非处方药(OTC)。无需联网、无需搜索网站,所有数据都跑在你自己的硬件上。本文带你走通从安装数据到按症状搜索的完整流程,并拆解它背后的 OTC 匹配逻辑。

为什么需要"按症状找药"?

平时我们在网上找药,往往要先知道药名。但真实的场景常常相反:你知道自己哪里不舒服,却不知道该用什么药

Project NOMAD 的药品参考把这两个方向都做好了:

  • 按药名搜索:输入品牌名或通用名,查看适应症、剂量、警告和成分。
  • 按症状搜索(By situation):从问题出发,选择"烧伤""发热""腹泻"等症状,列出 FDA 标签覆盖这些症状的药品。
  • 反向链接:在药品详情页,还能看到该药"常用于哪些情况",形成症状 ↔ 药品双向互链。

官方文档中对此的原文描述是:"Start from the problem instead of the product"(从问题出发,而不是从产品出发)。详见 drug-reference.md。

⚠️重要提示:这是健康信息,不是医疗建议。Project NOMAD 展示的是制造商的 FDA 标签原文和 OTC 匹配结果,不能替代医生、药师或护士。请始终遵循你手中实际产品的说明。

第一步:安装 FDA 药品数据(约需 8-10 GB)

药品参考是可选组件,默认不安装,因为数据集较大。有两种安装入口,最终效果相同:

  1. 从主界面进入Content Explorer,选择Medicine分类;
  2. 选中Standard层级(其中包含 FDA Drug Reference);
  3. 确认下载。

也可以在 Drug Reference 页面直接点Download FDA drug data按钮。整个过程分两个阶段在后台进行:

阶段内容大小
⬇️ Download拉取 openFDA 药品标签数据集(支持断点续传)约 1.7 GB(压缩)
📇 Indexing将标签导入离线全文搜索数据库解压后约 8-10 GB

你不需要守在页面旁——离开后下载和索引会继续,索引完成后搜索功能自动开启。开启"自动内容更新"后,NOMAD 还会定期检查 openFDA 是否发布了新数据集并自动刷新。

按症状搜索 OTC 药品的操作步骤

数据装好后,Drug Reference 页面有三个标签页,其中"By situation"就是按症状找药的主入口:

  1. 在症状选择器中点选一个或多个症状(如烧伤、发热、腹泻);
  2. 页面列出所有 FDA 标签覆盖该症状的药品,并按相关度排序;
  3. 每个结果按"品牌名 + 通用名"折叠为一行,避免同一成分出现几十个近似的商品;
  4. 结果中OTC 药品永远排在最前面,方便直接购买使用。

💡 多选症状时,NOMAD 会优先查找同时覆盖所有症状的药品,找不到再按每个症状分别展示——这在多种症状并存、想找"一款产品搞定"时特别实用。

匹配逻辑拆解:从"burns"到搜索结果

按症状搜索的核心是一套精心策划的症状骨架(condition spine),其唯一数据源是 conditions.json,构建时生成到 conditions.ts:

{ "slug": "burns", "label": "Burns", "category": "Skin & wounds", "searchTerms": ["burns", "minor burns", "sunburn", "scald", "minor burn"] }

每个症状包含一组同义词(searchTerms),覆盖用户可能的各种表达。以烧伤为例,burnssunburn(晒伤)、scald(烫伤)都能命中同一组药品。内置症状按四大类别组织:

类别代表症状
Pain, fever & inflammation(疼痛、发热与炎症)头痛、肌肉关节痛、发热、痛经
Cold, cough & allergy(感冒、咳嗽与过敏)咳嗽、鼻塞、喉咙痛、过敏
Stomach & digestion(胃与消化)胃灼热、腹泻、便秘、恶心呕吐、晕车
Skin & wounds(皮肤与伤口)烧伤、擦伤割伤、蚊虫叮咬

查询是如何构建的

匹配逻辑实现在 condition_service.ts 中,关键点:

  1. 同义词 OR 扩展:buildIndicationQuery 把 searchTerms 拼成一条 MySQL 全文检索查询。多词短语(如sore throat)会被加双引号按短语匹配,牺牲少量召回换取精度;单词直接通过。NATURAL LANGUAGE MODE 把它们当作 OR 式相关度查询——任一同义词命中即可,按相关度排序。
  2. 全文检索 + LIKE 兜底:查询词中最长 token ≥ 3 个字符时走 FULLTEXT 索引ft_drug_labels_name_indications;太短或索引异常时自动降级为LIKE '%term%',保证搜索永远可用。
  3. OTC 强过滤:SQL 中固定product_type = 'HUMAN OTC DRUG'(见 orderOtcFirst),确保按症状浏览时只出现非处方药——这是面向消费者的场景,处方药不该抢镜。

自由文本:不选症状,直接输入描述

如果症状列表里没有你想要的那一项,可以直接输入自由文本(如 "athlete's foot")。处理逻辑在 drugsForFreeText:

  • 主路径:把输入解析回策划症状的 slug(大小写不敏感的精确/子串匹配),例如手输 "burns" 依然会命中策划条目,走与点选完全相同的匹配;
  • 兜底路径:解析不到时,对药品适应症文本做直接匹配。

附加层:天然疗法与自然补救

每个症状页除了 OTC 药品,还会尝试展示天然疗法(草药 + 居家护理措施),数据来自 natural_remedies.json 与 home_remedies.json,来源为 NCCIH、CDC、FDA 等美国公共领域资料。

比如选择"burns"时,芦荟胶(Aloe vera)、茶树油(Tea tree oil)等条目会因conditions数组包含burns而被 remediesForCondition 精确过滤出来。

需要注意的是,这部分"肯定性内容"目前默认关闭(由 affirmative_remedies.ts 的门控控制),默认体验只包含受监管的 FDA 标签匹配——这也是它保持严谨的原因之一。

反向链接与结果页结构

药品详情页上还有一个"常用于(Commonly used for)"区块:反向查找 situationsForIndications 会把药品标签的适应症文本与所有症状的 searchTerms 做子串匹配,告诉你这款药还能应对哪些情况,点一下即可跳转回症状页(通过/drug-reference?situation=<slug>深链)。

单个症状详情页(conditions/show.tsx)的呈现层次也很清晰:

  • 顶部常驻安全横幅(SafetyBanner),不可绕过;
  • 药品列表区:区分"还没装数据"(引导去 Drug Reference)和"有数据但无匹配"两种空状态;
  • 每条结果行(DrugResultRow)链接到完整标签详情,可进一步并排对比两款药的警告章节

对比功能只做"警告并排展示",不计算药物相互作用——两种药能否同服,请交给药师或医生。

关键文件导航

模块路径
症状数据源conditions.json
症状骨架(生成文件)admin/app/data/conditions.ts
匹配服务层admin/app/services/condition_service.ts
纯函数工具(查询构建/排序)admin/util/conditions.ts
HTTP 路由层admin/app/controllers/conditions_controller.ts
症状详情前端页admin/inertia/pages/conditions/show.tsx
按症状搜索 UIadmin/inertia/pages/drug-reference/index.tsx
官方使用文档admin/docs/drug-reference.md

总结

Project NOMAD 的按症状找药,本质上是把"症状 → 同义词 → FDA 标签适应症全文匹配"串成一条离线流水线,并用 OTC 强过滤和稳定排序保证结果对普通人友好。当你下一次在野外或断网环境下遇到烧伤、发热或腹泻时,这套逻辑能让你在没有互联网的情况下,依然拿到基于官方标签的可靠 OTC 参考——当然,紧急情况请优先寻求专业医疗帮助。

【免费下载链接】project-nomadProject NOMAD is an offline-first knowledge and education server. Wikipedia, thousands of books, courses, maps, and optional local AI, all running on hardware you own with no internet required.项目地址: https://gitcode.com/GitHub_Trending/pr/project-nomad

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/30 11:36:07

复盘2017腾讯校招笔试题:考点、陷阱与底层能力解析

“回望2017年腾讯校招开发工程师笔试试卷&#xff0c;很多考点至今仍是面试题库里的常客。如果你正在准备大厂研发岗&#xff0c;或者想看看当年那道经典笔试题到底在考什么底层能力&#xff0c;这份复盘值得认真看完。我也会结合那几年腾讯面试的技术侧重点&#xff0c;把每类…

作者头像 李华
网站建设 2026/8/30 11:36:03

STM32H7R7编译报错排查实战:从环境配置到链接脚本

前阵子帮朋友调一块 STM32H7R7 的板子&#xff0c;工程是从 GitHub 拉下来的&#xff0c;作者用的 IAR&#xff0c;我本地装的是 Keil&#xff0c;一编译满屏报错。第一眼看到那个错误列表&#xff0c;我还以为是代码写得有问题&#xff0c;后来才发现&#xff0c;十个错误里有…

作者头像 李华
网站建设 2026/8/30 11:33:33

VLA时间建模:从固定窗口到流式状态,解锁实时控制

在机器人策略学习里&#xff0c;最容易被低估的问题&#xff0c;很可能不是模型容量&#xff0c;而是时间。做 VLA&#xff08;Vision-Language-Action Model&#xff0c;视觉-语言-动作模型&#xff09;的人&#xff0c;基本都面对过同一个落差&#xff1a;演示数据里时间信息…

作者头像 李华
网站建设 2026/8/30 11:33:20

STM32CubeIDE与CubeProgrammer协同调试全攻略

1. 从两个工具的分工说起&#xff1a;为什么需要协同调试先说个实际场景。很多人在用STM32CubeIDE做开发的时候&#xff0c;会遇到一个不太舒服的情况&#xff1a;项目编译已经过了&#xff0c;程序也下载进去了&#xff0c;但想看一下片子内部的FLASH内容、想改一下选项字节、…

作者头像 李华
网站建设 2026/8/30 11:31:37

从研发笔试题看视频平台技术岗:C++内存、TCP与高并发考点全拆解

1. 笔试到底在筛什么人&#xff1a;从PPTV的业务属性反推考点 2015年前后的视频行业&#xff0c;正处于移动端爆发、版权大战、带宽成本高企的混战期。PPTV作为老牌网络电视平台&#xff0c;研发岗位的笔试题目天然带着强烈的业务烙印&#xff1a;海量用户并发访问、视频文件的…

作者头像 李华
网站建设 2026/8/30 11:29:27

Windows下MySQL下载安装与配置详解:Installer与ZIP双方案

在 Windows 上完成 MySQL 下载安装&#xff0c;是很多初学者接触数据库的第一步&#xff0c;也是后续学习 SQL、搭建 Web 项目、维护本地开发环境的前提。网上能找到的 MySQL 安装教程大多只截了官网首页图&#xff0c;版本选择、安装类型、服务配置、认证方式、环境变量这些环…

作者头像 李华