2小时完成大模型推理网关:一次AI Coding实战记录

2小时完成大模型推理网关:一次AI Coding实战记录

2小时完成大模型推理网关:一次AI Coding实战记录

在蚂蚁集团2026春季校园招聘的AI Coding笔试中,我用2小时完成了一个面向大模型推理场景的HTTP网关。这篇文章记录了我的设计思路、技术实现和AI协作体会。

一、写在前面

这次笔试的题目很有意思:实现一个面向大模型推理场景的HTTP网关,核心挑战是在提升KV Cache命中率防止单机过载之间做动态平衡。

简单说就是:

  • 相同前缀的请求路由到同一后端 → 可以复用KV Cache,延迟更低
  • 但如果所有相同前缀请求都堆到同一台机器 → 热点形成,排队加剧

如何在两者之间权衡?这就是这次项目的核心命题。

时间限制:2小时
工具:网页内置IDE + AI辅助编程
技术栈:Java 17 + Spring Boot 3.2 + Maven


二、核心设计

整体架构

客户端请求 → 网关入口 → 路由决策层 → 负载均衡层 → 后端实例池 ↓ 指标采集层(命中率、延迟、负载分布) 

模块拆解

模块实现方案设计考量
路由策略前缀匹配 + 降级分流优先让相同前缀请求打到同一实例;过载时自动降级
负载均衡动态权重算法综合命中率、当前负载、健康状态计算权重
健康检查主动探测 + 熔断降权后端不可用时自动摘除,恢复后重新加入
指标统计滑动窗口 + P95计算实时统计成功率、延迟分布、命中率

三、核心亮点

1. 动态权重算法

如果只追求命中率,会把相同前缀请求都打到同一实例,导致过载。我的方案是设计了一个联合打分函数

实例权重 = (命中率权重 × 历史命中率) + (负载权重 × (1 - 当前负载率)) 
  • 命中率权重和负载权重可配置,支持不同场景调优
  • 实例过载时(并发数 > 阈值),命中率权重动态降低
  • 支持策略切换,可与纯轮询策略对比

阈值设定:默认并发阈值100,压测发现超过后延迟明显上升,以此作为过载信号。

2. 工程化实践

虽然是2小时的限时开发,但我特别注意了工程化要求:

  • 配置与代码分离:后端列表、阈值、策略参数全部放在application.yml,支持热加载
  • 异常处理与降级:后端超时(3秒)自动降级到其他实例,全部失败时返回503
  • 可观测性:实时输出请求总数、成功率、P95延迟、命中率、负载分布
  • 代码可读性:核心类有职责注释,关键算法有设计说明,使用依赖注入便于测试

3. 压测验证

设计了4类测试场景,验证系统鲁棒性:

场景测试方法验证结果
正常流量随机前缀并发请求命中率约40%,负载相对均衡
热点前缀80%请求使用同一前缀动态权重将热点分散到2-3个实例,避免单机过载
过载场景单实例并发数超阈值自动降级分流,该实例权重降至最低
故障注入手动停掉一个后端自动摘除,流量平滑切换;恢复后重新加入

四、技术栈

组件版本说明
Java17稳定版本
Spring Boot3.2.0框架
Maven3.8+构建工具
HTTP客户端RestClient (Spring 6.1+)内置,无额外依赖

五、AI协作体会

这是我在时间压力下第一次用AI完成完整项目,有几点真实体会:

成功做法

  1. 任务拆解先行:我先写出模块列表(路由、负载均衡、健康检查…),再让AI逐个生成,避免一次性让AI生成全部导致失控。
  2. 版本管理意识:第一版完成后,我让AI调整项目目录结构,结果引发了连锁错误。因为没有保存中间版本,只能让AI重新生成。这让我意识到:AI协作也需要版本管理,每完成一个模块就本地备份一次,增量修改优于全量重构。
  3. 上下文管理:当对话达到100K tokens时,我开始注意精简提示词。当AI开始“忘记”早期约定时,我会重新锚定:“还记得我们的项目结构吗?”

踩过的坑

  • 全量重构风险大:让AI一次性大改代码很容易出问题,最好用git或手动备份checkpoint
  • 依赖版本冲突:我先让AI生成pom.xml确认无误,再生成代码
  • AI会过度设计:有时会给简单功能添加复杂配置,需要及时纠正

核心感悟

