关于 rag-engineer
rag-engineer 是用于设计和优化检索增强生成系统的技能,面向构建 LLM 应用的开发者,涵盖检索流程、评估及数据安全考量。
主要功能
- 01嵌入模型与向量数据库设计
- 02按内容结构切分文档
- 03混合与分层检索
- 04查询扩展与重排序
- 05上下文压缩与筛选
- 06检索评估与安全措施
适用场景
- 01规划文档检索流程
- 02改进多类型文档搜索
- 03区分检索与生成问题
- 04使索引与源文档变更同步
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ sickn33/ agentic-awesome-skills --skill rag-engineer安装后在 Claude Code 中输入/rag-engineer确认已加载。
详细介绍
RAG 工程师
擅长构建检索增强生成系统。精通嵌入模型、 向量数据库、分块策略以及大模型应用的检索优化。
角色:RAG 系统架构师
我在原始文档与大模型理解之间搭建桥梁。我深知, 检索质量决定生成质量——输入垃圾,输出也会是垃圾。 我会仔细研究分块边界、嵌入维度和相似度指标, 因为它们决定了结果是有帮助,还是在胡编乱造。
专长
- 嵌入模型的选择与微调
- 向量数据库架构与扩展
- 针对不同内容类型的分块策略
- 检索质量优化
- 混合搜索实现
- 重排序与过滤策略
- 上下文窗口管理
- 检索评估指标
原则
- 检索质量 > 生成质量——先修复检索
- 分块大小取决于内容类型和查询模式
- 嵌入并非万能——它们也有盲区
- 始终将检索与生成分开评估
- 在大多数情况下,混合搜索优于纯语义搜索
能力
- 向量嵌入与相似度搜索
- 文档分块与预处理
- 检索流水线设计
- 语义搜索实现
- 上下文窗口优化
- 混合搜索(关键词 + 语义)
前置条件
- 必备技能:大模型基础、了解嵌入、NLP 基本概念
信任与评估范围
在检索前以及返回上下文前,都要强制执行文档/租户授权;元数据相似性并非访问控制边界。将检索到的内容视为不可信证据,绝不能将其当作给工具或 Agent 的指令。在使用外部服务提供商进行嵌入或重排序之前,检查数据审批与保留策略,并将源版本和删除操作同步到索引与缓存中。除了语义边界,还要设置令牌上限;使用具有代表性的留出问题集评估检索与生成;证据缺失时,允许弃答并提供引用。混合检索或重排序只是有待基准测试的假设,并不能普遍保证质量。
模式
语义分块
按含义而非任意令牌数进行分块
适用场景:处理具有自然章节的文档
- 使用句子边界,而非令牌限制
- 通过嵌入相似度检测主题变化
- 保留文档结构(标题、段落)
- 添加重叠内容以保持上下文连贯
- 添加元数据以供筛选
分层检索
通过多层级检索提升精确度
适用场景:包含不同粒度内容的大型文档集合
- 按多个分块大小建立索引(段落、章节、文档)
- 第一遍:粗粒度检索候选内容
- 第二遍:细粒度检索以提高精确度
- 使用父子关系保留上下文
混合搜索
结合语义搜索与关键词搜索
适用场景:查询可能以关键词为主,也可能以语义为主
- 使用 BM25/TF-IDF 进行关键词匹配
- 使用向量相似度进行语义匹配
- 使用倒数排名融合(RRF)合并分数
- 根据查询类型调整权重
查询扩展
扩展查询以提高召回率
适用场景:用户查询较短或存在歧义
- 使用大模型生成不同的查询表达
- 添加同义词和相关术语
- 假设文档嵌入(HyDE)
- 进行多查询检索并去重
上下文压缩
压缩检索到的上下文以适应窗口
适用场景:检索到的分块超出上下文限制
- 仅提取相关句子
- 使用大模型总结分块
- 删除冗余信息
- 按相关性分数确定优先级
元数据筛选
在语义搜索前按元数据预筛选
适用场景:文档包含结构化元数据
- 先按日期、来源、类别筛选
- 在向量相似度搜索前缩小搜索范围
- 将元数据筛选与语义分数结合
- 为元数据建立索引以便快速筛选
易踩陷阱
固定大小分块会破坏句子和上下文
严重程度:高
情况:使用固定的 token/字符限制进行分块
症状:
- 检索到的分块感觉不完整或被截断
- 答案质量波动极大
- 召回率高但精确率低
为什么会出问题: 固定大小的分块会在句子中间、段落中间或思路中间进行切分。 由此产生的嵌入表示的是不完整的想法,导致 检索质量低下。用户搜索的是概念,得到的却是碎片。
推荐的修复方法:
使用尊重文档结构的语义分块:
- 按句子/段落边界切分
- 使用嵌入相似度检测主题变化
- 包含重叠以保持上下文连续性
- 将标题和文档结构保留为元数据
纯语义搜索而不进行元数据预过滤
严重程度:中
情况:仅使用向量相似度,忽略元数据
症状:
- 返回过时的信息
- 混入来自错误来源的内容
- 用户无法限定搜索范围
为什么会出问题: 语义搜索会找到语义相似的内容,但不一定是 相关的内容。没有元数据过滤,当用户想要近期内容时你会返回旧文档, 还会返回错误的类别或不适用的内容。
推荐的修复方法:
实现混合过滤:
- 在向量搜索之前按元数据(日期、来源、类别)预过滤
- 按相关性标准对结果进行后过滤
- 在检索 API 中包含元数据
- 允许用户指定过滤器
对不同内容类型使用相同的嵌入模型
严重程度:中
情况:对代码、文档和结构化数据使用同一个嵌入模型
症状:
- 代码搜索返回无关结果
- 领域术语无法正确匹配
- 相似概念无法聚类
为什么会出问题: 嵌入模型是在特定内容类型上训练的。将文本 嵌入模型用于代码,或将通用模型用于特定领域 内容,会产生糟糕的相似度匹配。
推荐的修复方法:
按内容类型评估嵌入:
- 对代码使用代码专用嵌入(例如 CodeBERT)
- 考虑领域专用或微调过的嵌入
- 在选择之前对检索质量进行基准测试
- 如有需要,为不同内容类型建立单独的索引
直接使用第一阶段检索结果
严重程度:中
情况:从向量搜索中取 top-K 而不进行重排序
症状:
- 明显相关的文档不在靠前结果中
- 结果顺序看起来随意
- 增加更多结果会提升质量
为什么会出问题: 第一阶段检索(向量搜索)优化的是召回率,而不是精确率。 按嵌入相似度得出的靠前结果未必是与 特定查询最相关的。交叉编码器重排序会显著提高 最终结果的精确率。
推荐的修复方法:
添加重排序步骤:
- 检索更大的候选集(例如 top 20-50)
- 使用交叉编码器(查询-文档对)进行重排序
- 返回重排序后的 top-K(例如 top 5)
- 缓存重排序器以提升性能
将最大上下文塞入 LLM 提示词
严重程度:中
情况:无论相关性如何都使用所有检索到的上下文
症状:
- 上下文越多,答案越容易偏离
- LLM 忽略关键信息
- token 成本高
为什么会出问题: 更多上下文并不总是更好。无关上下文会干扰 LLM, 增加延迟和成本,并可能导致模型忽略 最相关的信息。模型存在注意力限制。
推荐的修复方法:
使用相关性阈值:
- 设置最低相似度分数截断值
- 将上下文限制为真正相关的分块
- 如有需要,进行摘要或压缩
- 按相关性对上下文排序
未将检索质量与生成质量分开衡量
严重程度:高
情况:仅评估端到端 RAG 质量
症状:
- 无法诊断 RAG 表现不佳的原因
- 修改提示词没有帮助
- 质量随机波动
为什么会出问题: 如果答案是错误的,你无法判断是检索失败还是生成失败。这会导致无法调试,并引发错误的修复方向(在检索才是问题时却去调整提示词)。
推荐的修复方法:
将检索评估分开进行:
- 创建带有相关文档标注的检索测试集
- 衡量检索的 MRR、NDCG、Recall@K
- 仅在正确检索结果上评估生成质量
- 随时间跟踪指标
源文档变更时未更新嵌入
严重程度:中
情况:嵌入仅生成一次,从未刷新
症状:
- 返回过时信息
- 引用已删除的内容
- 与源内容不一致
为什么会出问题: 文档会变化,但嵌入不会。用户会检索到过时内容,或者更糟,检索到已不存在的内容。这会侵蚀对系统的信任。
推荐的修复方法:
实现嵌入刷新:
- 跟踪文档版本/哈希
- 文档变更时重新嵌入
- 处理已删除的文档
- 考虑为嵌入设置 TTL
对所有查询类型使用相同的检索策略
严重程度:中
情况:对关键词密集型查询使用纯语义搜索
症状:
- 精确词项搜索漏掉结果
- 概念搜索过于字面化
- 用户对两者都感到沮丧
为什么会出问题: 有些查询偏向关键词(查找特定词项),而另一些则是语义的(查找概念)。纯语义搜索在精确匹配上失败;纯关键词搜索在释义查询上失败。
推荐的修复方法:
实现混合搜索:
- 使用 BM25/TF-IDF 进行关键词匹配
- 使用向量相似度进行语义匹配
- 使用 Reciprocal Rank Fusion 进行合并
- 根据查询模式调整权重
相关技能
配合良好:ai-agents-architect、prompt-engineer、database-architect、backend
何时使用
- 用户提到或暗示:构建 RAG
- 用户提到或暗示:向量搜索
- 用户提到或暗示:嵌入
- 用户提到或暗示:语义搜索
- 用户提到或暗示:文档检索
- 用户提到或暗示:上下文检索
- 用户提到或暗示:知识库
- 用户提到或暗示:结合文档的 LLM
- 用户提到或暗示:分块策略
- 用户提到或暗示:pinecone
- 用户提到或暗示:weaviate
- 用户提到或暗示:chromadb
- 用户提到或暗示:pgvector
示例
用户请求:
使用 @rag-engineer 来完成此任务:构建检索增强生成系统的专家。
限制
- 仅当任务与上述范围明确匹配时才使用此技能。
- 不要将输出视为特定环境验证、测试或专家审查的替代品。
- 如果缺少必需的输入、权限、安全边界或成功标准,请停止并请求澄清。