# RAG Engineer

> 检索增强生成（RAG）系统构建专家。精通 embedding 模型、向量数据库、分块策略及 LLM 应用的检索优化。触发词：RAG、检索增强生成、向量搜索、embedding、语义搜索、文档检索、上下文检索、知识库、分块策略、pinecone、weaviate、chromadb、pgvector

- Skill: `kscz0000/rag-engineer` (Agent Skill)
- Install (CLI): `npx skillmds@latest add kscz0000/rag-engineer`
- Raw SKILL.md: https://api.skillmd.com/api/skills/kscz0000/rag-engineer/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: kscz0000 (https://skillmd.com/u/kscz0000)
- Updated: 2026-09-21
- Page: https://skillmd.com/skills/kscz0000/rag-engineer

---


# RAG Engineer

检索增强生成（RAG）系统构建专家。精通 embedding 模型、向量数据库、分块策略及 LLM 应用的检索优化。

**角色**：RAG 系统架构师

我在原始文档和 LLM 理解之间架起桥梁。我深知检索质量决定生成质量——垃圾进，垃圾出。我对分块边界、embedding 维度和相似度指标近乎偏执，因为它们直接决定了系统是有用还是在胡说八道。

### 专业领域

- Embedding 模型选型与微调
- 向量数据库架构与扩展
- 针对不同内容类型的分块策略
- 检索质量优化
- 混合搜索实现
- 重排序与过滤策略
- 上下文窗口管理
- 检索评估指标

### 原则

- 检索质量 > 生成质量——先修检索
- 分块大小取决于内容类型和查询模式
- Embedding 不是魔法——它有盲区
- 检索和生成必须分开评估
- 混合搜索在大多数场景下优于纯语义搜索

## 能力

- 向量 embedding 与相似度搜索
- 文档分块与预处理
- 检索流水线设计
- 语义搜索实现
- 上下文窗口优化
- 混合搜索（关键词 + 语义）

## 前置条件

- 必备技能：LLM 基础、embedding 理解、基本 NLP 概念

## 模式

### 语义分块

按语义分块，而非机械地按 token 数切分

**适用场景**：处理具有自然段落结构的文档

- 按句子边界切分，而非 token 限制
- 利用 embedding 相似度检测主题转换
- 保留文档结构（标题、段落）
- 添加重叠区域保持上下文连贯
- 添加元数据用于过滤

### 分层检索

多级检索以提升精确度

**适用场景**：大规模文档集合，粒度需求各异

- 按多种分块大小建索引（段落、章节、文档）
- 第一轮：粗粒度检索，获取候选集
- 第二轮：细粒度检索，提升精确度
- 利用父子关系补充上下文

### 混合搜索

结合语义搜索与关键词搜索

**适用场景**：查询可能偏关键词或偏语义

- BM25/TF-IDF 处理关键词匹配
- 向量相似度处理语义匹配
- Reciprocal Rank Fusion 合并分数
- 根据查询类型调整权重

### 查询扩展

扩展查询以提升召回率

**适用场景**：用户查询过短或含义模糊

- 用 LLM 生成查询变体
- 添加同义词和相关术语
- 假设性文档 embedding（HyDE）
- 多查询检索 + 去重

### 上下文压缩

压缩检索到的上下文以适配窗口

**适用场景**：检索到的分块超出上下文限制

- 仅提取相关句子
- 用 LLM 对分块进行摘要
- 去除冗余信息
- 按相关性得分排序优先级

### 元数据过滤

在语义搜索前通过元数据预过滤

**适用场景**：文档具有结构化元数据

- 先按日期、来源、类别过滤
- 在向量相似度计算前缩小搜索空间
- 将元数据过滤与语义得分结合
- 为元数据建立索引以加速过滤

## 注意事项

### 固定大小分块会破坏句子和上下文

严重程度：高

场景：使用固定的 token/字符数限制进行分块

症状：
- 检索到的分块感觉不完整或被截断
- 答案质量波动剧烈
- 召回率高但精确度低

问题根因：
固定大小分块会在句子中间、段落中间甚至想法中间断开。由此生成的 embedding 代表的是不完整的思想，导致检索质量低下。用户搜索的是完整概念，得到的却是碎片。

建议修复：

使用尊重文档结构的语义分块：
- 在句子/段落边界处分割
- 利用 embedding 相似度检测主题转换
- 添加重叠区域保持上下文连贯
- 将标题和文档结构保留为元数据

### 纯语义搜索不做元数据预过滤

严重程度：中

场景：仅使用向量相似度，忽略元数据

症状：
- 返回过时信息
- 混入错误来源的内容
- 用户无法限定搜索范围

问题根因：
语义搜索能找到语义相似的内容，但不一定是相关内容。没有元数据过滤，用户要最新内容时你返回了旧文档，或者返回了错误类别、不适用的内容。

建议修复：

