掘金人工智能本月最热 3小时前
AI 编程实践:Context Engineering 提升代码生成效率
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

文章探讨了在软件开发中如何利用 AI 进行代码生成,并强调了“Context Engineering”的重要性。作者分享了从 2021 年使用 Copilot 至今的经验,指出 AI 工具的效果很大程度上取决于使用者的视角和提供的上下文。文章详细阐述了如何通过结构化、最小化的上下文信息,让 AI 在清晰的边界内工作,从而提高代码生成的稳定性、效率和可控性。作者提出了单行、文件和工程三个层级的上下文组织方法,并强调了模块化设计、README 文件作为索引以及自动化维护文档的重要性,最终目标是让工程师从实现细节中解放出来,专注于更高维度的决策和项目把控。

💡 **Context Engineering 的核心价值:** 文章指出,AI 代码生成效果的关键在于提供“合适的上下文”,即最小但充分、结构化的信息。这就像设计函数一样,只暴露接口隐藏实现细节。通过“工程树”沉淀长期知识(架构、职责、规范),每次按需打包“顶层规则 + 模块 README(索引)+ 任务 spec”,让 AI 在清晰边界内工作,显著提升代码产出质量和效率。

🗂️ **多层级上下文组织:** 作者提出了三种上下文组织层级:单行/函数级(自由发挥,AI 写注释)、文件级(通过文件夹的 README 描述文件职责和约束,AI 快速定位)和工程级(跨模块/多文件,使用“顶层规则 + 模块 README + spec-driven”进行规划)。这种分层索引机制有助于 AI 理解项目结构和需求,减少无效搜索。

🛠️ **自动化维护与信任积累:** 文章强调了模块 README 非手动维护,由 AI 在任务完成后自动更新的机制。这种“知识沉淀 + 索引定位”的模式使文档树随工程演进自动更新。同时,建议从低层级(单行、函数)开始积累与 AI 交互的经验和信任感,逐步过渡到更复杂的工程级别任务。

🚀 **工程师角色的演进:** 随着 AI 承担更多编码工作,工程师的角色正从聚焦实现细节转向高维决策。未来的工程师需要判断需求可达性、定义上下文范围、进行规划与对齐、审核 AI 生成的代码,并为其瑕疵进行最后的完善。公司层面则需要推动全链路 context-driven 的实践,实现指数级效率提升。

⚙️ **实践中的关键设计原则:** 为了实现 AI 的稳定输出,作者总结了几个关键点:文件不宜过大以节省上下文;模块职责清晰;文件夹级别有 README 作为索引;顶层沉淀通用规则;以及保持对项目掌控力,确保代码架构的可维护性。这些原则共同构建了一个高效、可控的 AI 编程环境。

从21年开始使用 copilot,能够用 ai 代码补全,到现在操作复杂项目模块级别的代码生成,它们对于使用者的视角和心态已经不在一个纬度。同样的工具,不同的 ai 使用者我发现也能拉开巨大的差距。所以写一篇文章和大家交流一下心得,如果有更佳的实践也非常欢迎一起交流。

Context is all you need

仅依赖 vibe coding(模型自行联想 → 自行搜索 → 直接改动)在一些场景下效果会不稳定:可能出现理解偏差、语义不一致,token 消耗也偏高,产出与预期不完全一致。直接使用对话 AI 更像是你临时拉来了一个专家级别的外包,他很聪明,但是刚来很容易还水土不服,还有可能误解你的意图写了一堆不想要的东西。本质上是 context,Garbage In, Garbage Out 输入质量直接影响输出质量。优化的第一性原理是 attention 机制:无关/模糊/矛盾的信息会分散 attention,影响结果稳定性。而上下文不足:只给单轮粗略描述时,模型不了解项目历史、代码风格与约束,也很难有高质量输出。

更稳妥的做法,是提供“合适的 context”,让模型在清晰边界内工作。这里的“合适”指最小但充分、结构化的信息,就像我们设计函数一样——对外只暴露接口,隐藏内部实现;context 的“精妙”也在于此:给模型的,应该是完成任务所需的接口面,而不是把实现细节一股脑儿倒进去。少了容易歧义、多了会稀释 attention,极端情况下还会撑爆上下文窗口。

