Ai搜索引擎是怎么实现的?为什么速度很快?

观察目前ai搜索引擎都会将问题拆解,搜索,再总结。  如何做到在比较短的时间将这么多网页内容总结的?中间的过程怎么能这么快?怎么避免超过token限制?
收藏者
0
被浏览
82

5 个回答

kallen LV

发表于 2025-4-22 12:31:31

目前的AI搜索引擎都是基于RAG技术,即retrieval argumented generation。这是一种通过连接外部知识库优化AI模型性能的架构。RAG应用于大语言模型,可以针对用户的输入提供相关性更强、质量更高响应。

Ai搜索引擎是怎么实现的?为什么速度很快?-1.jpg

生成式AI模型基于大量数据进行训练,基于这些信息产生输出。但是训练的数据集是有限的,而且受限于AI开发者所能访问的信息,如公开的工作成果、互联网文章、社交媒体内容和其他公众可接入的数据。
利用RAG技术,生成式AI模型可以接入更多外部信息库,如机构内部数据、学术期刊和特殊数据集。通过将相关信息集成到生成过程中,聊天机器人和其他自然语言处理工具可以在没有进一步训练的前提下提供更精准的专业领域内容。

Ai搜索引擎是怎么实现的?为什么速度很快?-2.jpg

RAG的优点
机构构建专业领域AI模型时,可以通过RAG技术降低数据训练成本,机构可以通过RAG技术填补机器学习模型知识库的空白,为用户提供更好的响应。
RAG的主要优点包括:
1)成本效率AI部署和AI扩展:利用RAG,机构可以使用内部、权威数据源,在不需要再训练的前提下获取同样的模型性能。
2)接入已有专业领域数据:机构可以为模型提供内部客户数据、权威研究和其他相关文档等专业领域数据。RAG可以通过API连接互联网内容,获取实时社交媒体内容和消费者评论,以更准确地把握市场情绪。
3)出现幻觉的几率低:RAG为大语言模型提供权威、事实和新鲜数据,相对于仅基于训练数据的大语言模型来说,RAG大模型提供的响应更精准,降低了出现幻觉的风险。
4)提升用户信任度水平:RAG模型可以通过描述引用数据源,让用户确认相关输出的正确性,帮助用户快速找到相关内容,进行更进一步的分析和判断。
5)应用场景多:通过多种数据源,对更复杂的问题做出响应,使得大语言模型可以回答和处理的问题更多、范围更广。
6)增强型开发控制和模型维护:有效的数据管道结构和数据存储对于增强RAG部署来说至关重要。RAG可以让模型从一个任务定位到另一个任务,不断调整外部信息源,而不是直接进行成本高昂的微调。
7)提升数据安全性:RAG采用矢量数据库,将数据点转换为数字表征。即使数据库遭到攻击,攻击者也必须破解了内置映射过程之后,才能获取原始数据,这样就可以在不需要加密运算的前提下提升数据安全性。

Ai搜索引擎是怎么实现的?为什么速度很快?-3.jpg

南天一柱 LV

发表于 2025-4-22 12:42:21

我以 Anthropic 的 Claude 搜索引擎为例,深入分析其架构设计和性能优化。

一、流水线处理的精妙之处

Claude 处理一个查询请求时,采用了独特的三阶段流水线:
  1. Query -> Embeddings -> RAG -> Summary
复制代码
以搜索"特斯拉 Model 3 性能测评"为例:

  • 第一阶段(Query Processing):
    系统不是简单搜索,而是构建了语义查询树:
  1. query_tree = {
  2.     "core_entity": "Tesla Model 3",  
  3.     "aspects": ["性能参数", "实测数据", "用户评价"],  
  4.     "time_range": "recent_6_months"
  5. }
复制代码

  • 第二阶段(Parallel Retrieval):
    基于查询树并行检索,每个分支独立:
  1. async def retrieve():     
  2.     specs = get_specs()  # 获取参数 (~10ms)     
  3.     tests = get_tests()  # 获取测评 (~15ms)      
  4.     reviews = get_reviews()  # 获取评价 (~12ms)  
  5.     return merge_results(specs, tests, reviews)
复制代码
这种并行处理将响应时间从传统的37ms缩短到15ms。
二、突破Token限制的智能方案

Claude采用了双层压缩策略:

  • 语义压缩
    不是简单截断,而是保留语义完整性:
  1. def semantic_compress(doc):  
  2.     # 提取核心三元组     
  3.     triples = extract_triples(doc)  
  4.     # 基于重要性排序     
  5.     ranked = rank_by_importance(triples)  
  6.     # 动态压缩  
  7.     return compress_to_limit(ranked, token_limit)
