RAG vs Search:技术路线与大厂选择¶
更新日期:2026-04-15
一、本质区别¶
飞书 add-on(待手动转 mermaid / 图)
component: blk_631fefbbae02400430b8f9f4
| 维度 | 传统 Search | RAG | AI Search (融合) |
|---|---|---|---|
| 输入形式 | 关键词 | 自然语言问题 | 自然语言问题 |
| 输出形式 | 文档列表 | 生成式答案 + 引用 | 生成式答案 + 链接 |
| 索引规模 | 万亿网页 | 百万-亿级文档 | 融合 |
| 索引技术 | 倒排索引 + PageRank | 向量索引 + 倒排 | 混合 |
| 更新延迟 | 分钟-小时 | 需要重嵌入,小时-天 | 混合 |
| 成本 | 极低/次 | 中 (需 LLM) | 高 |
| 精度 | 取决于用户判断 | 模型判断 | 模型判断 |
二、大厂路线选择¶
2.1 路线图¶
2.2 为什么 Google 不完全转向 RAG¶
Google 的困境:AI 搜索的每次查询成本是传统搜索的 10-100 倍,但广告收入没有成比例增长。全面转型 RAG 会毁掉商业模式。 传统搜索商业模式: - 查询成本: 毫秒级 + 微小算力 - 收入: 每次搜索 0.1-1 美元广告 (CPM 高峰) - 利润率: ~90%
AI Search (RAG) 商业模式: - 查询成本: LLM 生成 + 搜索 + 文档抓取 - 收入: 广告位减少 (答案直接给出) + 订阅 - 利润率: ~10-30% (估计)
Google 的策略: - 保留传统搜索作为基础 - AI Overview 作为"高价值"查询的增值服务 - 不激进转型, 等待基础设施成本下降
三、Perplexity 的 RAG 架构¶
flowchart LR
q["用户问题"]
rewrite["Query 改写<br/>LLM 转关键词"]
search["Web 搜索<br/>Bing / Google API"]
fetch["并行抓取<br/>20 个候选页"]
chunk["切块 + 嵌入"]
rerank["Rerank<br/>cross-encoder"]
gen["生成答案<br/>带引用"]
q --> rewrite --> search --> fetch --> chunk --> rerank --> gen
classDef stage fill:#fff,stroke:#cc785c,color:#1a1a1a;
class q,rewrite,search,fetch,chunk,rerank,gen stage
3.1 关键组件¶
四、企业内部该选哪个¶
飞书 add-on(待手动转 mermaid / 图)
component: blk_631fefbbae02400430b8f9f4
| 场景 | 推荐 | 原因 |
|---|---|---|
| 技术文档问答 | RAG | 数据量有限,向量检索够用 |
| 客服/知识库 | RAG + FAQ | 结构化答案为主 |
| 代码搜索 | 专用代码嵌入 + RAG | 代码语义与文本不同 |
| 法律/合规分析 | GraphRAG | 需要跨文档推理 |
| 新闻/实时信息 | Search API + LLM | 实时性要求高 |
| 产品说明+用户对话 | Hybrid RAG | 多源信息 |
| 研究综述 | Agentic RAG | 需要多轮检索和综合 |
五、RAG 会消亡吗¶
5.1 长上下文的威胁¶
Google Gemini 2M tokens, Llama-4 Scout 10M tokens。理论上能把整个知识库塞进上下文,直接问答。 判断: 简单 RAG (<10K 文档) 会被长上下文替代;复杂 RAG (企业级、多源、实时) 不会消失。
5.2 RAG 的分化方向¶
| 方向 | 核心特征 | 适用场景 |
|---|---|---|
| Simple RAG | embedding + top-k + LLM | 文档量小、单跳问答 |
| Hybrid RAG | 向量 + BM25 + 重排 | 需要精确召回的企业搜索 |
| GraphRAG | 实体图 + 子图召回 | 跨文档推理、合规、法律 |
| Agentic RAG | 多轮检索 + 工具调用 | 研究综述、复杂问答 |
| Long-context | 直接塞入 1M+ tokens | 单文档深读、代码库 |
| Cache-augmented | 预计算 KV 缓存 | 高频静态文档 |
六、为什么 Perplexity 能打 Google¶
6.1 Google 的反击¶
七、实现一个 Perplexity-like 系统¶
class MyPerplexity:
def __init__(self, search_api, llm, reranker):
self.search = search_api # Bing/Google PSE
self.llm = llm
self.reranker = reranker
def query(self, question, max_sources=5):
# Step 1: Query understanding - 改写为搜索 query
search_query = self.llm.generate(f"""
将这个问题改写为搜索引擎查询 (关键词形式):
问题: {question}
查询:""")
# Step 2: Web search
results = self.search(search_query, count=20) # 取 20 个候选
# Step 3: 并行 fetch 正文
docs = parallel_fetch([r['url'] for r in results])
# Step 4: Chunk
chunks = []
for doc in docs:
chunks.extend(chunk_text(doc, size=800))
# Step 5: Rerank
reranked = self.reranker.rank(question, chunks)[:max_sources]
# Step 6: 生成答案 (带引用)
context = "\n\n".join([f"[{i+1}] {c.text} (source: {c.url})"
for i, c in enumerate(reranked)])
answer = self.llm.generate(f"""
基于以下参考资料回答问题。每一句话末尾标注引用编号 [1][2]...
参考资料:
{context}
问题: {question}
回答:""")
return {
'answer': answer,
'sources': [{'url': c.url, 'title': c.title} for c in reranked]
}
参考文献¶
-
[1] Lewis et al. Retrieval-Augmented Generation for Knowledge-Intensive NLP. NeurIPS 2020. 论文
-
[2] Gao et al. Retrieval-Augmented Generation for LLMs: A Survey. 2023. 论文
-
[3] Edge et al. GraphRAG. 2024. 论文
-
[4] Agentic RAG Survey. 2025. 论文
-
[5] Perplexity AI
↑ 上级 · H. 应用层