拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

#我把 764 条中医调理笔记整理成了可检索的网页,顺便踩了 RAG 的几个坑

#我把 764 条中医调理笔记整理成了可检索的网页,顺便踩了 RAG 的几个坑

前阵子翻自己几年下来的中医笔记,越翻越难受:纸质的本子按时间排,想找"失眠用什么"得从头翻;电子的散在几个备忘录里,搜都搜不齐。

索性整理了一遍,一共764 条,做成了一个能直接搜的网页:岐黄诊疗库(zy365.net)。

内容是什么形态

先说清楚它不是什么,免得误解:

不是系统教材,不是方剂大全,是我自己记下来的单方、穴位、食疗和小思路,比如:

  • 失眠 → 炒酸枣仁(睡眠不好用生的、睡不踏实用炒的),15g 捣碎加白糖煎汤代茶
  • 咳嗽痰多 + 体胖痰湿 → 三子养亲汤、二陈汤
  • 咽痒咳嗽分不清寒热 → 肺俞、膻中、列缺、风门、大椎刮痧
  • 嘴角发炎 → 黄豆芽、三豆乌梅白糖汤
  • 翼状胬肉(热性)→ 白虎汤,或生石膏 30g 分三次冲服

所以它的定位是"按症状快速查一个思路",不是让你自己开方。

检索方案:关键词 + 向量混合

一开始我只做了关键词匹配,结果很糟:搜"睡不着"命中不了"失眠",搜"咳"命中不了"咽痒咳嗽"。中文字短、同义多,纯关键词基本废掉一半。

后来的方案是混合检索:

  1. 先用百炼的text-embedding-v3把 764 条离线向量化(int8 量化后存 JSON,约几十 KB,直接跟知识库放一起)
  2. 查询时同时算两条路径:
    - 关键词路径:粗切词 → 标题/正文分别计分(标题权重更高)→ 二元组 bigram 加噪
    - 向量路径:查 embedding,算余弦,低于阈值 0.55 且关键词也没命中的直接淘汰
  3. 最后加权排序:向量 0.68 + 关键词 0.32,命中关键词个数越多再加一点加权

实测下来,从"全库 764 条"能压到几十条,排序也基本合理。代码里所有向量相关的步骤都包了try/catch,任何一步挂了就悄悄退回纯关键词——检索绝不能被向量链路拖死,这是整个功能里我改得最多的地方。

部署:一个函数搞定

没有单独的后端,全部塞在一个阿里云函数计算(FC)实例里,nodejs18:

  • 静态页 + 764 个词条页 +/api/*全在同一个函数里路由分发
  • 知识库文件在 bundle 里,浏览器拿不到原始数据(零泄露)
  • 搜索日志、爬虫日志写 OSS,配生命周期规则自动过期

一个只在搜引擎优化里才踩得到的坑

词条页是服务端渲染的。这点很关键——第一版首页是纯前端渲染,百度蜘蛛抓完首页就"到底了",HTML 里一个/term/链接都没有,等于整站对搜索引擎只有 1 个页面。

补了静态索引入口之后,抓完的 HTML 里才能看到/terms的各个分页链接。

另外搜索引擎对"隐藏内容"很敏感,我试过把索引入口塞进<noscript>:开着 JS 的正常访客完全看不到,不执行 JS 的爬虫照样读得到。这是标准用法,不是作弊。

现在的样子

首页输入症状就能查,词条页有正文和相关词条互链,764 条都能打开。手机上也正常。

站点:岐黄诊疗库 · 中医症状调理知识库

最后说一句

站里每一页底部都写着:内容仅供学习参考,不能替代执业医师面诊,用药请遵医嘱。

这话不是套话。笔记里那些单方、穴位,是给别人指个方向用的,真要上药、要扎针,还是得找执业中医师当面看。急症别自己扛,直接去医院。


如果你也在整理自己的学习笔记,欢迎交流。

免责声明:本站内容整理自个人学习笔记,仅供学习参考,不构成医疗诊断或治疗建议。方药、灸刺请在执业中医师指导下使用,急重症请及时就医。

返回列表