[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"$f14btd21ynjjic":3},{"_id":4,"slug":5,"title":6,"subtitle":7,"kind":8,"cards":9,"tags":48,"categories":49,"source":50,"lang":53,"author":54,"audioState":57,"stats":58,"publishedAt":61,"renderer":62},"6ab9e0e8ca21c797c7e97292","aiqeconppt-f1d07e92","思考|谈谈AI时代的后端开发+QECon演讲PPT","一年已经过去一大半，半年总结一直没做，刚好趁着前段时候参加QECon演讲的一些思考，总结这篇文章，主要分为两个部分: 谈谈AI时代的后端开发：曾经被“忽略”或“轻视”的问题 做了多年的后端开发和全栈开发，在 AI 快速迭代的这两年中，感觉曾经被“忽略”或“轻视”的问题，在 AI 时代显得更加重要： 1.","news",[10,13,18,23,28,33,38,43],{"headline":6,"body":11,"imageUrl":12,"sourceImageUrl":12},"一年已经过去一大半，半年总结一直没做，刚好趁着前段时候参加QECon演讲的一些思考，总结这篇文章，主要分为两个部分: 谈谈AI时代的后端开发：曾经被“忽略”或“轻视”的问题 做了多年的后端开发和全栈开发，在 AI 快速迭代的这两年中，感觉曾经被“忽略”或“轻视”的问题，在 AI 时代显得更加重要： 1. 极其严苛的输入验证与“防御性工程” 更加重要 以前：后端接口的输入大多来自前端，格式相对固定（如 JSON 表单），很多人写接口时，参数校验（Validation）只做表面功夫，甚至为了赶进度直接裸奔，全靠“前端做过校验了”来心理安慰。","https:\u002F\u002Fp6-xtjj-sign.byteimg.com\u002Ftos-cn-i-73owjymdk6\u002F3d21475cae2648b18bf8ea27ed2f3700~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5ZGo5pyr56iL5bqP54y_:q75.awebp?rk3s=f64ab15b&x-expires=1791163295&x-signature=knn9Rw5FSgLIwrry9f8JwY%2BxbG8%3D",{"headline":14,"body":15,"imageUrl":16,"images":17},"现在：后端接口的调用者正在从人类变成 AI Agent (Tool Calling)，AI 的行为具有非确定性，它可能会传进奇奇怪怪的边界值、逻辑上矛盾的复合对…","现在：后端接口的调用者正在从人类变成 AI Agent (Tool Calling)，AI 的行为具有非确定性，它可能会传进奇奇怪怪的边界值、逻辑上矛盾的复合对象、甚至由于幻觉生成的脏数据或者操控AI直接攻击，所以现在的后端必须像对待“黑客攻击”一样对待 AI 的每一个请求，强类型校验和严格的 schema 定义成了重中之重。 2. 完美的软件契约：日志 (Logging) 与 链路追踪 (Tracing) 以前：日志往往是“出了 bug 才去捞一下”的口头禅，很多开发者的日志写得极其随意（例如 log.info(\"process success\")），甚至链路追踪（Trace ID）也只是在大型微服务中才勉强推行。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F1.webp",{"local":16},{"headline":19,"body":20,"imageUrl":21,"images":22},"现在：日志不仅是给人看的，更是给 AI 看的，如果一个系统没有标准的 OpenTelemetry 链路、没有结构化的异常上下文，AI 程序员在帮你修 Bug…","现在：日志不仅是给人看的，更是给 AI 看的，如果一个系统没有标准的 OpenTelemetry 链路、没有结构化的异常上下文，AI 程序员在帮你修 Bug 或自动重试时就会变成“瞎子”，导致它不断生成错误的修复代码，陷入死循环，后端日志和监控的清晰度，直接决定了 AI 辅助运维和开发的效率上限。 以前：写 Swagger \u002F OpenAPI 文档是大家最讨厌的差事，很多开发者为了省事，字段描述（Description）直接留空，或者只写个 id: 用户id，只要前后端口头对齐了，文档烂点也能过。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F2.webp",{"local":21},{"headline":24,"body":25,"imageUrl":26,"images":27},"现在：OpenAPI 文档成了 Agent 的必备“操作说明书”，Agent 是根据你接口的 description…","现在：OpenAPI 文档成了 Agent 的必备“操作说明书”，Agent 是根据你接口的 description 来决定“什么时候该调用这个接口”以及“参数代表什么含义”的，如果你的文档描述模糊、没有写明业务边界，大模型就会频繁误调用，“文笔好、语义清晰”的接口文档，在 AI 时代直接等同于高可用性。 以前：网络抖动导致用户多点了一次按钮，大不了返回一个“请勿重复提交”，很多复杂的分布式事务和幂等控制，在非核心业务里经常被敷衍过去。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F3.webp",{"local":26},{"headline":29,"body":30,"imageUrl":31,"images":32},"现在：AI 在执行任务（如自动帮用户订机票、转账、改数据）时，由于网络延迟或模型思考超时，极大概率会触发自动重试机制，AI…","现在：AI 在执行任务（如自动帮用户订机票、转账、改数据）时，由于网络延迟或模型思考超时，极大概率会触发自动重试机制，AI 的重试行为比人类频繁和盲目得多，如果后端的分布式锁、状态机推进、以及接口幂等性没有做到 100% 的滴水不漏，系统就会瞬间产生大量重复订单或脏数据，现在是需要确定性的后端架构设计对抗 Agent 的非确定运行。 5. 高度抽象的领域驱动设计 (DDD) 与架构整洁度 以前：很多人觉得 DDD（领域驱动设计）太重、太务虚，为了快，习惯把所有业务逻辑都堆在 Service 层甚至 Controller 层，代码虽然像“面条”一样缠绕，但人类靠着记忆力还能勉强维护。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F4.webp",{"local":31},{"headline":34,"body":35,"imageUrl":36,"images":37},"现在：这种“面条代码”成了 AI 的噩梦，AI 的上下文窗口（Context Window）是有限的，且它的推理成本随着代码量增加而暴增，如果你的代码耦合度极高…","现在：这种“面条代码”成了 AI 的噩梦，AI 的上下文窗口（Context Window）是有限的，且它的推理成本随着代码量增加而暴增，如果你的代码耦合度极高，AI 修改一个地方就会导致别的地方崩溃，只有那些边界清晰、职责单一、符合 SOLID 原则的干净架构，AI 才能精准、低成本地进行重构和扩展。 6. 代码 Review 是一方面，自动化验证才是 Harness 工程 以前：Review 的时间大多耗在格式、命名、拼写、有没有漏掉判空上。代码是人一行行写的，量有限，这些低级问题也还盯得住。验证大多停在“有没有补一个测试”，人审过了，这轮就算结束。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F5.webp",{"local":36},{"headline":39,"body":40,"imageUrl":41,"images":42},"现在：Cursor、Claude Code、GitHub Copilot 可以很快吐出成百上千行代码。格式和判空交给…","现在：Cursor、Claude Code、GitHub Copilot 可以很快吐出成百上千行代码。格式和判空交给 Pre-commit、Linter，以及先用模型审一轮。人仍然要看业务意图有没有理解错、大并发下会不会死锁、新引入的库有没有漏洞。生成出来的代码常常注释完整、测试也配套，却可能在调用一个不存在的 API，或者在很隐蔽的边界上踩出竞态，这种看着能合进去的代码，最容易被放过去。Review 这一层还要留着，但它撑不住 Agent 的产出速度。 《软件工程面向谷歌的实践》（Software Engineering at Google）：第 18–20 章讲 Code Review，包括什么样的 PR 算过关、质量和速度怎么平衡、Review 怎么在团队里变成习惯。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F6.webp",{"local":41},{"headline":44,"body":45,"imageUrl":46,"images":47},"《软件设计的哲学》（A Philosophy of Software Design，John Ousterhout）：怎么认出代码里的复杂性，以及…","《软件设计的哲学》（A Philosophy of Software Design，John Ousterhout）：怎么认出代码里的复杂性，以及 Review 时怎么判断模块够不够深、接口够不够简单，模型很容易把实现写复杂，这本书刚好对着这个问题。 《编写可读代码的艺术》（The Art of Readable Code）：读不懂的代码，人维护不了，后面的模型也维护不了，用同一套可读性标准去要求生成的代码，仓库才不会很快烂掉。 另外 Harness 里我觉得最重要的是自动化验证，一次 Agent 执行要能在环境里跑完，留下 trace，用测试、契约和检查器判定结果对不对、路径偏没偏，失败要能归因，再回流成下一轮的反馈。","\u002Fapi\u002Fmedia\u002Fposts\u002Faiqeconppt-f1d07e92\u002F7.webp",{"local":46},[],[],{"name":51,"url":52},"Juejin","https:\u002F\u002Fjuejin.cn\u002Fpost\u002F7690031273628745779","zh",{"handle":55,"displayName":56},"spots","Spots",null,{"views":59,"likes":60,"saves":60,"shares":60,"completions":60,"opens":60,"skips":60,"depthSum":60},5,0,"2026-09-28T03:37:12.971Z","local"]