这也是我为什么会做工程级别的 Context Engineering 的原因:把长期知识(架构/职责/规范)沉到“工程树”,每次按任务打包“顶层规则 + 模块 README(索引) + 任务 spec”的最小集,让模型在清晰边界内工作。现在在 IM 模块里,约 90% 的代码可以由 AI 稳定产出,复杂改动也能跨几十个文件一次到位,整体效率提升数倍。

我通常会关注下面三个层级:

上面的作用是一个给 人 / ai 来看的索引,我们也是我们主要需要维护和关注的点。把长期知识(架构/职责/规范)组织成可索引的树。每次任务只打最小包——顶层规则 + 当前模块 README(作为索引)+ 本次任务 spec——减少无效搜索与反复推断,降低 token 消耗,同时提升对齐度与可复现性。

当我们构建好一套自动化的 context provider 机制之后,我们只需要考虑每次的需求需要哪个 scope 的文档参与,并不需要每次都手敲一堆 context 进去,这也是“项目级 Context Engineering”的价值所在。

当然也不是所有问题都要动用“牛刀”,简单任务用 vibe coding 更快;但层级越高,复杂度和对 AI 的可控性要求越强,方法论需要从“灵感驱动”转为“context 驱动”。

在一个复杂项目中我是如何实践的

此实践并非从项目一开始就这么设计,而是在模块开发中途逐步完善,中间也经历了非常大的改造过程。到目前已经跑得非常稳定,能够 cover 绝大部分需求的自动化产出。好的设计才能让 ai 长期稳定的输出,我的经验是要做到以下几点:

为了实现这一点我经历了一波比较大的重构,把整个模块拆的非常细。演进到现在的结构大概是这样:

层级内容示例作用
App 顶层通用约束(全模块生效)路由注册规范、屏幕适配(fit 策略)、文字枚举新人/新 AI 快速上手
模块顶层职责定义与拆分IM 模块 README:业务职责、子模块划分、维护规则索引定位
子模块具体的实现信息controller/build/model/ 等文件夹规范,这个下面甚至还可以有子规范,取决于你的复杂度提供最底层的实现层面的信息

模块 README 非手动维护,由 AI 在任务完成后自动更新。

Context 供给机制

执行任务时,仅提供两份文档:

AI 通过索引快速定位相关文件,context 收敛至最小集,避免全文搜索或向量匹配。适用于跨数十文件的复杂修改。

这个索引由于就是文档,所以非常方便做 review 或者自定义一些子模块规则。

自动化维护

我的做法是在顶层 README 内置规则:任务完成后,将长期知识(新职责、新约束)写入对应层级 README。每一个层级的 README 都承担了“知识沉淀 + 索引定位”的职责。它不会过度关注更加底层的实现细节,而是聚焦于“我是谁,我负责什么,我的约束是什么”。

    AI First:优先让 AI 完成任务。自检更新:AI 读取预定义职责,补充变更至对应 README人工验证:小步 review 确保准确

此机制使文档树随工程演进自动维护,形成活的知识库。

以信任的角度逐渐积累和 AI 交互的手感

一上来要 handle 工程级别的 ai 任务,难度较大,可以先从低层级逐步积累经验和信任感:

无论是 ai 产出还是手写,我们最后都是人来为产出结果负责,所以逐步积累和 ai 交互的手感非常重要。即使是 ai 在干活,也务必要保持对整个项目的把控度,不是甩手掌柜。

工程师角色演进

过去:聚焦实现细节

现在:

    判断需求可达性(技术 + 资源)定义 scope context,作为 context provider 提供合适的上下文进行 planning - Alignment - 等待代码生成 - review - test对 ai 生成代码中的瑕疵补足最后一公里

绝大部分的细节由 AI 处理,工程师专注于高维决策与把控。

公司级扩展

这件事情只能从组织架构层面推动,需要领导者的支持与推动。

一些还能提升生成效果的方法

一些正在思考的问题

未来已来,只是分布不均匀。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

AI编程 Context Engineering 代码生成 软件开发 效率提升 AI Coding Code Generation Software Development Efficiency
相关文章