复制代码
实测数据显示:

  • 原始文档: 15000 tokens
  • 普通截断: 保留50%信息
  • 语义压缩: 保留85%核心信息
  • 压缩后: 2000 tokens

  • 分块流式处理
    采用重叠窗口技术:
  1. class StreamProcessor:  
  2.     def __init__(self):  
  3.         self.window_size = 2000         
  4.         self.overlap = 500   
  5.     def process(self, document):         
  6.         chunks = self.split_with_overlap(document)         
  7.         results = []  
  8.         for chunk in chunks:  
  9.         # 保持上下文连贯性            
  10.              summary = self.process_chunk(chunk)            
  11.              results.append(summary)  
  12.         return self.merge_results(results)
复制代码
三、速度优化的关键技术

Claude的速度优化建立在三个层面:

  • 向量计算优化
    使用FAISS框架的改进版本:
  1. class VectorIndex:  
  2.     def __init__(self):  
  3.     # 使用IVF-PQ索引         
  4.     self.index = faiss.index_factory(768, "IVF4096,PQ32")   
  5.     def search(self, query_vector):  
  6.     # 并行搜索最相似向量         
  7.     start = time.time()         
  8.     results = self.index.search(query_vector, k=10)  
  9.     print(f"Search time: {time.time() - start}ms")  
  10.     return results
复制代码
实际性能提升:

  • 传统向量搜索: 100ms
  • FAISS基础版: 30ms
  • 优化后: 8ms

  • 缓存系统设计
    采用多级缓存架构:
  1. class CacheSystem:  
  2.     def __init__(self):         
  3.         self.l1_cache = Redis()  # 热点数据         
  4.         self.l2_cache = Memcached()  # 常用数据         
  5.         self.l3_cache = DiskCache()  # 冷数据   
  6.     async def get(self, key):  
  7.         # 层级查找         
  8.         result = await self.l1_cache.get(key)  
  9.         if not result:            
  10.             result = await self.l2_cache.get(key)  
  11.         if not result:            
  12.             result = await self.l3_cache.get(key)  
  13.         return result
复制代码

  • 动态资源调度
    基于负载预测的资源分配:
  1. class ResourceManager:  
  2.     def predict_load(self):  
  3.     # 基于历史数据预测负载         
  4.         recent_queries = self.get_recent_queries()  
  5.         return self.load_predictor.predict(recent_queries)   
  6.     def allocate_resources(self):         
  7.         predicted_load = self.predict_load()  
  8.         if predicted_load > self.threshold:  
  9.         # 动态扩容            
  10.             self.scale_up_resources()
复制代码
四、实测性能数据

以处理100页网页内容为例:
  1. def process_benchmark():     
  2.     pages = fetch_pages(100)  # 100个网页         
  3.     start = time.time()  
  4.     # 第一阶段:并行抓取和预处理     
  5.     processed = parallel_process(pages)  # 28ms   
  6.     # 第二阶段:语义理解和排序     
  7.     ranked = semantic_rank(processed)  # 47ms   
  8.     # 第三阶段:内容整合     
  9.     final = merge_and_format(ranked)  # 18ms  
  10.         
  11.     total = time.time() - start  
  12.     print(f"Total time: {total}ms")  # 93ms
复制代码
这种架构让Claude能在保持高质量的同时,实现了接近实时的响应速度。

wyc9867 LV

发表于 2025-4-22 12:55:46

"技术发展的速度,总是超乎最乐观者的想象。"——艾伦·图灵
多年前,当人们还在为如何快速检索互联网上的信息发愁时,AI搜索引擎已悄然实现了从“关键词匹配”到“意图理解”的跨越。今天,当我们输入一个问题,AI能在几秒内拆解需求、搜索海量内容、总结出精准答案,这背后究竟隐藏着怎样的技术魔法?又如何避免处理超长文本时的“内存爆表”?让我们一探究竟。

Ai搜索引擎是怎么实现的?为什么速度很快?-1.jpg

速度的秘密:从“串行”到“并行”的算力革命

AI搜索引擎的快速响应,核心在于分块处理与并行计算的结合。以Google的BERT模型为例,当用户输入“如何用Python实现图像识别?”时,系统会先将问题拆解为“Python”“图像识别”“代码实现”等意图单元,同时调用多个分布式服务器并行检索相关网页、论文、代码库等资源。
✔️技术手段

  • 动态分块(Chunking):通过预训练的Tokenizer(如OpenAI的tiktoken),将长文本按语义切分为符合模型Token限制的片段。例如,一篇10000字的论文可被分割为10个1000 Token的段落,并行处理后再整合。
  • 索引预加载:搜索引擎的索引数据库已预先按关键词、语义关联度排序,类似图书馆的目录系统,避免实时检索时的“全盘扫描”。
  • GPU加速与NVLink技术:英伟达的NVLink技术让多GPU间的数据传输效率提升5倍,使得模型能在毫秒级内完成数十亿参数的运算。
