1. RAG系统架构全景解析
RAG(Retrieval-Augmented Generation)系统已经成为当前最实用的知识增强型AI解决方案之一。不同于传统的大语言模型(LLM)仅依赖预训练知识,RAG通过实时检索外部知识库来增强生成能力,既保持了LLM的语言理解优势,又能提供准确、可验证的答案。这种架构特别适合需要专业知识的垂直领域,比如医疗、法律、金融等行业应用。
一套工业级RAG系统远不止是简单拼接检索和生成两个模块。我在实际项目中发现,许多团队初期往往低估了系统复杂度,导致上线后出现检索不准、生成幻觉、性能瓶颈等问题。本文将基于多个落地项目经验,拆解RAG系统的完整技术栈,特别会深入中医领域的实践细节。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 核心模块深度剖析
2.1 数据预处理与索引模块
数据预处理是RAG系统的基石,却最容易被轻视。我曾参与一个中医知识库项目,初期直接使用原始PDF文本构建索引,结果检索准确率不足40%。经过三个月的预处理优化后,准确率提升至78%。以下是关键实践:
文档分块的艺术
- 固定长度分块(如512 tokens)是最简单的方式,但会切断语义连贯性。对于《伤寒论》这类古籍,我们采用"语义分块"策略:
python复制def split_by_semantic(text): # 基于标点符号和关键词识别自然段落 sections = re.split(r'【.*?】|第.*?条', text) chunks = [] current_chunk = "" for section in sections: if len(current_chunk + section) < 500: current_chunk += section else: if current_chunk: chunks.append(current_chunk) current_chunk = section return chunks - 对经方描述,保持"症状-方剂-用法"的完整单元比机械分块更重要。例如将"太阳病,头痛发热,汗出恶风者,桂枝汤主之"作为一个不可分割的块。
向量化模型选型
- 通用模型如bge-large-zh在基础术语上表现尚可,但对"少阳病""六经辨证"等专业概念捕捉不足。我们采用两阶段方案:
- 使用领域术语表(包含3.5万条中医术语)对bge模型进行继续预训练
- 用中医问答对数据微调模型,优化语义相似度判断
元数据设计技巧
- 除了常规的来源、时间等元数据,我们为每个文本块添加:
- 实体标签:识别出的症状、方剂、药材等
- 置信度:OCR识别准确度评分
- 权威等级:经典古籍>现代教材>网络文章
注意:古籍扫描件一定要先做版面分析,区分正文、注释和校勘文字。我们曾因注释混入正文导致检索结果严重偏差。
2.2 检索模块优化实践
检索质量直接决定生成答案的上限。在中医场景中,我们发现纯向量检索的准确率比通用领域低15-20%,这是由术语特殊性导致的。
混合检索策略
- 构建同义词库解决术语差异问题:
json复制{ "小便不利": ["癃闭", "排尿困难", "尿涩"], "麻黄汤": ["麻黄解表汤", "仲景麻黄方"] } - 查询时自动扩展:先进行术语标准化,再用扩展后的查询词做BM25检索
重排序模型调优
- 使用中医QA数据训练Cross-Encoder,重点关注:
- 症状与方剂的对应关系
- 药材配伍禁忌
- 剂量换算规则
- 示例训练数据格式:
csv复制query, passage, label "治疗风寒感冒的方剂","桂枝汤由桂枝、芍药...组成,适用于表虚证",1 "治疗风寒感冒的方剂","白虎汤清热生津,主治阳明经证",0
缓存机制设计
- 高频问题缓存:对"桂枝汤组成"这类常见查询,缓存Top-3检索结果
- 会话级缓存:同一会话中的相关问题共享检索上下文
- 缓存失效策略:当知识库更新时,自动使相关缓存失效
2.3 生成模块的领域适配
在中医场景中,我们发现直接使用通用LLM会出现以下问题:
- 混淆相似方剂(如桂枝汤与桂枝加葛根汤)
- 忽略剂量细节("三钱"被模糊处理)
- 缺乏辨证推理过程
提示工程解决方案
设计多阶段提示模板:
code复制你是一位资深中医专家,请严格按照以下步骤回答:
1. 辨证分析:根据{症状}判断可能的证型
2. 方剂推荐:从{检索结果}中选择最匹配的方剂
3. 用法说明:精确输出原典记载的煎服法
4. 禁忌提示:列出该方剂的禁忌症
若资料不足,必须明确说明"根据现有资料无法确定"。
后处理规则
- 剂量单位标准化:将"两"转换为"3g"(汉代1两≈现代3g)
- 出处标注:自动添加"出自《伤寒论》第12条"等来源信息
- 安全警告:对有毒药材(如附子)添加醒目提示
3. 评估与持续改进
3.1 量化评估体系
我们开发了中医特色的评估指标:
| 指标类型 | 具体指标 | 评估方法 |
|---|---|---|
| 检索质量 | 术语召回率 | 检查关键术语是否被检索到 |
| 方剂匹配准确率 | 人工核对Top结果是否相关 | |
| 生成质量 | 事实忠实度 | 比较生成内容与检索结果的符合程度 |
| 辨证合理性 | 专家评估辨证过程是否合乎逻辑 | |
| 安全性评分 | 检查是否有禁忌症警告 |
3.2 日志分析案例
通过分析bad cases,我们发现三个主要问题点:
- 古籍OCR错误导致检索偏差(如"桂枝"误识为"桔梗")
- 用户口语化描述与专业术语不匹配(如"拉肚子"vs"下利")
- 复合证型处理不足(如"太阳少阳合病")
对应的改进措施:
- 增加OCR后校对环节
- 构建口语-术语映射表
- 补充合病/并病相关文献
4. 中医场景专项优化
4.1 古籍处理流水线
我们设计的专用处理流程:
- 图像增强:解决古籍扫描件的模糊、污渍问题
- 竖排文字识别:定制OCR模型处理传统版式
- 异体字转换:如"栝楼根"→"天花粉"
- 校勘整合:合并不同版本的差异注释
4.2 知识图谱增强
在向量检索基础上,构建中医知识图谱提供关系查询:
mermaid复制graph LR
太阳病 -->|方剂| 桂枝汤
桂枝汤 -->|组成| 桂枝
桂枝汤 -->|组成| 芍药
桂枝 -->|性味| 辛温
芍药 -->|功效| 养血敛阴
这种混合检索方式显著提升了复杂查询的准确率,比如"哪些方剂同时包含桂枝和芍药"。
5. 实施路线建议
根据我们的项目经验,推荐分阶段实施:
阶段1:MVP版本
- 数据:精选50篇核心文献
- 检索:开源向量数据库+通用Embedding
- 生成:GPT-4+基础提示词
- 目标:验证核心流程可行性
阶段2:垂直优化
- 数据:扩展至300+文献,添加专业元数据
- 检索:领域Embedding+混合检索
- 生成:微调模型+多阶段提示
- 目标:关键指标达到生产要求
阶段3:系统工程化
- 加入评估反馈闭环
- 实现知识库自动更新
- 优化服务性能与稳定性
- 目标:支持大规模生产应用
在具体实施时,建议先从特定病种(如感冒类方剂)切入,再逐步扩展范围。我们团队在项目中采用这种策略,6个月内就实现了核心病种的准确率从58%提升到89%。
