团队背景
飞算JavaAI产品团队自身也是一个重度AI编程用户。团队日常在Java项目开发中,每天与AI的交互覆盖代码生成、代码补全、单元测试、代码审查、Bug定位、SQL生成与优化、文档生成、简单问答等8类任务。
使用AI编程工具初期,团队和大多数开发者一样,采取的是"哪个模型强就用哪个"的策略。效果确实不错——代码生成速度提升了,重复劳动减少了。但到了月底一算账,问题来了。

引入契机
Token消耗量远超预期。
日均850万token,这个数字对于一个中等规模的Java团队来说意味着什么?意味着每月的AI调用成本已经不容忽视。
更关键的是,团队发现很多任务的输出质量并没有因为用了"最强模型"就变好。一个简单的@Autowired和@Resource的区别问题,用最强模型回答和用轻量模型回答,答案几乎一样——但token消耗差了十几倍。
团队开始问自己一个问题:到底是"模型越强越好",还是"选对模型比选强模型更重要"?

落地过程
飞算JavaAI的智能路由功能上线后,团队开始在实际项目中使用。落地过程分4个维度逐步展开:
维度一:模型能力与任务难度的精确匹配
团队首先梳理了日常的8类AI交互任务,发现一个关键事实:
大部分任务(约70%)不需要最强模型。
代码补全、文档生成、简单问答——这些任务用急速模型完全够用。只有Bug定位、复杂业务逻辑编写、SQL性能调优等少数任务才需要深度或者专家模型。
但之前的问题是:你无法实时、自动地判断每个请求属于哪一类。
智能路由解决了这个问题。你发起请求,路由器分析意图——你在干什么?写代码还是改Bug?生成文档还是写测试?——然后动态分配到最合适的模型。
70%的请求路由到急速或深度模型,成本自然就降了。
维度二:Prompt的精简效应
这一点很多人没注意到,但效果显著。
用通用大模型时,为了让输出质量足够高,你必须把prompt写得非常详细。以生成单元测试为例:
通用模型prompt(约150字):
你是一名资深Java测试工程师,精通JUnit 5和Mockito。
当前项目使用SpringBoot 2.7 + JDK 11。
请为以下Service方法编写单元测试,要求:
1. 使用@ExtendWith(MockitoExtension.class)
2. 覆盖正常流程和异常流程
3. 使用@Mock注解注入依赖
4. 测试方法命名遵循given_when_then规范
飞算JavaAI专用模型prompt(约30字):
为这个方法写单元测试,覆盖正常和异常分支。
prompt本身省了60%的token,输出质量反而更高。因为专用模型在训练阶段就内化了JUnit 5的最佳实践、Mockito的惯用法、SpringBoot Test的上下文约定。你不需要在prompt里再教它一遍。
维度三:输出的一次性命中率
用通用模型写代码,第一版大概率有瑕疵。风格不对、缺少异常处理、没考虑并发安全……一次交互变成三次:生成→审查→修正。三倍以上token消耗。
团队统计了Service层代码的交互次数:
| 指标 | 通用模型 | 专用模型 | 变化 |
|---|---|---|---|
| 平均交互次数 | 2.3次 | 1.1次 | 下降52% |
| 首次输出达标率 | ~43% | ~91% | 提升48个百分点 |
| 重复调用率 | ~57% | ~9% | 下降48个百分点 |
交互次数减半,token消耗减半。这是"输出质量提升"带来的连锁反应。
维度四:上下文窗口的利用效率
用通用模型时,你不敢少带上下文。因为你不确定它"知不知道"Spring Security的配置规范。所以你倾向于把整个相关的代码文件都贴进去——三四个文件,几千行代码,上下文瞬间被塞满。
智能路由改变了这个逻辑。因为路由器知道"当前请求会被分配给哪个专用模型",所以它可以精确控制上下文窗口填充策略:
- SQL优化请求 → 只带相关SQL和表结构
- 代码生成请求 → 只带当前文件和相关接口
- 测试生成请求 → 只带被测类和方法签名
上下文精简了,每次调用的成本自然就降了。
效果数据
开启智能路由两周后,团队的数据变化如下:
| 指标 | 使用前 | 使用两周后 | 变化 |
|---|---|---|---|
| 日均token消耗 | 约850万 | 约260万 | 下降69.4% |
| 日均token节省 | — | 约590万 | — |
| 单元测试覆盖率 | — | 92%+ | 保持稳定 |
| 代码审查缺陷检出率 | — | 无变化 | 质量未降 |
| Service层代码平均交互次数 | 2.3次 | 1.1次 | 下降52% |
数据来源:为飞算JavaAI团队内部使用数据,非第三方评测。实际效果可能因项目规模、任务类型、使用频率不同而异。
4个维度的叠加公式:
模型单价 × Prompt长度 × 交互次数 × 上下文体积
每个维度省一点,四个维度叠加,69.4%的下降不是魔法,是数学。
经验总结
回顾整个落地过程,团队总结了3条关键经验:
第一,不要全用一个模型。 Java开发中的8类任务难度曲线完全不同。代码补全和Bug定位的能力要求差距巨大,全用同一模型不是省心,是浪费。
第二,不要手动切模型。 一天发几十条prompt,你做不到每次都停下来评估任务难度。智能路由的价值在于:判断是实时的、自动的、无感的。你只需要关注任务解决,而不是用哪种模型解决。
第三,token成本是可以优化的。 如果你每天消耗100万token,其中70万花在"不需要最强模型"的任务上——那这70万就是可优化的。优化不是"不用AI",是"把AI用得聪明一点"。
126

被折叠的 条评论
为什么被折叠?



