3 秒是什么概念?从"等它回复"变成"刚说完就有反馈"。这就是最近上线的 Qoder Fast 模式交出的答卷。在《Qoder Fast 上线:3 秒响应,还更省 Credits》中,我们分享了升级后的变化:首次响应从 8 秒缩短到 3 秒,Credits 消耗从 1.1x 降到 0.8x。很多用户好奇,我们是怎么做到的?今天这篇文章详细解读Fast 模式背后的速度优化技术。
Fast 模式上线范围:Fast 模式已在Qoder 桌面端(需0.4.4及以上版本)、Qoder IDE、JetBrains 插件、CLI同步上线,个人版和企业版用户都可以使用,CN 版和国际版同步支持。Qoder 产品家族的其他产品也会在近期陆续上线,敬请期待。
为什么需要 Fast
我们详细分析了目前的Qoder的用户场景画像,在海量的消息中,命令执行占很大一部分,显式催促占约 26.9%,快速修改占约 9.6%。我们举几类例子:
第一类是指令执行类任务。 用户只需要简单的执行命令,对模型thinking的要求并不高。
第二类是依赖连续反馈的交互任务。 用户看一眼结果,再补充一句要求。每轮等待都会延长整个协作过程,也让用户更难保持对当前问题的注意力。这里既需要更快的首个有效反馈,也需要更快地交付可检查的结果。
第三类是目标明确的任务。 转换格式、翻译或做局部修改。这类任务需要规划和思考,但额外规划、重复确认和过度探索,很容易超过实际操作本身的成本。
因此,Fast有着非常明确的需求与目标场景。同时,最近各大模型厂商都在推出各自的flash版本的模型,来满足用户的模型需求,Deepseek v4 Flash,Qwen 3.8 Flash等等,包括最近非常火的Jev,都因为模型的速度非常快,而受到了大家的追捧,关注速度已经是一个行业整体趋势。
墙钟分析
图1. 各类模型执行任务墙钟分析
对于Fast而言,最重要的就是消息发出后用户第一次看到响应的时间(TTFT)优化以及每一轮会话的整体耗时的优化。要优化耗时,我们首先要拆解整个耗时的构成,在不断服务客户的过程中,Qoder积累了海量的用户任务的耗时数据,根据任务执行过程的阶段划分,我们就可以一目了然地明确我们的优化目标。
墙钟把执行过程展开成了一张有依赖关系的图:模型先决定需要什么信息,工具获取信息,模型继续决策,最后完成操作与验证。决定总耗时的是这张图上的关键路径。优化要么缩短路径上的某一段,要么减少不必要的步骤,要么让没有依赖的步骤同时进行。那么,接下来我将拆分4个阶段讲解我们的优化:
客户端优化
一次请求前,可能需要准备会话、加载配置、发现工具、恢复上下文或建立连接。冷启动优化首先要区分:哪些条件对第一步执行必不可少,哪些能力可以等真正用到时再准备。
工程上有两个直接抓手。一是复用已经准备好的资源,减少每轮重复初始化。二是延迟加载当前任务不需要的能力,让用户的第一步操作不必等待整个系统完全就绪。预热也要受用户行为和资源预算约束,避免为了加快一个入口,占满其他任务需要的 CPU、内存或连接。
把非必要工作移出同步链路
异步化的判断标准是依赖关系。例如,独立的状态同步和统计上报可以与任务执行分开,界面更新也不应等待后台整理工作全部结束。反过来,影响操作正确性的权限判断、必要输入和结果验证,仍然要在相应动作之前完成。
一个简化的例子是:执行器完成操作后,先交付已经确认的结果,再处理不影响结果有效性的后台工作。这样优化的是结果到达用户的路径,同时保持“已完成”的语义真实。
将界面响应与 Agent 执行解耦
架构优化的目标,是减少界面、编排和后台任务之间不必要的同步等待。界面持续接收状态与增量结果,执行器按依赖推进任务,后台工作在自己的生命周期内运行。
解耦还需要处理取消、超时和资源回收。用户已经取消的任务如果继续占用连接或工具执行槽,会拖慢下一次请求。异步任务因此需要明确的归属、取消传播和并发上限。在Qoder App的优化中,我们通过解耦将整个冷启动耗时优化了60%以上。
Harness工程优化
Harness 是围绕模型建立的执行系统,负责提供上下文、定义工具、调度操作、处理权限、管理状态,并验证任务是否真正完成。
它对速度的影响有两个层次:一是每次行动要花多长时间,二是完成任务需要多少次行动。后者往往容易被忽略。一次低效的工具调用/MCP调用/Skill初始化,可能导致模型重新解释结果、再次检索、再次等待,从而把局部问题放大成整轮延迟。这里我们以工具调用为例,可以从单工具的执行与多工具并行来分别讲解。也就对应了前面,我们既要压缩路径耗时,又要单一路径演化为多路径的并行。
工具优化 同时减少执行成本与后续往返
工具本身的执行耗时,需要拆成启动、排队、实际执行和结果处理。高频读取和检索类操作,适合从复用执行环境、减少重复扫描、合并已知请求等方向优化;依赖外部服务的操作,则需要关注连接复用、超时边界和失败恢复。
工具接口同样影响耗时。假设 Agent 只需要定位一个符号的定义,返回整个目录的原始内容,会让下一轮模型承担额外的筛选工作。更合适的结果应包含足以继续行动的内容,例如定位信息、相关片段和是否还有遗漏,而不是把所有可取得的数据都塞回上下文。
错误信息也应帮助 Agent 选择下一步。明确区分参数错误、权限不足、临时失败和数据不存在,可以减少盲目重试。面向 Agent 的工具设计,需要同时观察完成质量、工具次数、总运行时间和错误情况;这也是公开工具工程实践强调的评估方式。
通过优化工具加载等,整体工具加载时延优化200ms以上;对于部分需要网络搜索等等的工具,工具时长优化50%以上!
并行优化 让独立操作同时完成
并行有两个前提:模型识别出操作之间没有依赖,运行时能够将它们真正并发执行。缺少任何一项,执行链路都会退回串行。
例如,一次修改前需要读取三个已经确定且相互独立的文件。如果三次读取分别需要 2、3、4 秒,串行需要约 9 秒;资源充足、没有额外调度开销时,并行的执行部分约为 4 秒。这举个例子,我们在部分工具的并行优化上取得了数秒级的优化效果,优化非常显著。更进一步,一次提交完整的读取批次,还可能减少读取之间的模型往返。
通过并行工具优化,Fast下的模型工具并行率提升了50%以上,观测的最大并行数达到50个以上,大大提升了性能。
图2. 工具耗时优化示意图
模型优化
模型优化需要同时考虑两件事:让合适的模型处理合适的任务,以及为任务分配合适的思考投入。 前面的耗时分析表明,不同模型的速度优势会随任务类型变化。单次调用更快,也未必意味着整轮 Agent 更快;如果模型需要更多次检索、修正和重试,前面节省的时间就可能被后续行动消耗。
“解释这段函数为什么报错”和“梳理模块依赖、完成重构并验证”都属于开发工作,但需要的能力不同。前者更看重快速定位关键逻辑、清楚解释原因;后者需要理解更大的上下文,处理跨文件影响,并持续执行到验证完成。即使同样是代码修改,补一个空输入判断,与调整多处调用并保持接口行为,也需要不同程度的分析。因此,模型选择需要结合任务目标、工作范围和交付约束。
Fast 在档位内完成这些匹配。开发者选择 Fast 后,Qoder 根据任务类型调整候选模型的优先级,再结合当前请求的能力要求与模型可用情况,选择后续执行的模型。路由关注的是模型完成这类任务的整体表现,包括理解、生成、工具调用和持续执行能力,以及由此产生的整轮耗时。
这套流程中的任务识别由 System One 完成。应用预先定义任务类别和输出范围,System One 根据输入返回一个明确的分类结果,供路由使用。判断的重点是用户当前想完成什么动作:面对同一段代码,“解释它为什么保留原有顺序”对应代码解释,“修改它,让空输入也能正常运行”则对应代码修改。代码内容和历史讨论为这次判断提供背景。
为了控制分类本身的开销,Qoder 将当前请求与近期对话分别组织,只向分类阶段提供判断所需的信息。System One 完成分类后,执行模型仍然接收完成任务所需的完整上下文,负责生成代码、调用工具和验证结果。分类结果直接参与候选模型排序,并与能力要求、可用情况共同决定后续执行。
选定模型后,还需要控制思考投入。对于支持 effort 调节的模型,局部、明确、容易验证的任务,可以使用较低的思考档位,减少开始行动前的等待;涉及复杂依赖、多项约束或跨文件修改的任务,则需要更充分的分析。任务分类为这一判断提供线索,实际档位还要结合请求的复杂度和验证要求确定。
这里衡量的仍然是完成任务的总耗时。较低的 effort 能减少一次调用的思考时间,但如果因此增加遗漏、返工和工具轮次,整体收益就可能消失。模型路由与 effort 策略都需要在质量约束下,通过同类任务的对照评测,观察完成率、整轮耗时、工具轮次和返工情况,再确定适合 Fast 的配置。
经过优化,在整个模型部分,尽管我们引入了新的system one,但是判断调用的本身耗时仅在几百毫秒内,模型耗时每轮优化200ms+。在多次的模型调用后,这样的耗时优化得以倍数增加,最终达到完整的优化效果。
图3. Fast 模式基于意图的模型选择架构
网络优化
端侧的网络环境始终是不稳定的,尤其是客户端存在大量的弱网环境,那么,如何在各种网络环境下都可以保障用户的使用体验,是Fast必须解决的问题,同时这也是在给Qoder不断的提供更加稳定的网络链接作为基础。在Fast上,首次使用了专门的Fast的网络链路,我们在CLI等不同的端包括服务端都做了相当大的优化,在均值/p50/p95 百分位上都得到了显著优化,尤其是大包传输中,我们的p95消耗降低了50%以上。
Qoder在Fast上尝试了大量的技术路径来不断的优化我们的耗时,后续还会持续优化,给用户更好的使用体验!