日期:2026-10-20 状态:已批准(用户确认方案 B:表保留备用 + 删页面)
health_knowledge_base 原本设计为"健康指标库"(维生素/氨基酸等结构化条目,含 normal_range/suggestion),但实际从未导入任何指标条目——表里只有 2026-10-20 从 microbiome_article 迁入的 809 篇菌群文章(item_type='article')。它已退化成一张"菌群文章表",设计中的多态模型优势从未体现。
dan_knowledge_base 是「知识库管理」页的数据源(39 条案例报告,source_type='file'),且已存在 source_type 字段天然支持多来源,无 title 唯一约束,809 篇可零冲突迁入。
两个知识入口并存导致管理员维护割裂(要记"菌群文章在健康知识库、案例在知识库",新增内容要先想放哪)。合并到单表后:一个页面、一个入口、一套维护。
关键判断:向量库本来就是同一个检索空间(collection cfc_knowledge),菌群文章与案例报告靠 metadata.source 分流(microbiome / dan_knowledge),合并存储表不改变检索行为。
dan_knowledge_base(source_type='article'),成为唯一知识条目表metadata.source 分流,管理端「向量知识库」统计口径不变health-knowledge.vue 页面和路由health_knowledge_base 表保留置空(未来指标条目备用,不 DROP)health_knowledge_base 留空备用microbiome 与 dan_knowledge 两块统计口径保留)knowledge_base_section 是 AI 模块文本配置,无关)zxyj。部署前备份目标表/app/cfc(git cfclub 分支),部署按 AGENTS.md 流程(备份 → 构建 → 部署 → 验证 → 失败回滚)varchar(200) 够用),content 为 mediumtext(最长 25K 字符)迁移映射:
| health_knowledge_base | dan_knowledge_base | 说明 |
|---|---|---|
item_name |
title |
文章标题 |
description |
content |
正文(markdown) |
| — | source_type='article' |
标记来源(现有案例为 'file') |
source |
source_url |
原 microbiome_article 表名标记 |
| — | status=1 |
启用 |
| — | sort=0 |
默认排序 |
接口与数据源:
/api/admin/knowledge-base/list 支持 sourceType(精确匹配)与 excludeSourceType(排除)参数(不传则返回全部,向后兼容)get_dan_knowledge_base 传 excludeSourceType='article'(39 条案例,排除菌群文章)。不用 sourceType='file':KnowledgeDialog 写 sourceType 有 manual/file/url 三值,精确匹配 'file' 会漏掉未来新增的其他来源案例get_microbiome_articles 改拉 dan_knowledge_base(sourceType='article',必须 ORDER BY id 升序稳定分页——所有文章 sort=0,SortUtil 只在前端传 sort 时生效,否则重蹈旧分页 bug),字段映射 title/contentHealthKnowledgeBaseController.article/list 改查 dan_knowledge_base(或直接由 langgraph 调用 /api/admin/knowledge-base/list)category 处理:丢弃 category(dan_knowledge_base 无此字段,不 ALTER 表)。依据:Chroma metadata.category 写了但从不被读取或过滤;health_butler_graph 读 category 走 /api/health/knowledge/query(读 health_knowledge_base 原表),不读 Chroma。langgraph 输出空字符串。
页面:删除 health-knowledge.vue 页面及 health-knowledge 路由;「知识库管理」页(views/admin/knowledge/index.vue)承载全部内容。
list 接口 sourceType 参数的实现细节(MyBatis-Plus 条件拼接位置)顺序设计关键点(builder check 修正):旧 langgraph 无 sourceType 过滤,DB INSERT 后若其定时同步触发,会把 848 条全部索引为 dan_knowledge 造成双重索引。因此 langgraph 新镜像先构建好(不部署),DB INSERT 后立即替换容器 + 触发全量重建,缩短窗口期;重建是全量(先删后插),可自愈清理任何窗口期脏数据。
/api/admin/knowledge-base/list 支持 sourceType/excludeSourceType + 构建部署(向后兼容,无风险)get_dan_knowledge_base(excludeSourceType='article')与 get_microbiome_articles(sourceType='article' + ORDER BY id)+ 镜像构建(后台,暂不部署)source_type='article',保留原始 created_at/updated_at 避免 pub_date 元数据跳到 2026-10-20)+ 校验DELETE FROM health_knowledge_base WHERE item_type='article'(只删文章,不清表——KnowledgeBaseDataImporter 可能插入 bacteria/indicator/nutrient 行,langgraph /query 仍读该表)