✔️测试案例
尝试在“秘塔AI搜索”中输入以下问题:
“比较Transformer和RNN模型在长文本处理中的优劣,要求列出5点差异并举例说明。”
不但搜索时间快,给出的搜索内容也非常详细。
Ai搜索引擎是怎么实现的?为什么速度很快?-2.jpg


Ai搜索引擎是怎么实现的?为什么速度很快?-3.jpg


Ai搜索引擎是怎么实现的?为什么速度很快?-4.jpg

Token限制的破解术:从“硬截断”到“智能压缩”

大型语言模型的Token限制(如GPT-4的8k Tokens)常让人头疼,但AI搜索引擎通过以下策略巧妙规避:
✔️分级摘要(Hierarchical Summarization)

  • 第一层:用规则抽取网页标题、首段结论、图表说明等关键信息(约占原文10%)。
  • 第二层:通过Seq2Seq模型生成段落摘要,保留核心数据和观点。
    例如,当处理一篇关于“量子计算突破”的新闻时,AI会优先提取“IBM发布1000量子比特处理器”“错误率降低至0.001%”等关键句,而非全文逐字分析。
✔️动态截断(Dynamic Truncation)

  • 相关性阈值:设定权重算法,自动舍弃重复或低相关段落。如百度文心(ERNIE)系统会对搜索结果进行“去噪”,仅保留权威来源和高点击率内容。
  • 上下文窗口滑动:类似阅读时的“视线焦点移动”,模型仅对当前处理段落保留上下文关联,而非加载全部历史信息。
✔️案例对比
策略传统方法(如TF-IDF)AI搜索引擎(如Claude)
处理10万字文本直接报错分块→摘要→拼接
关键信息保留率30%85%
(数据来源:Anthropic 2024年技术白皮书4)
未来挑战:速度与精度的平衡博弈

尽管技术日臻成熟,AI搜索引擎仍面临两大矛盾:

  • 语义深度VS响应速度:越复杂的语义理解(如反讽、多义词)需要越长的计算时间,而用户期待“秒回”。
  • 数据隐私VS个性化:模型需要更多用户数据以实现精准推荐,但可能触碰隐私红线。
行业解决方案

  • 边缘计算:将部分处理任务转移至用户设备端,如苹果的Core ML框架已支持本地化语义分析。
  • 差分隐私(Differential Privacy):在训练数据中添加噪声,使模型无法反推个体信息。
结语:人与AI的“协作进化”

从“人工筛选”到“智能涌现”,AI搜索引擎的进化史,本质是人类对信息效率的永恒追求。正如凯文·凯利在《失控》中所言:“最智能的系统,往往是分布式与并发的结合体。”未来,或许我们不再需要“搜索”,因为答案会像空气一样自然浮现——但在这之前,每一次秒级响应的背后,都是无数算法的精密共舞。
<hr/>
你在使用AI搜索引擎时,遇到过哪些“惊为天人”或“哭笑不得”的案例?欢迎在评论区分享你的故事!

山东大牛 LV

发表于 2025-4-22 13:05:07

实现原理

本质上还是RAG这一套,但summary的核心是交给大模型驱动的,相当于提前给用户做了一遍过滤和筛选了。具体原理,我相信题主也能搜到很多了,就不赘述了,下面针对性回答你的几个问题。
为什么都是问题拆解-搜索-再总结?

其实问题拆解-搜索这一步,普通搜索引擎也是会做的,但AI的加入(即再总结这一步),能够在用户看到结果之前,做了一遍内容的总结与整理,相当于替用户省下了要点击一个个网页甄别内容的时间。
但目前这个AI搜索的范式,是否是行业最佳?我并不是很认可,只能说是目前这个行业探索出来的一种相对能落地的范式,但我平时用的时候,总感觉AI整理出来的内容,像是会在骗我。
为什么能快速总结?

平时用的谷歌、百度、搜狗等,你输入问题,基本上能够在很短的时间内给你返回网页的排序结果,AI搜索引擎其实也差不多。主要涉及到三个方面的操作:
问题解析与拆解

首先解析用户的问题,理解问题的语法结构和语义内容,从而确定用户的搜索意图。然后会进行问题的扩展与重写,如果对于多层次的复杂问题,还会将其拆解为多个子问题。
高效检索算法的使用