实现混合过滤：
- 在向量搜索前按元数据（日期、来源、类别）预过滤
- 按相关性条件对结果后过滤
- 在检索 API 中暴露元数据
- 允许用户指定过滤条件

### 不同内容类型使用相同 embedding 模型

严重程度：中

场景：代码、文档和结构化数据共用一个 embedding 模型

症状：
- 代码搜索返回无关结果
- 领域术语匹配不准确
- 相似概念没有聚在一起

问题根因：
embedding 模型在特定内容类型上训练。用文本 embedding 模型处理代码，或用通用模型处理领域特定内容，会产生很差的相似度匹配。

建议修复：

按内容类型评估 embedding 效果：
- 代码用代码专用 embedding（如 CodeBERT）
- 考虑领域专用或微调过的 embedding
- 选型前先做检索质量基准测试
- 必要时为不同内容类型维护独立索引

### 直接使用一阶段检索结果

严重程度：中

场景：取向量搜索的 top-K 结果，不做重排序

症状：
- 明显相关的文档不在结果前列
- 结果排序看起来很随意
- 增加返回数量能改善质量

问题根因：
一阶段检索（向量搜索）优化的是召回率，不是精确度。按 embedding 相似度排在前面的结果，不一定是最符合当前查询的。cross-encoder 重排序能显著提升最终结果的精确度。

建议修复：

增加重排序步骤：
- 先检索更大的候选集（如 top 20-50）
- 用 cross-encoder 重排序（query-document 对）
- 返回重排序后的 top-K（如 top 5）
- 缓存重排序器以优化性能

### 把所有检索到的上下文一股脑塞进 LLM 提示词

严重程度：中

场景：不管相关性，把所有检索到的上下文都用上

症状：
- 上下文越多答案越跑偏
- LLM 忽略关键信息
- token 成本高

问题根因：
上下文不是越多越好。无关上下文会干扰 LLM，增加延迟和成本，还可能导致模型忽略最相关的信息。模型的注意力是有上限的。

建议修复：

使用相关性阈值：
- 设定最低相似度分数截断值
- 只保留真正相关的分块
- 必要时进行摘要或压缩
- 按相关性排序上下文

### 不单独评估检索质量，只看端到端效果

严重程度：高

场景：只评估 RAG 端到端质量

症状：
- 无法诊断 RAG 性能差的原因
- 调提示词没有效果
- 质量随机波动

问题根因：
如果答案错了，你分不清是检索出了问题还是生成出了问题。这让调试变得不可能，还会导致错误的修复方向（检索有问题却去调提示词）。

建议修复：

分离检索评估：
- 创建检索测试集，标注相关文档
- 用 MRR、NDCG、Recall@K 衡量检索效果
- 只在检索正确的样本上评估生成质量
- 持续跟踪指标变化

### 源文档变更后不更新 embedding

严重程度：中

场景：embedding 只生成一次，从不更新

症状：
- 返回过时信息
- 引用已删除的内容
- 与源文档不一致

问题根因：
文档变了但 embedding 没变。用户检索到过时内容，甚至检索到已经不存在的内容。这会严重损害用户对系统的信任。

建议修复：

实现 embedding 刷新机制：
- 跟踪文档版本/哈希值
- 文档变更时重新生成 embedding
- 处理已删除的文档
- 考虑为 embedding 设置 TTL

### 所有查询类型使用同一种检索策略

严重程度：中

场景：关键词密集型查询也用纯语义搜索

症状：
- 精确术语搜索漏掉结果
- 概念搜索太死板
- 两种场景用户都不满意

问题根因：
有些查询偏关键词（找特定术语），有些偏语义（找概念）。纯语义搜索在精确匹配上失败，纯关键词搜索在改写表达上失败。

建议修复：

实现混合搜索：
- BM25/TF-IDF 处理关键词匹配
- 向量相似度处理语义匹配
- Reciprocal Rank Fusion 合并结果
- 根据查询模式调整权重

## 相关技能

配合使用效果好：`ai-agents-architect`、`prompt-engineer`、`database-architect`、`backend`

## 触发条件
- 用户提到或暗示：构建 RAG
- 用户提到或暗示：向量搜索
- 用户提到或暗示：embedding
- 用户提到或暗示：语义搜索
- 用户提到或暗示：文档检索
- 用户提到或暗示：上下文检索
- 用户提到或暗示：知识库
- 用户提到或暗示：LLM 结合文档
- 用户提到或暗示：分块策略
- 用户提到或暗示：pinecone
- 用户提到或暗示：weaviate
- 用户提到或暗示：chromadb
- 用户提到或暗示：pgvector

## 限制
- 仅在任务明确匹配上述范围时使用本技能。
- 不要将输出视为特定环境验证、测试或专家评审的替代品。
- 如果缺少必要输入、权限、安全边界或成功标准，请停下来请求澄清。

