🧠 RAG高级应用详解

从"图书馆查资料"到"智能研究员"——RAG技术的进化之路

检索增强 Agentic RAG Graph RAG

📖 RAG的进化之路

RAG(Retrieval-Augmented Generation)已经从一个简单的"查资料+写答案"模式,进化出了多种高级形态。就像从"图书馆管理员"进化成了"研究员+分析师+撰稿人"。

"世界上有一种记忆,叫做向量数据库里的768维浮点数。凌晨3点,我在千万个向量中寻找那个最相似的..."

RAG技术演进图谱

阶段名称特点
1.0基础RAG简单向量检索+拼接上下文
2.0高级RAG查询重写、重排序、混合检索
3.0模块化RAG检索、生成模块化,灵活组合
4.0Agentic RAGAgent自主决策检索策略

🔥 5种RAG高级形态

1. Agentic RAG(代理型RAG)

不是一次性检索,而是多轮决策:先检索→分析→发现信息不足→再检索→整合→生成。

// Agentic RAG流程 const agenticRAG = { async answer(question) { let context = []; let iterations = 0; let answer = null; while (iterations < 3 && !answer) { // 1. 分析还需要什么信息 const gapAnalysis = await this.analyzeGap(question, context); if (gapAnalysis.sufficient) { // 信息足够,生成答案 answer = await this.generate(question, context); } else { // 2. 针对缺口进行精确检索 const newDocs = await this.retrieve(gapAnalysis.missingKeywords); context = [...context, ...newDocs]; iterations++; } } return answer; } };

2. Graph RAG(图RAG)

将文档构建成知识图谱,通过实体关系进行多跳推理。适合复杂关联查询。

示例场景

查询"OpenClaw创始人的 mentor 是谁"→找到创始人→找 mentor 关系→返回结果

3. 多模态RAG

不仅检索文本,还检索图片、音频、视频。通过CLIP等模型统一嵌入空间。

4. 自反思RAG(Self-RAG)

生成过程中不断自我验证:"这段内容有事实依据吗?"→无依据→重新检索。

5. 混合检索RAG

结合多种检索方式:向量检索+关键词检索+结构化查询,加权融合结果。

🔧 OpenClaw中的RAG实战

💡 妙趣Tips:OpenClaw的tdai_memory_search就是RAG的实践!它从长期记忆中检索相关信息,增强当前对话。

场景1:智能客服RAG系统

// 结合OpenClaw工具构建RAG客服 async function customerServiceRAG(userQuestion) { // 1. 查询重写(优化检索) const optimizedQuery = await sessions_spawn({ task: `将用户问题改写为更适合检索的形式:${userQuestion}`, runtime: "subagent" }); // 2. 多路检索 const [vectorResults, keywordResults] = await Promise.all([ vectorSearch(optimizedQuery), // 向量检索 keywordSearch(optimizedQuery), // 关键词检索 ]); // 3. 重排序(Reranking) const mergedResults = [...vectorResults, ...keywordResults]; const rankedResults = await rerank(mergedResults, userQuestion); // 4. 取Top-K作为上下文 const context = rankedResults.slice(0, 5).map(r => r.content).join("\n\n"); // 5. 生成回答 const answer = await generateWithContext(userQuestion, context); return answer; }

场景2:Agentic RAG文档助手

// Agentic RAG:自主决定检索策略 async function agenticDocAssistant(query) { const agent = { state: { context: [], retrieved: [], iterations: 0 }, async think() { // Agent判断是否已足够回答 const assessment = await sessions_spawn({ task: `基于当前上下文,判断是否足以回答"${query}"? 如果不足,指出还需要什么信息。`, runtime: "subagent" }); return assessment; }, async retrieve(keywords) { // 执行检索 const results = await tdai_memory_search({ query: keywords, limit: 5 }); this.state.retrieved.push(...results); this.state.context = this.formatContext(this.state.retrieved); }, async generate() { // 生成最终答案 return await sessions_spawn({ task: `基于以下上下文回答问题"${query}": ${this.state.context}`, runtime: "subagent" }); } }; // 执行循环 while (agent.state.iterations < 3) { const assessment = await agent.think(); if (assessment.sufficient) break; await agent.retrieve(assessment.missingInfo); agent.state.iterations++; } return await agent.generate(); }

⚡ RAG性能优化

优化点方法效果
查询重写用LLM优化用户查询检索准确率+30%
分块策略语义分块>固定长度分块召回率+25%
混合检索向量+关键词+结构化覆盖率+40%
重排序Cross-encoder精排Top-K准确率+35%
上下文压缩提取关键片段减少Token消耗

🔗 相关教程