公司动态

搜索问答系统拆解:算力之外,流程决定体验

📅 2026/8/31 5:36:46
搜索问答系统拆解:算力之外,流程决定体验
打开 Perplexity 的搜索框输入一个问题几秒钟后页面上滚动出一段结构化的答案右边或下方附着一排引用来源。这个交互很轻但背后藏着一整套完整链路。最近看到一句传播很广的说法“Perplexity CEOPerplexity 搜索在任意算力水平下均为最佳”。我第一反应不是去较真“最佳”这个词而是想把它拆开来看凭什么一个搜索产品敢讲这样的话中文互联网里提到“搜索”不同人群的指向完全不同。有人说的是百度网页搜索有人想到的是网盘资源搜索有人脑子里是文件搜索工具还有人会直接搜“搜索算法”。但 Perplexity 这类产品做的是另一件事把你输入的问题变成一个经过检索、推理、组织后的答案而不是一屏链接。这背后真正的变化不是简单地“把大模型套在搜索前面”而是一套从检索到生成的产品流程被重新设计了。我更愿意把这句话理解成一个工程判断搜索体验的胜负不在于单一算力拼刺刀而在于系统设计者如何把检索、排序、上下文组装、生成和展示这几个环节组织起来。这篇文章不像发布会通稿更像一场工程拆解。我会从算力的真实角色、搜索问答产品的核心链路、落地路径、排查顺序和长期维护几个维度展开。1. 为什么“搜索最佳”不完全等于“算力最强”1.1 用户真正感知到的不是算力而是答案质量先做个最简单的实验。你在搜索框里输入一个问题比如“AIGC 和 LLM 有什么区别”几秒钟后得到一段分点答案带引用。你关心的是什么呢答案是否准确、是否完整、有没有来源、速度快不快。你根本不关心背后是 7B 模型还是 70B 模型。算力在这里是一个支撑条件但不是产品价值本身。算力决定了推理能不能跑、跑多快、能容纳多长上下文。但用户感知到的搜索结果是检索、排序、拼接、生成多层叠加之后的结果。一个算力很强的系统如果检索到的都是低质量页面重排没把有效内容顶上去生成阶段又混杂了模型自己脑补的信息最终体验依然会很差。反过来算力稍弱但流程设计得当答案可能更准。我遇到不少做 RAG 项目的团队一上来就追求“要把模型换大”结果发现瓶颈根本不在推理而在召回。检索阶段没找到关键段落模型再大也没有足够依据生成正确答案。所以单纯把“搜索最佳”归因于算力强是误解。1.2 搜索问答不是“搜索引擎 大模型”的拼装要理解 Perplexity 这类产品可以先看它和两类传统方案的区别。传统搜索引擎的痛点是给出大量链接和摘要用户要自己点开、阅读、比对、总结。信息获取没有错但提炼成本很高。纯 LLM 对话产品的问题则是模型可以生成非常流畅的文本但有时候会一本正经地编造内容因为它没有在回答前强制检索资料。Perplexity 式搜索问答走的是“先检索再生成”的中间路线。这个设计的关键变化在于它给模型设定了一个输入边界。模型不是凭记忆回答而是基于检索到的文档片段、页面内容、结构化数据来组织答案。这样做有两个直接好处答案有依据可以减少无中生有。引用可溯源用户能自己回看原始来源。所以搜索问答产品真正聪明的地方不是“搜索之后让大模型总结一下”而是把“检索证据”变成了“生成答案”的前置硬约束。算力负责让这个约束在有限时间内完成但约束本身的建立靠的是产品流程、检索系统、上下文组织和提示词设计。1.3 中文语境里的“搜索”被窄化了这也是为什么很多中文用户第一次接触 Perplexity 式产品时会有认知跳跃。国内语境里“搜索”经常被理解为关键词匹配、文件定位、资源查找比如在百度搜索资料在网盘里找文件在系统里搜文档。当你把“搜索”当成一个“找东西”的动作时搜索问答产品就不太好理解。但新一代搜索问答本质上是“信息合成”把多个网页、文档、知识库里的内容拆开、筛选、拼接成一段答案。它和传统搜索解决的是不同层级的任务。传统搜索解决“去哪看”生成式搜索解决“看完后怎么理解”。这两者不是替代而是不同阶段的产物。理解这一点就不会拿旧地图去看新大陆。2. 算力在搜索问答中的真实角色2.1 算力决定上限流程决定下限在搜索问答系统里算力至少承担三个角色支撑模型推理。决定可以容纳的上下文长度。影响检索和重排阶段的计算能力。算力越强可以用更大的模型可以塞下更多检索片段可以做更复杂的重排。但有一个很容易被忽略的事实搜索问答的下限往往不由算力决定而由流程决定。用低算力跑一个 7B 或 13B 模型配合一个像样的检索和重排流程在面对事实型问题时通常也能给出合格答案。因为答案的骨架来自检索到的文本模型主要负责归纳、转换和组织。反过来如果检索很差即使换成 70B 级别的模型它也只能在错误的地基上流畅地“发挥”。算力是放大器不是定海神针。流程是地基决定系统能不能稳定输出。2.2 “任意算力水平下均为最佳”的适用边界如果我们把这句话当成一个精确的技术判断它会有明显边界。从工程经验看这句话成立的前提包括系统已经具备基本的检索、重排、上下文组装能力。算力虽然低但能支撑模型完成一次请求的推理不会超时。任务场景以事实型问答为主模型不需要做复杂的多步推理。检索到的内容质量可以部分弥补模型容量不足的问题。在这些条件下一个流程优化到位的系统确实有可能在同算力、同模型规模下比只堆参数不优化流程的系统表现更好。这也是“最优”最朴素的含义。但边界也很清楚。如果算力低到模型无法运行或检索组件本身资源不足那流程再精妙也没有用。比如在纯 CPU 环境跑百亿参数模型等不到答案用户早就离开了。比如说多轮复杂推理问题小模型即使有检索内容也可能无法完成归纳和推理。再比如说低算力下做长文档问答上下文一旦被截断信息缺口会导致答案不完整。所以“任意算力下均为最佳”这句话更准确的表达是在满足基本算力门槛的前提下通过系统化设计让不同算力档位都能发挥出较好的搜索体验。它不是万能公式而是一种产品设计取向。2.3 不同算力档位下的适配策略实际落地时不同算力档位会有完全不同的调优重点。本地轻量档比如单卡 24GB 显存以内优先选 7B 到 13B 的量化模型控制检索片段数量比如只取 3 到 5 个片段每个片段控制在 400 到 800 字避免上下文超长。云端 API 档比如调用中等规模模型服务可以放宽检索数量利用服务端高吞吐但要注意 token 消耗和响应延迟。高端算力档比如多卡部署 70B 甚至更大模型可以把重排模型也纳入计算增加候选召回数做更精细的答案生成。关键不是“我算力高所以能做得更好”而是“我算力是什么水平就用对应的流程参数把它用好”。这里的参数包括候选召回数量、上下文裁剪长度、并发数、缓存策略。3. 真正决定搜索问答体验的五个变量3.1 检索质量召回决定了答案的天花板搜索问答系统的第一道关卡是检索。题目是“能不能从数据库或互联网上把最相关的内容找到并递送给生成模型。”如果检索阶段没有召回到关键文档后续所有环节都无法补救。很多 RAG 项目效果差不是模型不行而是检索出来的一堆材料里没有正确答案。因此检索质量可以被称为答案的天花板。判断检索质量通常看两个维度召回率相关文档有没有被找到。精度找到的结果里相关文档占多少。实际项目中按关键词检索简单但精度不稳向量检索对语义理解更好但偶尔会漏掉精确术语混合检索通常是更稳的选择。先做关键词召回再做向量召回合并后用重排模型统一打分是常见用法。3.2 重排策略从粗排到精排召回阶段追求“宁可多召不能漏”。所以候选集往往很大但质量参差不齐。重排阶段的任务就是细筛把最靠前的几个片段挑出来作为生成答案的直接依据。重排不是简单按向量相似度排序。向量相似度衡量的粒度可能和“答案相关性”不一致比如一个片段里的措辞相似但不是在回答问题。所以很多系统会用交叉编码器或更大模型做重排把“用户问题 候选片段”一起输入模型让它判断这个片段能不能回答问题。对轻量系统来说可以先从简化版开始召回 10 到 20 个候选用规则结合向量分数做一次粗重排取前 5 个左右给生成模型。等效果不够好时再引入专门的重排模型。不要一上来就把链路搞复杂。3.3 上下文管理长上下文是双刃剑大模型支持长上下文后很多人下意识想把所有检索结果都塞进 Prompt。这么做有两个问题成本上升和注意力稀释。模型处理超长文本时消耗的 token 和计算量都会增加。如果材料中大部分内容与问题无关还可能干扰模型对关键信息的提取。更合适的做法是给模型设定上下文预算比如 4000 到 6000 token。按相关性排序优先放入高相关的片段。对重复或高度相似的内容做去重。明确告诉模型“请优先使用下面提供的事实片段不要自行补充未见过的细节。”上下文不是越长越好而是越准越好。3.4 流式生成给用户一个“正在思考”的反馈搜索问答产品很难在不到一秒内返回完整答案。如果用户提交问题后只能干等几秒体验会很差。流式输出是缓解等待焦虑的常见方案。模型生成答案时按 token 逐个或分批返回让用户看到内容逐渐出现。用户会觉得系统“已经开工了”而不是卡住了。Perplexity 式的搜索问答界面里还会在答案之后列出引用链接用户可以看到答案背后有哪些来源。从技术实现看流式输出并不复杂但它对产品体感影响很大。如果你在自建类似系统建议从一开始就把流式接口纳入设计而不是等完成后一次性返回。3.5 可验证性引用和溯源决定信任度生成式搜索最大的信任问题是我怎么知道你没在乱编。解决方式就是引用。让模型在生成答案时尽量引用检索片段中的来源编号并在答案下方展示对应的网页标题、链接或知识库文档信息。这个设计同时倒逼了检索质量检索到的材料越相关生成时能引用的依据就越多。实际落地时可以让提示词要求模型“在回答中标注来源编号”然后前端根据编号渲染引用列表。如果模型素材不足要会说“基于提供资料暂时无法确认”不强行编造。4. 落地一套 Perplexity 式搜索问答系统的最小路径4.1 先搭最小闭环检索 → 重排 → 组装 → 生成如果想自己搭一套搜索问答系统不用一步到位。最小闭环可以这样走准备一个文档库或知识库索引把数据切成片段并建立向量索引。收到用户问题后先做混合检索拿到候选片段。用简单规则或重排模型挑选最相关的前几个片段。把问题和片段拼成一段固定格式的 Prompt。调用模型生成答案并要求模型基于片段回答。在答案中标注引用编号用前端渲染出来。query - 混合检索 - 候选集 - 重排 - 上下文组装 - LLM生成 - 答案 引用这个流程能跑通就已经具备搜索问答的基础形态。不要在一开始就纠结“为什么没有人家效果好”。先看链路通不通再逐步优化每个环节。提醒先把单条问题跑通再考虑批量。链路里每一步都可能出问题单条验证能更快地暴露短板。4.2 模型选型不要只看跑分要看延迟和成本模型选型一方面看能力另一方面看部署条件和成本。这里给一个常见参考框架场景模型档位参考检索组件预期侧重点本地学习、原型验证7B 到 13B 量化模型向量库 关键词检索先跑通流程控制显存占用中小团队内部工具中等规模 API 模型混合检索 简单重排效果与成本平衡面向用户的生产系统大模型 API 或自部署大模型多路召回 独立重排模型稳定性、可观测性、引用质量选择模型时要同时考虑生成延迟和 token 成本。一个 70B 模型即使效果更好如果每次请求要花 5 秒用户也不会买账如果 token 消耗太高批量调用时成本会很快失控。实际项目里常见做法是让强模型负责复杂问题简单问题走轻量模型。先确认模型服务商或开源模型的版本和上下文窗口再按窗口大小规划检索片段数量和长度因为不同模型对超长上下文的敏感度差异很大。4.3 从单条查询到批量任务并发、缓存、重试单条跑通后就要考虑批量使用。这个阶段最容易出问题的是资源抖动。建议按三步走设置并发上限不要一次性把任务全打上去用队列控制请求速率。做结果缓存对相同或相似问题直接返回缓存结果减少重复推理。加失败重试当模型服务或检索服务返回超时、限流、网络错误时用指数退避重试。批量场景里缓存往往能省下大量时间和成本。很多搜索问答系统的用户问题重复率不低一个像样的缓存层能把成本降下一个量级。4.4 评估方式不能只靠“感觉”搜索问答系统的效果评估必须有量化指标。可以看四个方向答案准确度人工标注或回答对比看答案是否正确。检索召回相关文档有没有被检索出来。引用命中率答案里引用的来源是否真的支撑了关键结论。响应时间从提交到返回完整答案的时间以及首 token 延迟。最实用的做法是准备一个 20 到 50 条的测试集覆盖常见问题、模糊问题、无答案问题每次调整系统后都跑一遍记录前后效果变化。先有测试集再谈优化。5. 搜索问答“变慢”“变差”后排查顺序别搞反5.1 先从检索层查起如果用户反馈搜索结果质量差我的第一个排查对象永远是检索层而不是生成模型。可能的问题有索引更新不及时新内容没有进入候选集。查询改写不好向量检索没找到语义相近的文档。关键词检索只匹配字面没匹配同义词和缩写。候选集数量太少导致重排阶段没有好内容可选。先检查召回结果里是否包含正确文档。如果不包含问题在检索不在生成。把一条问题直接查向量库和关键词结果看有没有预期内容出现。5.2 再看上下文组装和截断策略检索结果正常但答案仍然不对那就要看上下文组装。常见问题多个检索片段按时间排序没有按相关性排序。截断策略太粗暴把关键信息切掉了。Prompt 里没有说明“只基于提供资料回答”模型开始自由发挥。上下文太长模型把关键片段淹没在噪声里。排查方法也很直接把最终送给模型的 Prompt 打印出来人工读一遍看关键答案素材是否完整、顺序是否正确、是否被截断。5.3 最后检查模型推理与算力分配如果检索和上下文都没问题但系统整体变慢才需要考虑算力层。排查顺序是看模型推理延迟是不是响应时间从 1 秒涨到了 5 秒。看并发占用是不是同时请求太多导致排队。看显存或 CPU 资源是不是模型推理和检索组件争抢资源。看模型服务限流是不是触发了供应商的 rate limit。不要一慢就换大模型。先把慢的原因定位到具体环节再决定要不要升级算力或改并发策略。5.4 一个可复用的排查链路表遇到搜索问答系统表现异常时可以按下面的表格逐层检查现象优先排查层可能原因处理方式答案与问题无关检索层召回失败、索引缺失、查询改写不当检查召回结果增加关键词与向量混合检索答案没引用关键内容上下文组装片段不完整、排序错误、截断打印最终 Prompt检查材料完整性模型开始编造提示词与模型缺少约束、上下文不足强化“只依据片段”提示控制上下文质量响应特别慢算力与并发排队、限流、超长上下文限制并发简化候选集使用缓存成本突然飙升成本与缓存重复计算、无缓存、上下文过长加缓存控制上下文长度统计 token 用量排查的核心原则是先判断是哪一层坏了再决定修哪里。如果链路本身不通换更大的模型只会让错误更流畅。6. 算力之外真正稀缺的是“可用性工程”6.1 Token 不是单纯的资源是成本和延迟搜索问答系统的每个请求都会在检索阶段消耗资源在生成阶段消耗 token。生成阶段的 token 消耗又分为两块输入 token 和输出 token。输入 token 会随着上下文长度增长输出 token 会被答案长度直接影响。实际项目里token 成本很容易被低估。一次搜索问答如果塞进 3000 token 上下文每天一千次请求一个月下来是一笔不小的开销。很多团队在原型阶段不在意等上线后才发现成本失控。一个更务实的方式是为每次请求设置上下文预算比如最多 5000 token设置答案最大长度对高重复问题启用缓存。把 token 当成可量化成本而不是抽象资源。6.2 缓存、按需检索和混合分级能省大量算力搜索问答系统大多数时候并不需要“全火力输出”。可以按难度分级简单事实问题走轻量模型 少量片段。复杂综合分析问题走强模型 更多候选片段。重复问题直接返回缓存结果。做内容更新时也不需要每次都全量重刷索引。可以按增量更新只处理新增和变动的文档。索引更新策略往往比单纯增加算力更能改善系统的时效性。6.3 从单次任务到长期产品日志、监控和反馈这里有一个很多开发者会忽略的短板没有把“用户评价”接回系统。搜索问答系统上线之后至少要做三件事记录每次查询的关键信息问题、检索结果、答案、引用、耗时、模型名称。设置简单监控失败率、平均延迟、token 用量、缓存命中率。让用户可以对答案点赞或点踩点踩数据进入人工复检队列。有了反馈数据后续优化才有方向。否则只能凭感觉改版本改完也不知道有没有变好。算力只是系统的一个变量真正拉开产品差距的是这套从数据到反馈的持续优化机制。回到开头那句话Perplexity CEO 说“任意算力水平下均为最佳”我更愿意把它理解成一种工程信条把复杂留给检索和流程把简单留给用户。搜索问答产品表面上拼的是模型有多聪明实际上拼的是数据管道、上下文组织、引用设计、缓存策略和反馈机制这些看起来不性感的环节。算力很重要但它只是整个系统里的一块拼图。想搭好一个搜索问答系统先别急着追更大的模型先把最小闭环跑通再把每一层的误差和延迟压到最低这比“堆算力”带来更多真实增量。