关于 ai-rag
ai-rag 面向设计和评估外部信息检索系统的团队,帮助选择检索方案、追踪证据,并分别衡量检索质量与回答质量。
主要功能
- 01按数据需求选择检索模式
- 02定义语料与访问控制约定
- 03分别评估检索和回答质量
- 04按需加入混合搜索、重排或查询改写
- 05追踪检索工作流中的证据
适用场景
- 01为文档或实时工具选择检索方式
- 02建立检索评估基线
- 03诊断 RAG 流程中的检索遗漏
- 04审查证据与访问控制边界
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ vasilyu1983/ ai-agents-public --skill ai-rag安装后在 Claude Code 中输入/ai-rag确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/openai.yamlassets/chunking/template-basic-chunking.mdtemplate-code-chunking.mdtemplate-long-doc-chunking.mdassets/context/template-context-packing.mdtemplate-grounding.mdassets/design/rag-system-design.mdassets/eval/backend-comparison-template.jsongolden-retrieval-cases.jsonlgolden-retrieval-predictions.example.jsonlsecurity-redteam-cases.jsonltemplate-rag-eval.mdtemplate-rag-testset.jsonltemplate-search-eval.mdtemplate-search-testset.jsonlassets/indexing/template-index-config.mdtemplate-metadata-schema.mdassets/query/template-query-rewrite.mdassets/ranking/template-ranking-pipeline.mdtemplate-reranker.mdassets/retrieval/template-graph-hybrid-retrieval.mdtemplate-hybrid-search.mdtemplate-multimodal-document-retrieval.mdtemplate-multivector-retrieval.mdtemplate-reranking.mdtemplate-retrieval-pipeline.mdtemplate-tool-first-retrieval.mdassets/search/template-bm25-config.mdtemplate-hnsw-config.mdtemplate-hybrid-config.md详细介绍
RAG 与检索工程
运作原则
- 在调整分块大小之前,先选择检索模式。向量索引并非所有知识问题的默认答案。
- 将检索质量与答案质量分开,并分别进行评估。
- 将检索到的文本、工具响应和 MCP 资源视为不可信输入。
- 对于供应商或框架建议,优先采用一手资料;易变事实必须实时核实。
- 将 OpenTelemetry GenAI 语义约定视为有用但仍在演进的规范。
- **上下文预算:**使用生产环境的分词器测量文本块,并为指令、证据和输出预留空间;不同模型版本可能共用分词器,但这并不能证明它们具有相同的检索质量预算。
- **托管检索是切实可行的选择:**供应商的服务端网页搜索工具和托管文件搜索都是 API 原生的检索方式——在搭建可自托管的 RAG 技术栈之前,先评估这些方案。工具标识符带有版本信息且会变化;使用时请查阅供应商 API 文档,确认当前工具名称和版本。请参阅 references/managed-retrieval-vs-self-hosted.md。
- **检索未必是正确的选择:**如果语料库规模小且稳定,CAG / 长上下文 / 微调可能比 RAG 更便宜、更可靠。在搭建 RAG 流水线之前,请使用
../ai-context-layer/references/retrieve-vs-preload-vs-finetune.md中的决策评估标准。
范围说明:有关检索后的生成提示词结构和输出约定,请使用 ai-prompt-engineering。
实现说明:此技能涵盖检索理论和评估概念。对于包含可直接粘贴的 SQL、pgvector 资源、清单、摄取脚本和 Agent 检索工具约定的 vector-brain 构建,请使用 ai-vector-brain。
工作流
- 首先确定权威来源和新鲜度预算。 在处理分块器或嵌入器之前,先决定真实信息来自文档、实时工具还是结构化存储,以及答案允许过时多久。这个决定,而非分块大小,决定了架构。
- 运行检索模式决策(见下方的检索选择框架);使用 system design,根据新鲜度、可追溯性和延迟记录所选模式及备选方案。
- 在建立索引前编写语料库契约:使用 metadata schema 和 index configuration,定义租户/ACL 范围、来源、新鲜度和删除传播规则。对于数据摄取,根据实际语料库形态加载 basic、code 或 long-document chunking。
- 在添加基础设施前,构建词法基线和黄金评测。 使用 golden retrieval cases 和
scripts/retrieval_eval.py测量 recall@k、MRR 和 nDCG。scripts/exact_search_baseline.py是用于检查 ANN 损失的穷举向量搜索;其哈希嵌入器是词法冒烟测试样例,并非训练所得嵌入的基准。 - 路由检索路径并选择检索后的处理模式。 路径:语义、词法(BM25 加精确匹配,因此文档、条款和工单 ID 可通过字符串命中)、关系(图遍历)、结构化(通过注册表/SQL 查询“当前版本 / 所有者 / 谁批准 / 是否生效”)。输出模式:返回带引用的证据(去重 + 重排)、计算结果(聚合、时间谓词)或综合答案。合规/受监管语料库的默认方式是提供证据并检查引用支持度,由调用方 Agent 负责综合;只有在使用方无法基于证据进行推理时才采用其他方式,并添加引用支持度门控。详情(包括仅词法 FTS5/BM25 升级路径):retrieval-choice-framework.md。
- 针对已测出的故障添加一层。 从 retrieval 开始;词法/语义漏检时加载 hybrid search,排序漏检时加载 reranking,查询不匹配时加载 query rewriting。只有针对其他已选模式时才使用 template index。
- 将检索评测和答案评测作为独立关卡。 使用 context packing 和 grounding 保留证据 ID,然后使用 answer evaluation 检查忠实度和弃答情况。引用 ID 检查可以证明目标存在,但无法证明某项主张能从引用文本中推导出来。
- 扩展规模前先做好监测:端到端必须具备证据 ID、检索模式跟踪记录和置信度分数,以便将错误答案追溯到具体的检索决策(参见 observability-tracing-contract.md)。
- 将评测集视为回归关卡,而非一次性报告。 每次更改分块器、嵌入器、索引或重排器前,以及每次更换供应商(嵌入模型、重排器、向量数据库)前,都要重新运行评测——无声回归是“能用”的 RAG 系统退化最常见的原因。
快速参考
| 需求 | 推荐路径 | 适用场景 | 不适用场景 |
|---|---|---|---|
| 小型语料可放入上下文 | 长上下文提示词或轻量级搜索 | 更新频率低、审计负担小 | 语料规模大、变化快,或引用至关重要 |
| 提供商托管的检索 | 提供商的网页搜索服务工具(查找当前版本的工具 ID)或托管文件搜索 | 获取带引用的最新网页数据、快速启动、无需运维基础设施 | 需要数据驻留控制、自定义排序机制,或超出提供商默认设置的语料隔离 |
| 提供商托管的文件/文档检索 | OpenAI 文件搜索(Responses API) | 标准文档问答、基础设施投入意愿有限 | 需要自定义排序、严格的数据驻留控制或深入的检索调优 |
| AWS 上由提供商托管的文档检索 | AWS Bedrock Knowledge Bases | 原生使用 AWS,希望通过托管服务完成数据摄取、嵌入和检索,并具备 IAM/数据驻留控制 | 需要跨云可移植性或自定义排序机制 → references/aws-bedrock-knowledge-bases.md |
| 数据事实来源是工具/API | 工具优先或 MCP 检索 | 数据存放在 SQL、CRM、工单系统、SaaS API 或内部工具中 | 实际上需要对大型文本语料进行语义检索 |
| 网站或研究资料摄取 | 先爬取/提取,再建立索引 | 来源始于网站、报告或广泛的网络研究 | 只需一次性浏览,而非维护检索系统 |
| 整篇文档或主题类问题 | RAPTOR 式摘要树(递归聚类并汇总,跨层级检索) | 答案需要综合长文档或多个章节,且不存在实体图谱 | 问题属于段落级查找,或语料变化速度快于重建摘要树的速度 → references/retrieval-patterns.md §6 |
| 精确关联或聚合 | SQL/图检索 | 问题需要筛选、关联、计数或关系遍历 | 主要问题是自然语言语料查找 |
| 标准知识检索 | 混合搜索 + 重排 | 混合词法与语义查询、要求高召回率、延迟可控 | 更简单的托管方案或工具优先方案已经能解决问题 |
| 生成式代码仓库/上下文中心语料 | 图约束混合检索(图谱确定范围、向量召回、重排) | 已编译的多代码仓库/上下文中心,且已有知识/代码图谱 | 语料没有图谱,或简单语义查找已通过评估 |
| 高精度检索 | 延迟交互/多向量检索 | 近重复文档、细微措辞差异、PDF 页面、多语言精确检索 | 延迟预算紧张,且 BM25 + 稠密检索 + 重排已足够 |
| PDF、表格、图表 | 多模态文档检索 | OCR 会丢失结构,或布局含义很重要 | 纯文本提取质量已经很高 |
| 生产就绪证明 | 黄金评估 + 精确基线 + 追踪记录 | 需要证明质量,而不只是描述架构 | 一次性的探索性研究,没有可持久使用的语料 |
检索选择框架
Need external knowledge?
├─ No -> Use direct prompting / standard prompt engineering
└─ Yes
├─ Data already lives behind tools, APIs, SQL, or SaaS?
│ └─ Start with tool-first or MCP retrieval
│
├─ Corpus fits comfortably in model context and changes slowly?
│ └─ Try long-context or hosted file search before custom indexing
│
├─ Need joins, counts, or relationship traversal?
│ └─ Use SQL, graph, or graph+vector hybrid retrieval
│ (paradigm choice: see ../software-database-design/SKILL.md#technology-selection)
│
├─ Need fresh web data or provider-managed file search without self-hosting?
│ └─ Evaluate managed retrieval first: provider web-search server tools,
│ hosted file-search, or other provider-native tools before building a custom stack
│ (see references/managed-retrieval-vs-self-hosted.md for decision criteria)
│
├─ Need retrieval over prose or mixed documents?
│ └─ Use sparse+dense hybrid as the default baseline
│
├─ Retrieval misses subtle matches or page-level structure?
│ └─ Add late interaction, multivector, or multimodal retrieval
│
├─ Precision still poor?
│ └─ Add reranking, filters, query rewriting, and stronger evals
│
└─ Same queries keep re-running synthesis? Need a reviewable knowledge asset?
└─ Switch from retrieval to knowledge compilation (P7 in ai-context-layer)
Route to ai-context-layer/references/knowledge-compilation-and-wiki-pattern.md
Blocks A15 (RAG re-run per turn instead of compiled knowledge)
核心概念
- 权威来源:明确真相来自检索到的文档、实时工具、结构化数据库,还是它们的混合来源。
- ACL 不变量(由此技能负责):在候选生成阶段强制执行调用方的 ACL/租户范围——必须在融合、重排器和任何缓存之前执行。绝不能在重排器之后或生成之后再过滤:重排后过滤仍会将未授权文本发送给重排器、响应缓存和任何第三方重排器 API,而且由于选择 top-k 时未考虑范围,会悄然降低召回率。此技能和
ai-vector-brain中的每张检索流水线图、SQL 示例和检查清单,都必须显示 ACL 过滤发生在候选生成阶段或之前。 - 信任边界:检索到的块、上传的文件、MCP 资源、工具结果和网页在验证前均不可信。
- 新鲜度模型:设定过时预算、失效触发条件和删除传播规则。
- 生成式上下文语料库:编译后的多仓库/上下文中心是有效的语料库;基于图边界的构建路径见 ../ai-vector-brain/references/dev-context-hub-vector-recipe.md。
- 证据契约:返回稳定的证据 ID、来源元数据,以及足以在之后验证引用的上下文。
- 两个评估维度:检索相关性和回答忠实度属于独立系统,必须分别衡量。
不适用此技能的情况
| 需求 | 转至 |
|---|---|
| 面向终端用户的产品或网站搜索(引擎选择、筛选项、自动补全、商品陈列、重新索引、搜索分析) | ../software-search/SKILL.md |
由大模型维护的 INDEX.md 通过检索评估的个人笔记集合 | ../docs-notes-retrieval/SKILL.md |
| 可直接粘贴使用的 SQL、DDL、pgvector 索引或后端加载脚本 | ../ai-vector-brain/SKILL.md |
| 端到端构建仓库/文档/合规向量大脑 | ../ai-vector-brain/SKILL.md |
| 应用上下文架构、记忆生命周期和落地边界 | ../ai-context-layer/SKILL.md |
| Agent 拓扑和工具编排 | ../ai-agents/SKILL.md |
| 机器人用户体验、对话流程和升级处理 | ../ai-bot-builder/SKILL.md |
设备端 iOS 检索拼接合成器(Apple Foundation Models、@Generable、对本地块进行检索且保证不使用云端) | ../software-ios-ai-engine/SKILL.md |
端到端自然对话 iOS 界面,由此技能 + ai-context-layer + ai-vector-brain 组合而成,包括路径 A(Foundation Models)和路径 B(仅向量数据库) | ../software-ios-ai-engine/references/composition-with-rag-context-vector.md |
| 跨平台自然对话(iOS / Android / web / Telegram-Discord-WhatsApp-Slack 机器人 / 语音 / 后端),可使用或不使用设备端模型 | ../ai-context-layer/references/conversational-surfaces-cross-platform.md |
检索错误定位关卡
在更改分块、嵌入、重排或生成器之前,先将失败归类为语料缺失、摄取丢失、候选遗漏、排序遗漏、上下文打包丢失、引用不匹配或回答生成错误。使用预言机证据运行一次生成器,并使用黄金证据 ID 运行检索。如果预言机上下文仍然导致失败,则修复回答契约或模型路径;如果黄金证据始终未进入候选集,则修复摄取或检索。只调优负责已测量损失的阶段,并保留前一阶段作为对照。
已知陷阱
- 尚未确定检索是否适合当前架构,就先调整分块大小、嵌入模型或重排器
- 直接沿用在其他模型上测得的分块大小或 token 预算启发式,而不重新测量
- 假设迭代式/Agent 式多跳检索能改善所有查询分布;添加循环开销前,应先在相同的多跳案例上与固定检索基线进行比较
- 在确认目标数据库支持所需扩展、文本搜索配置、生成列和索引运算符之前,就部署向量/全文检索迁移
- 在同一个迁移中混合 DDL、检索函数变更和大量内容种子,导致搜索功能故障阻碍语料库安全上线
- 仅仅因为嵌入或搜索基础设施已列入长期路线图,就将规模小且测试通过的词法检索语料库升级
- 将合成报告或摘要重新编入索引,并视作权威的一手证据
- 仅根据排行榜的某个快照来选择嵌入或重排器供应商,而不检查许可条款(许多开放权重重排器采用非商业许可)和所有权稳定性(重排器/嵌入供应商正通过收购不断整合;在基于需要大量重新索引的依赖构建系统前,请确认供应商变更后模型路线图和支持承诺仍然有效)
- 将检索召回率问题和答案忠实度问题当作同一个指标
- 依赖托管检索的默认设置,同时假设 ACL、数据驻留、新鲜度和删除语义都已得到妥善处理
- 在重排器之后或生成之后才过滤 ACL/租户范围,而不是在候选生成(融合前)时过滤——参见核心概念中的 ACL 不变量
- 混合工具输出、爬取的页面、上传的文件和 MCP 资源,却未对来源信息和信任边界进行规范化
常见反模式
请参阅 references/quick-start-guide.md,了解以下各项反模式的详细根因分析。
- 先选向量数据库,后考虑事实来源模型(
../ai-context-layer/references/anti-patterns-catalog.md中的 A2) - 对简单的查找任务使用 Agent 式检索循环
- 对可变语料库没有新鲜度或失效机制
- 不验证证据 ID 就格式化引用(A13 — 将来源信息视为可选元数据)
- 跨租户或跨敏感级别建立索引,之后再补上检索时过滤(A10)
- 每轮都重新运行 RAG,而非编译知识(A15)——解决方法:改用知识编译(
../ai-context-layer/references/knowledge-compilation-and-wiki-pattern.md中的 P7)
供应商推荐流程
当用户询问“最佳”工具、模型或框架时:
- 阅读 data/sources.json,并从标记为
add_as_web_search: true的来源开始。 - 根据当前的一手文档、发布说明或官方基准验证相关说法。
- 优先提供持久有效的指导:检索模式选择、运维权衡、集成限制、评估和回滚计划。
- 如果无法实时浏览,请说明排名、价格和基准说法未经验证。
研究与摄取流水线
请参阅 references/research-and-ingestion-patterns.md,了解爬取/提取(Firecrawl 风格)、研究循环(GPT Researcher 风格)、周期性数据流水线(dlt 风格)和 CLI 评估工作流(simonw/llm 风格)。核心规则:将爬取/提取与排序/检索分开,并将原始采集内容和分块保留为不同的产物。
脚本
check_sources.py — 验证 sources.json · retrieval_eval.py — recall@k/MRR/nDCG · check_citation_support.py — 证据 ID 验证 · generate_synthetic_rag_testset.py — 测试集脚手架 · late_interaction_eval.py — ColBERT/ColPali 离线评估(无推理运行器) · exact_search_baseline.py — 精确余弦/点积基准 · hybrid_rrf_demo.py — BM25(k1/b)+ 向量 + RRF 冒烟测试
导航
参考资料(此技能)
架构与选择:retrieval-choice-framework.md · managed-retrieval-vs-self-hosted.md · pipeline-architecture.md · aws-bedrock-knowledge-bases.md
语料库与分块:chunking-strategies.md · chunking-patterns.md · index-selection-guide.md · embedding-model-guide.md · research-and-ingestion-patterns.md · pdf-heavy-retrieval-playbook.md
检索模式:retrieval-patterns.md · vector-search-patterns.md · hybrid-fusion-patterns.md · bm25-tuning.md · graph-rag-patterns.md · contextual-retrieval-guide.md · advanced-rag-patterns.md · agentic-rag-patterns.md
排序与查询:ranking-pipeline-guide.md · query-rewriting-patterns.md · backend-comparison-fixtures.md
依据与评估:grounding-checklists.md · confidence-scoring.md · abstention-recipe.md · rag-evaluation-guide.md
运维与调试:observability-tracing-contract.md · retrieval-debugging-runbook.md · rag-troubleshooting.md · rag-caching-patterns.md · multilingual-domain-patterns.md · security-red-team-cases.md
产品搜索评估、学习排序、点击模型和搜索 SLO 收录于 software-search:search-evaluation-guide.md(nDCG/MRR 人工评判数据集,可复用于检索评估) · learning-to-rank-pipeline.md · click-models-and-bias-correction.md · user-feedback-learning.md · distributed-search-slos.md · search-debugging.md
入门:quick-start-guide.md - 工作流、完整模板索引、详细反模式 · wiki-grounded-retrieval.md
模板(此技能)
评估数据:后端比较模板 · 黄金检索预测示例 · 安全红队案例 · RAG 测试集 · 搜索测试集 · 搜索评估模板
检索变体:图 + 向量 · 多模态文档 · 多向量 · 工具优先
搜索索引配置:BM25 · HNSW · 混合搜索 · IVF
跨技能参考
../ai-context-layer/references/anti-patterns-catalog.md- 本技能中引用的 A2、A10、A13、A15 反模式../ai-context-layer/references/retrieve-vs-preload-vs-finetune.md- 决策准则:RAG 与长上下文、微调的比较../ai-context-layer/references/knowledge-compilation-and-wiki-pattern.md- 用于编译知识的 P7 模式(A15 修复方案)../ai-vector-brain/references/dev-context-hub-vector-recipe.md- 生成式上下文语料的图约束构建路径../software-ios-ai-engine/references/composition-with-rag-context-vector.md- iOS 对话式 RAG 组合
外部来源
- data/sources.json - 用于实时验证的主要来源目录
相关技能
调用前先确认:每个基础技能都有 When to Apply / When to Skip 部分。
- ai-evals - 用于忠实度/答案评估的 LLM 评审偏差控制与可复现性
- ai-prompt-engineering - 基于检索的提示词约定与结构化输出
- ai-agents - Agent 编排与工具工作流
- ai-mlops - 部署、监控与治理
- ai-llm-inference - 延迟、批处理、缓存与成本控制
- docs-notes-retrieval - 用于检索的本地笔记库与笔记本导出打包
- foundations-information-theory - 用于分块评分、MMR 多样性与漂移检测的熵、互信息和 KL 散度
经验循环
当先前的决策或陷阱与当前任务相关时,如果存在 learnings.consolidated.md,请查阅该文件;仅在需要历史记录或该文件是唯一可用选项时,才使用 learnings.md。否则跳过这两个文件。应用经验后,通过 agents-skills-feedback-loop/scripts/append_learning.py 向 learnings.md 追加一条注明日期的条目。不要修改 SKILL.md 本身。