RAG(宠物健康AI)
前言
公司目前的 AI 问诊模块,对于专业知识的回答还有待提高,直接调用 LLM,回复的问诊可能并不满意,所以需要使用 RAG 索引加强。
简略目标 (三个服务)
- 数据采集: 爬取 N 个平台的宠物健康知识进行存储。
- 知识库构建: 解析平台数据结构,存储为向量和图数据库。(这里尝试过微调模型,也就是通过自己的知识库,基于一个模型训练出新的模型,效果可以,但训练时长过久,价格也偏贵)
- 索引增强: AI 问诊模块,会使用到向量和图数据库里的数据增加索引。
简单介绍向量库和图数据库的作用
- 向量数据库: 将文字转换为多维向量,通过计算语义相似度,快速检索出意思相近的段落。
- 图数据库 : 三元组,类似于存储了主谓宾,比如
寄生虫引起皮肤瘙痒。- 主: 寄生虫
- 谓: 引起
- 宾: 皮肤瘙痒
- 通过其中一个实体就能去查其他边和实体,并且也会存储同义词,做后续的搜索。
技术栈
- 后端: Python 为主,性能不够 Golang 来凑。
- 后端 AI 模型: GPT-4o 为主。
- 数据库: PG 持久化,Redis 缓存,向量数据库 Milvus,图数据库 Nebula。
- AI 开发辅助: Claude Connect 4.5 系列(为主),偶尔 Gemini 3 Pro。
一、宠物健康知识数据爬虫
- 大概找了 7-8 个不同的平台来爬取数据,有的可以直接通过 API 获取,有的是直接爬取网站,通过网页 HTML 元素解析数据。
- 把所有平台的宠物健康分类爬下来,根据不同的类型存储到分类表。
- 根据分类表去爬取具体的文章内容 ---> 存储到内容表。
- 解析文章内容,转换成 Markdown 格式,为后续向量数据库和图数据库做准备。
- 解析的内容包括(不局限于): 标题, 内容, URL, UUID(根据 URL Hash 出来的唯一标签), 分类路径, 平台类型, 元数据, 拓展数据。
二、数据解析,图数据库与向量数据库存储
- 把爬虫阶段的 Markdown 格式数据,迁移到本服务。
- 拆分成段落,存储到段落表。包含段落标签、排序、长度等。
- 通过 Embedding模型 把段落转换成向量进行向量库存储。
- 通过 LLM 把文章中的三元组提取出来,存储到图数据库。
- 同义词拓展。
三、宠物健康 AI 服务
- 正常的用户模块、Session 模块。
- 会根据用户的问题,来判断进度,引导用户去补全关键信息,比如布偶猫最近饮食、大便等情况 (必须包含品种、年龄、病史,会让其选择)。
- 安全合规检测,检测内容。
- 图片分析,通过 LLM 分析出症状等。
- 进度到百分之百时,会把用户的问题做一个归纳,再生成一个问诊报表。
- 3.1 会把当前上下文提的问题,通过 LLM 总结成一条或者多条概述去查询向量,这样就能查出对应的知识库段落。
- 3.2 会把当前上下文提的问题,通过 LLM 提取出三元组,且把三元组转换成专业词语 (口语转标准术语),比如不吃东西可以转换为厌食,再去查询图数据库知识。
- 3.3 以上都是选择出相似度最高的 10 条数据。
- 根据已有的知识库,进行 LLM 调用生成问诊报表。