比如倒排索引,BM25相关性评分算法,语义embedding向量检索等,其实就是利用高效的检索技术,搜到目标的网页or片段。
内容排序

检索到了目标网页or片段之后,肯定就需要去根据相关性去排序了,这里除了规则法,还能使用一些专门的文本排序模型。
【另外】工程效率优化

然后除了算法效率层次的改进之外,工程架构的处理也能提升处理速度,比如合理的分布式架构和数据索引机制啊,高频问题/中间结果的缓存机制啊等等。整个过程有很多很多细节,就是有这么多的努力,才让搜索的结果展现得既准又快。
怎么避免token限制?

采用长上下文窗口的模型

首先呢,最暴力的解法肯定是用更大上下文窗口的模型,比如128k、256k这种的,那么产品的发挥余地肯定提升了很多。但要注意,这不是万能的,因为涉及到信噪比的问题,如果内容里面有大量的噪音,一股脑塞进去肯定也不是办法。
搜索内容使用摘要

对于用户的一个问题,可能会搜索出几十个结果出来,所以肯定需要讲这些内容压缩生成摘要,来减少整体内容的大小,拍完序之后然后再取Top-k内容。
历史对话内容压缩

多轮场景在搜索中也是非常常见,这时候就得需要智能地筛选并保留出对理解当前问题最有价值的历史片段了,丢弃一些不相关的历史片段内容。
动态删减策略

送给模型的内容,大概可以分为四大部分:system prompt + history + search context + user input,那么如何根据用户问题(user input)的复杂度与当前tokens的上限,智能调节、删减history以及search context的内容,也是一个非常重要的策略。
AI搜索引擎产品示例

知乎直答


Ai搜索引擎是怎么实现的?为什么速度很快?-1.jpg

秘塔搜索


Ai搜索引擎是怎么实现的?为什么速度很快?-2.jpg

perplexity


Ai搜索引擎是怎么实现的?为什么速度很快?-3.jpg

草鞋林 LV

发表于 2025-4-22 13:15:41

其实各家的AI搜索引擎的主流做法都比较类似,基本都是RAG的这个套路框架,然后加一些细节方面的优化和迭代。整个界面也脱离不开搜索框的形式,还是用户主动输入问题,AI给出回答。

Ai搜索引擎是怎么实现的?为什么速度很快?-1.jpg

我们先介绍下RAG相关的原理,然后再说下搜索引擎的优化策略。
整个RAG的流程用文字表述如下:加载文件 -> 读取文本 ->文本分割-> 文本向量化 -> 问句向量化 -> 在文本向量中匹配出与问句向量最相似的top k个 -> 匹配出的文本作为上下文和问题一起添加到prompt中 -> 提交给LLM生成回答。
在AI搜索引擎里,加载的文本,就换成了调用 web 检索获取的文本。同样的,有很多web的检索API,包括谷歌、bing、duckduckgo等。

Ai搜索引擎是怎么实现的?为什么速度很快?-2.jpg


Ai搜索引擎是怎么实现的?为什么速度很快?-3.jpg

AI在搜索的时候,不是简单的和我们想的一个个去搜索关键词,而是会用到并发搜索的技术,一次性去检索多个关键词,多个网页,这样整体耗时就可以控制在毫秒级别了
检索到相关信息之后,一般有两种方式去处理召回的内容。
1、如果召回的内容,过多,超过了大模型的token上限,或者超过了设定的阈值(假设为80%)。就首先对召回的内容进行简单的总结,这个时候可以并发调用一些小模型去总结。因为文本总结是一个很简单的任务,BERT类的模型都可以做到,所以用小模型完全没问题。
2、如果召回的内容,没有超过大模型的token上限,可以根据一些过滤条件,过滤掉一些相关性差的内容,做一个逻辑判断就可以,速度非常快。
在这之后,就可以保证输入给大模型的内容不会超过token的上限,直接输入给大模型就可以了。整体算下来可能RAG的流程在1-10s之内。
比如,知乎的直答,先检索网页,然后总结输出,就需要至少1s以上的时间,要知道传统的检索基本都是50ms以内的,实际上AI搜索要比传统搜索慢很多。

Ai搜索引擎是怎么实现的?为什么速度很快?-4.jpg

之所以感知不太明显,可能因为现在的AI搜索都是打字机的显示,一点点展示内容,降低了用户对时间的感知。如果是一直等待的话,你会发现耗时还是很长的。
雨飞:基于知识库和 LLM 的问答系统经验分享雨飞:5分钟打造基于 LangChain+Gradio 的个人知识助理雨飞:从零开始学 langchain 之搭建最小的 RAG 系统

您需要登录后才可以回帖 登录 | 立即注册