AI确实极大提升了开发效率,2小时内就能从零搭建一个完整系统。但真正决定代码质量的,仍然是人的工程化判断——什么时候该解耦、边界条件如何处理、异常怎么兜底,这些AI不会主动帮你做,需要人来把关和调控。AI是高效的执行者,而人是负责决策和兜底的那个。

六、可优化方向

如果时间更充裕,我会考虑:

  1. 流式响应转发:目前是同步转发,可以用WebClient的Flux实现真正的流式转发
  2. 更精细的KV Cache感知:目前用字符串前缀近似,可以引入Trie树做更精确的匹配
  3. 分布式扩展:当前指标统计是内存的,可以用Redis做分布式聚合,支持多网关实例

七、总结

这次AI Coding笔试让我收获颇丰:

  • 技术上:实现了一个有挑战的系统,加深了对网关设计、负载均衡、可观测性的理解
  • 协作上:建立了“人机协作”的方法论——清晰拆解、增量迭代、版本管理、及时复盘
  • 认知上:AI是强大的执行工具,但工程化思维(解耦、边界处理、可维护性)仍然是人的核心竞争力

最后想说的是:AI不会取代工程师,但会用AI的工程师一定会取代不会用的。关键是找到人和AI的最佳协作模式——各司其职,效率最高。


附录:项目结构

inference-gateway/ ├── pom.xml ├── src/main/java/com/ant/gateway/ │ ├── InferenceGatewayApplication.java │ ├── config/ # 配置类 │ ├── controller/ # HTTP入口 │ ├── model/ # 数据模型 │ ├── router/ # 路由策略(前缀匹配、降级) │ ├── loadbalancer/ # 负载均衡(动态权重、轮询) │ ├── health/ # 健康检查 │ ├── metrics/ # 指标统计 │ └── client/ # HTTP客户端 └── src/main/resources/ ├── application.yml # 配置文件 └── logback-spring.xml 

Read more

前端防范 XSS(跨站脚本攻击)

目录 一、防范措施 1.layui util  核心转义的特殊字符 示例 2.js-xss.js库 安装 1. Node.js 环境(npm/yarn) 2. 浏览器环境 核心 API 基础使用 1. 基础过滤(默认规则) 2. 自定义过滤规则 (1)允许特定标签 (2)允许特定属性 (3)自定义标签处理 (4)自定义属性处理 (5)转义特定字符 常见场景示例 1. 过滤用户输入的评论内容 2. 允许特定富文本标签(如富文本编辑器内容) 注意事项 更多配置 XSS(跨站脚本攻击)是一种常见的网络攻击手段,它允许攻击者将恶意脚本注入到其他用户的浏览器中。

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

详细教程:如何从前端查看调用接口、传参及返回结果(附带图片案例)

目录 1. 打开浏览器开发者工具 2. 使用 Network 面板 3. 查看具体的API请求 a. Headers b. Payload c. Response d. Preview e. Timing 4. 实际操作步骤 5. 常见问题及解决方法 a. 无法看到API请求 b. 请求失败 c. 跨域问题(CORS) 作为一名后端工程师,理解前端如何调用接口、传递参数以及接收返回值是非常重要的。下面将详细介绍如何通过浏览器开发者工具(F12)查看和分析这些信息,并附带图片案例帮助你更好地理解。 1. 打开浏览器开发者工具 按下 F12 或右键点击页面选择“检查”可以打开浏览器的开发者工具。常用的浏览器如Chrome、Firefox等都内置了开发者工具。下面是我选择我的一篇文章,打开开发者工具进行演示。 2. 使用

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例)

Cursor+Codex隐藏技巧:用截图秒修前端Bug的保姆级教程(React/Chakra UI案例) 前端开发中最令人头疼的莫过于那些难以定位的UI问题——元素错位、样式冲突、响应式失效...传统调试方式往往需要反复修改代码、刷新页面、检查元素。现在,通过Cursor编辑器集成的Codex功能,你可以直接用截图交互快速定位和修复这些问题。本文将带你从零开始,掌握这套革命性的调试工作流。 1. 环境准备与基础配置 在开始之前,确保你已经具备以下环境: * Cursor编辑器最新版(v2.5+) * Node.js 18.x及以上版本 * React 18项目(本文以Chakra UI 2.x为例) 首先在Cursor中安装Codex插件: 1. 点击左侧扩展图标 2. 搜索"Codex"并安装 3. 登录你的OpenAI账户(需要ChatGPT Plus订阅) 关键配置项: // 在项目根目录创建.