
一、引言:AI搜索正在成为默认入口2026年7月,Similarweb发布的最新数据显示,Google AI Overviews在搜索结果中的出现率从一年前的15%飙升至43%,AI Mode的月访问量从2025年6月的1.26亿增长到2026年5月的2.79亿,翻了一倍以上。这意味着AI搜索已经不再是可选的附加功能,而是正在成为用户获取信息的默认入口。这一变革的本质,是互联网内容分发的底层架构从"搜索引擎的倒排索引"转向"大模型的检索增强生成(RAG)"。当底层架构发生根本性改变时,整个内容生态——从搜索引擎优化到内容创作、从流量分发到商业模式——都在经历一场范式级革命。本文将深入分析AI搜索背后的RAG技术架构,从粗召回、重排序、信源过滤到答案生成,完整拆解Google AI Overviews的技术实现,并探讨GEO(生成式引擎优化)这一新兴领域的核心方法论。二、RAG系统架构深度拆解2.1 RAG系统的四个核心阶段一个完整的RAG(Retrieval-Augmented Generation)系统分为四个核心阶段:用户查询 │ ▼ 第一阶段:粗召回 (Coarse Retrieval) ├── 倒排索引检索 (BM25) ├── 向量检索 (Dense Embedding) └── 混合检索 (Hybrid Search) │ ▼ 第二阶段:重排序 (Reranking) ├── Cross-Encoder 精细打分 └── 多维度相关性评估 │ ▼ 第三阶段:信源过滤 (Source Filtering) ├── 信源等级评估 ├── 时效性验证 └── 权威性加权 │ ▼ 第四阶段:答案生成 (Answer Generation) ├── 上下文注入 ├── 多文档综合 └── 引用标注2.2 第一阶段:粗召回(Coarse Retrieval)粗召回的目标是从海量的全网数据中,快速筛选出与用户查询相关的数千个候选文档。Google AI Overviews采用混合检索策略,同时使用倒排索引检索和向量检索:importnumpyasnpfromtypingimportList,Tuple,Dict,AnyfromdataclassesimportdataclassimportmathfromcollectionsimportCounter@dataclassclassDocument:"""文档表示"""doc_id:strtext:strtitle:strurl:strsource_authority:float# 信源权威性评分publish_date:strembedding:np.ndarray=NoneclassBM25Retriever:""" BM25倒排索引检索器 擅长捕捉精确的术语匹配 """def__init__(self,k1:float=1.5,b:float=0.75):self.k1=k1 self.b=b self.doc_freq={}# 词 - 包含该词的文档数self.doc_lengths=[]# 每篇文档的长度self.avg_doc_length=0self.total_docs=0self.inverted_index={}# 词 - {doc_id: term_frequency}self.documents=[]deffit(self,documents:List[Document]):"""构建索引"""self.documents=documents self.total_docs=len(documents)# 构建倒排索引fordocindocuments:self.doc_lengths.append(len(doc.text.split()))# 分词并统计词频terms=self._tokenize(doc.text)term_freq=Counter(terms)forterm,freqinterm_freq.items():iftermnotinself.inverted_index:self.inverted_index[term]={}self.doc_freq[term]=0self.inverted_index[term][doc.doc_id]=freq self.doc_freq[term]+=1self.avg_doc_length=np.mean(self.doc_lengths)def_tokenize(self,text:str)-List[str]:"""简单分词"""importrereturnre.findall(r'\w+',text.lower())defsearch(self,query:str,top_k:int=100)-List[Tuple[Document,float]]:""" BM25搜索 Args: query: 查询字符串 top_k: 返回前k个结果 Returns: [(document, bm25_score)] """query_terms=self._tokenize(query)scores=np.zeros(self.total_docs)forterminquery_terms:iftermnotinself.inverted_index:continue# IDF计算idf=math.log((self.total_docs-self.doc_freq[term]+0.5)/(self.doc_freq[term]+0.5)+1.0)# 对每篇文档计算BM25得分fordoc_idx,docinenumerate(self.documents):ifdoc.doc_idinself.inverted_index[term]:tf=self.inverted_index[term][doc.doc_id]doc_len=self.doc_lengths[doc_idx]# BM25评分公式score=idf*((tf*(self.k1+1))/(tf+self.k1*(1-self.b+self.b*doc_len/self.avg_doc_length)))scores[doc_idx]+=score# 返回Top-K结果top_indices=np.argsort(scores)[::-1][:top_k]return[(self.documents[i],scores[i])foriintop_indices]classDenseRetriever:""" 稠密向量检索器(基于嵌入模型) 擅长捕捉语义相关但用词不同的内容 """def__init__(self,embedding_dim:int=768):self.embedding_dim=embedding_dim self.documents=[]self.embeddings=Nonedeffit(self,documents:List[Document]):"""构建向量索引"""self.documents=documents# 模拟嵌入模型(实际使用如Google的Gecko或text-embedding-004)self.embeddings=np.random.randn(len(documents),self.embedding_dim).astype(np.float32)# 归一化self.embeddings=self.embeddings/np.linalg.norm(self.embeddings,axis=1,keepdims=True)defembed_query(self,query:str)-np.ndarray:"""将查询转为嵌入向量(模拟)"""embedding=np.random.randn(self.embedding_dim).astype(np.float32)returnembedding/np.linalg.norm(embedding)defsearch(self,query:str,top_k:int=100)-List[Tuple[Document,float]]:""" 向量相似度搜索 Args: query: 查询字符串 top_k: 返回前k个结果 Returns: [(document, cosine_similarity)] """query_embedding=self.embed_query(query)# 余弦相似度similarities=np.dot(self.embeddings,query_embedding)top_indices=np.argsort(similarities)[::-1][:top_k]return[(self.documents[i],float(similarities[i]))foriintop_indices]classHybridRetriever:""" 混合检索器 结合BM25和向量检索的优势 """def__init__(self,bm25_weight:float=0.3,dense_weight:float=0.7,bm25_top_k:int=500,dense_top_k:int=500):self.bm25_weight=bm25_weight self.dense_weight=dense_weight self.bm25_top_k=bm25_top_k self.dense_top_k=dense_top_k self.bm25=Noneself.dense=Nonedeffit