十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

AI Coding 上下文管理与任务拆解实战:从能跑通到跑得稳

AI Coding 上下文管理与任务拆解实战:从能跑通到跑得稳 1. 从能跑通到跑得稳AI Coding 到底在解决什么问题很多人第一次接触 AI Coding脑子里浮现的画面是我打一行注释它帮我补全十行代码。这个理解不算错但太浅了。真正把 AI Coding 用进日常开发的人会发现它解决的从来不是少敲几个字的问题而是把人的意图翻译成可执行代码的中间损耗。你脑子里想的是一个业务逻辑传统方式下你要经历想清楚→查文档→写代码→调试→改错这一长串动作而 AI Coding 把其中查文档、写样板、试错这几段压缩了。但这里有个反直觉的结论AI Coding 用得越深你越会发现瓶颈不在模型聪不聪明而在你能不能把任务讲清楚、能不能管住上下文。我见过太多人抱怨这模型不行写出来的代码一堆 bug结果一看他的 prompt三句话描述一个涉及五个模块改动的需求模型只能靠猜。这不是模型的问题是任务拆解和上下文管理的问题。所以这篇内容我想聊三件事也是我自己踩了无数坑之后总结出来的主线AI Coding 的本质是什么它擅长什么、不擅长什么边界在哪大模型上下文限制这个绕不过去的坎到底怎么理解、怎么绕任务拆解策略怎么把一个模糊的大需求切成模型能稳定吃下的小块。适合谁看如果你已经在用 Copilot、Cursor、Claude Code、Codex 这类工具但总觉得时灵时不灵或者你正准备把 AI Coding 引入团队流程那这篇就是写给你的。如果你还停留在让 AI 写个快排的阶段也能看懂因为我会尽量用生活化的类比把原理讲透。先给一个我自己的定义AI Coding 是一套人负责决策、模型负责执行、上下文负责传递的协作机制。注意是机制不是工具。工具会换机制不会。你把机制搞明白了换哪个模型、哪个 IDE 插件都能快速上手。2. AI Coding 的能力边界它到底擅长什么、在哪里翻车2.1 模型真正强的地方是模式匹配而不是逻辑推理要合理使用 AI Coding第一步是搞清楚它的能力来源。大模型的底层能力是基于海量代码语料的模式匹配。它见过无数个 React 组件、无数个 Spring Boot Controller、无数个 Python 数据处理脚本所以当你给出一个符合常见模式的请求时它能瞬间给你一个看起来很像那么回事的结果。这意味着它特别擅长这几类活样板代码生成CRUD、DTO 转换、配置文件、单元测试骨架这些高度模式化的东西模型闭着眼都能写。API 用法查询某个库的函数签名记不清了直接问比翻文档快。代码解释与翻译把一段老代码翻译成新语言或者给一段看不懂的代码加注释。局部重构重命名、提取函数、简化条件判断这类改动范围可控。但它不擅长的是跨模块的架构决策比如这个功能应该放在哪个服务里模型没有你的业务上下文给的建议往往是教科书式的。需要精确状态追踪的逻辑涉及并发、事务、复杂状态机的代码模型容易写出看起来对但边界条件全错的实现。依赖外部真实环境的操作它不知道你数据库里到底有什么数据、你的接口返回什么格式。我踩过最典型的一个坑让模型写一个带重试和退避的 HTTP 请求封装它给了一个漂亮的实现但退避策略用的是固定间隔而且没处理幂等性问题。代码能跑但生产环境一压就出问题。这就是模式匹配的局限——它给你的是平均正确的答案不是针对你场景正确的答案。2.2 一个判断标准这个任务能不能用一句话验收我后来总结出一个特别实用的判断标准如果一个任务你能用一句话说清楚验收标准那它大概率适合交给 AI如果验收标准本身就需要讨论半天那先别急着让 AI 写。举个例子写一个函数输入一个字符串数组返回去重后的结果保持原顺序——验收标准清晰交给 AI秒出。优化一下我们的订单系统性能——验收标准模糊交给 AI它只能给你一堆泛泛的建议。这个标准背后其实是信息熵的问题。任务越模糊模型需要猜的东西越多猜错的概率就越大。而任务拆解的核心目的就是把模糊任务变成一系列验收标准清晰的小任务。2.3 别把模型当人把它当一个非常勤奋但记性很差的实习生这个类比我觉得特别贴切。这个实习生知识面极广什么语言什么框架都懂一点手速极快你话没说完它代码就写完了但记性极差你上一轮跟它说的东西这一轮它可能就忘了而且特别容易自信地胡说八道写错了还一脸笃定。理解了这一点你就明白为什么上下文管理是 AI Coding 的核心技能了。你不是在跟一个能记住整个项目的老员工协作你是在跟一个每次对话都重新入职的实习生协作。你的任务就是每次对话都把这个实习生完成当前任务所需的最小信息集准确地喂给它。3. 上下文限制为什么模型会失忆以及三种应对思路3.1 上下文窗口不是越大越好而是越准越好先解释一下什么是上下文窗口。你可以把它理解成模型的工作记忆容量单位是 token可以粗略理解为一个词或半个汉字。早期的模型可能只有 4K token现在动辄 128K、200K 甚至更大。很多人一看200K 上下文第一反应是那我直接把整个项目塞进去不就行了。实测下来这个想法会翻车原因有两个第一成本问题。上下文越长每次请求消耗的 token 越多费用是线性甚至超线性增长的。你把整个代码库塞进去一次对话可能就烧掉几块钱。第二也是更关键的是中间遗忘现象。研究发现模型对上下文开头和结尾的信息记得最牢中间部分的信息容易被忽略。你把 10 万 token 的代码塞进去模型真正用上的可能只有头尾那部分。这就是所谓的lost in the middle。所以正确的思路不是塞更多而是塞更准。上下文管理的目标是让模型在每一次请求里只看到与当前任务强相关的信息。3.2 三种应对思路压缩、检索、外挂围绕上下文限制业界主要有三种应对思路我按从简单到复杂排一下思路一压缩Compression。把长内容总结成短内容。比如你要让模型改一个函数不需要把整个文件贴进去只需要贴这个函数加上它的依赖声明。再比如把一段冗长的需求文档先让模型总结成要点再拿要点去指导编码。思路二检索Retrieval。这就是 RAG检索增强生成的核心思想。不把所有内容塞进上下文而是建一个索引根据当前任务动态检索出最相关的片段。代码场景下这通常表现为根据函数名或注释找到相关代码片段。思路三外挂Tool Use / MCP。让模型通过调用外部工具来获取信息而不是把信息预先塞进上下文。这就是最近很火的MCPModel Context Protocol要解决的问题。3.3 MCP 到底是什么给模型装上一双手MCP 这个词最近热度很高但很多人说不清楚它是什么。我用一个类比解释如果大模型是一个聪明但被关在房间里的大脑那 MCP 就是给它开的一扇扇门和递进来的一件件工具。具体来说MCP 定义了一套标准协议让模型可以读取本地文件模型不用你把文件内容贴进去它自己通过 MCP server 去读查询数据库直接连数据库拿真实数据而不是靠猜调用外部服务比如查天气、查股票、操作设计工具。这里涉及两个概念MCP Host和MCP Server。Host 是发起方比如你的 AI 编辑器Server 是提供能力的一方比如一个能读本地文件的程序。模型通过 Host 向 Server 发请求Server 返回结果结果再进入模型的上下文。MCP 的价值在于它把信息获取从预先塞入上下文变成了按需拉取。你不再需要把整个数据库 schema 贴给模型模型需要的时候自己去查。这从根本上缓解了上下文压力。我实测过几个 MCP 场景比如让模型通过 MCP 读取本地项目文件来理解代码结构比手动贴文件效率高很多。但要注意MCP server 的质量参差不齐有些 server 返回的数据格式很乱反而会污染上下文。选 MCP server 的时候优先选那些返回结构化、精简数据的。3.4 一个实用的上下文预算表为了让你对上下文消耗有个直观感受我整理了一个粗略的预算参考以常见的中文代码混合场景估算内容类型大致 token 消耗建议处理方式单个函数50 行约 500-800直接贴单个文件500 行约 5000-8000只贴相关部分完整需求文档2000 字约 3000-4000先总结成要点整个项目代码库数十万起用检索或 MCP别硬塞一次对话历史20 轮约 10000定期开新对话提示这个表是经验值不同模型的分词方式不同实际会有偏差。但量级参考是靠谱的。看到这个表你就明白了一次对话里如果你贴了两个大文件又聊了十几轮上下文基本就满了模型开始失忆是必然的。这时候正确的做法不是继续追问而是开一个新对话把当前进展总结成一段话带过去。4. 任务拆解把大象切成模型能一口吞下的块4.1 为什么大任务必须拆模型的注意力是有限资源前面说了上下文限制但任务拆解还有另一个更本质的原因模型的注意力是有限资源。你给它一个涉及十个文件改动的任务它可能只认真处理了前三个后面七个就开始敷衍。这不是它偷懒是它的认知带宽被占满了。我做过一个对比实验同一个需求给一个模块加缓存层两种方式交给模型方式 A一次性描述完整需求让它自己规划并实现方式 B拆成设计缓存 key 策略→实现缓存读写封装→改造调用点→写测试四步逐步进行。结果方式 A 出来的代码缓存 key 设计有漏洞调用点漏改了两处方式 B 每一步都验收通过最后拼起来基本可用。差距不在模型在任务粒度。4.2 拆解的黄金法则每个子任务都能独立验收拆解不是随便切而是有讲究的。我的黄金法则是每个子任务都要能独立验收且验收标准能用一两句话说清楚。具体怎么操作我通常按这几个维度切按数据流切输入处理→核心逻辑→输出处理每段独立。按层次切接口层→服务层→数据层每层独立。按变更类型切先加新代码再改旧代码最后删废弃代码。按风险切先做低风险的样板代码再做高风险的核心逻辑。举个具体例子。假设需求是给用户中心加一个手机号换绑功能我会这样拆接口定义定义换绑接口的入参、出参、错误码。验收标准接口文档清晰类型定义完整。校验逻辑实现手机号格式校验、验证码校验、原手机号校验。验收标准各种非法输入都能正确拦截。数据更新实现数据库更新逻辑处理并发情况。验收标准并发换绑不会出现数据不一致。通知逻辑换绑成功后发通知。验收标准通知能正确触发。测试为以上每一步写单元测试。每一步单独交给模型每一步都能验收。这样即使某一步出错也只影响那一步不会全盘重来。4.3 拆解后的交接怎么让模型记住上一步的成果拆解带来一个新问题拆成多步之后模型怎么知道上一步做了什么这就是交接问题。我的做法是维护一份任务进度文档每完成一步就更新。这份文档包含当前任务的整体目标已完成步骤的产出关键代码片段、接口定义、决策记录当前步骤的输入和期望输出已知的约束和坑。每次开新对话把这份文档的相关部分贴给模型它就能快速进入状态。这份文档不用很长控制在几百字到一千字重点是精准。注意这份进度文档本身就是一种上下文压缩。你把几十轮对话的精华压缩成一段结构化文字既省 token又让模型抓得住重点。4.4 拆解的粒度怎么把握太粗和太细都不行拆得太粗模型还是吃不下拆得太细你会累死在喂上下文上。怎么把握粒度我的经验是一个子任务应该对应模型一次能稳定输出的量。什么叫稳定输出就是模型一次回复能完整给出、且你能快速验收的代码量。经验值大概是50 到 200 行代码或者一个完整的函数/类。如果子任务产出的代码超过 200 行考虑再拆如果少于 20 行考虑合并到相邻任务。这个粒度下模型不容易失忆你验收也快。5. 一套可复用的 AI Coding 工作流5.1 从需求到代码的五个阶段把前面的东西串起来我总结出一套自己常用的工作流分五个阶段阶段一需求澄清。先别急着让模型写代码让它帮你把需求问清楚。你可以说我要做 X你问我五个最关键的问题。模型问出来的问题往往能帮你发现自己没想清楚的地方。阶段二方案设计。让模型给出两到三个实现方案对比优劣。这一步不要它写代码只要思路。你从里面挑一个或者组合。阶段三任务拆解。基于选定的方案让模型帮你拆任务。注意是帮你拆最终粒度由你定。模型拆的往往偏粗你需要再细化。阶段四逐步实现。按拆好的任务一个一个来。每个任务开始前把相关上下文喂进去完成后验收并更新进度文档。阶段五集成与测试。所有子任务完成后让模型帮你写集成测试或者做一次整体 review。这套流程看起来慢但实测下来总时间比一把梭要短因为返工少。尤其是中大型需求差距非常明显。5.2 每个阶段的 prompt 该怎么写prompt 的写法直接决定输出质量。我分享几个自己常用的模板思路需求澄清阶段我要实现【一句话描述需求】。 背景是【简要背景】。 请你扮演一个资深工程师向我提出 5 个最关键的问题 帮我把需求想清楚。不要写代码。方案设计阶段基于以下需求【需求描述】 请给出 2-3 种实现方案 每种方案说明核心思路、优点、缺点、适用场景。 不要写完整代码可以用伪代码示意。逐步实现阶段当前任务【子任务描述】 验收标准【一两句话】 相关上下文 - 已有接口【贴接口定义】 - 相关代码【贴关键片段】 - 约束条件【贴约束】 请实现这个任务只输出这个任务相关的代码。这几个模板的核心逻辑是明确角色、明确边界、明确验收。你把这三点说清楚模型的输出质量会稳定很多。5.3 验收环节怎么快速判断模型写得对不对模型写完代码你怎么快速验收我通常看这几样能不能编译/运行这是最低标准跑不起来直接打回。边界条件处理空值、越界、并发这些地方模型最容易偷懒。命名和风格是否符合项目规范这个影响可维护性。有没有幻觉 API模型有时会调用不存在的函数这个必须查。其中幻觉 API是最坑的。模型会非常自信地调用一个根本不存在的库函数你如果不查编译时才报错。我的习惯是凡是模型调用的、我不熟悉的 API一律去官方文档确认一遍。5.4 一个真实案例的完整拆解说个我最近做的例子。需求是给现有的日志系统加一个按天切割文件的功能。需求澄清模型问了几个好问题——切割是按自然日还是按 24 小时跨天时正在写的日志怎么处理保留多少天的历史这些问题我原本没想清楚。方案设计模型给了三个方案——用现成的日志库配置、自己写定时任务、用文件大小时间双条件。我选了第一个因为项目已经在用某个日志库配置一下就行。任务拆解拆成确认日志库版本和配置方式→写配置→验证切割效果→加清理逻辑四步。逐步实现每步单独对话贴相关配置和文档片段。集成测试写了个脚本模拟跨天写入验证切割正确。整个过程大概花了两个小时其中一半时间在澄清需求和验证。如果一把梭我估计要返工三四次。6. 那些没人告诉你但特别重要的实操心得6.1 模型越用越笨的真相是你的上下文在污染很多人有个错觉同一个对话聊得越久模型越笨。其实不是模型变笨了是上下文被污染了。前面聊过的无关内容、失败的尝试、错误的代码全都堆在上下文里模型被这些噪音干扰输出质量自然下降。解决办法很简单该开新对话就开新对话。我的习惯是一个子任务完成就开新对话做下一个。如果必须延续就把关键信息总结成一段话带过去而不是把整个历史都拖着。6.2 让模型先想后写能显著降低错误率这是个特别实用的小技巧。让模型直接写代码它容易上来就写写到一半发现思路不对。但如果你让它先输出思路再输出代码错误率会明显下降。具体做法是在 prompt 里加一句请先简要说明你的实现思路确认无误后再写代码。 模型输出的思路你扫一眼就能发现方向性问题及时纠正避免它写完一大段才发现跑偏。6.3 别让模型一次改多个文件这是血泪教训。让模型一次改多个文件它很容易顾此失彼——改了这个忘了那个或者改出不一致的接口。一次只改一个文件或者一组强相关的文件。改完验收再改下一组。如果确实需要跨文件改动先让模型列出需要改哪些文件、每个文件改什么你确认清单后再一个一个来。6.4 保留人工兜底的环节AI Coding 再强也不能完全放手。我坚持保留几个人工兜底环节核心业务逻辑涉及钱、涉及安全、涉及不可逆操作的代码人工必须逐行 review。数据库变更任何 schema 改动人工确认。依赖引入模型建议引入新库时人工评估必要性和安全性。这不是不信任模型是风险控制。模型犯错是概率问题你兜底是确定性问题。6.5 建立自己的prompt 库和踩坑库用得多了你会发现有些 prompt 特别好用有些坑反复踩。我的做法是建两个文档prompt 库把验证有效的 prompt 模板存下来按场景分类下次直接用。踩坑库每次被模型坑了记下来——什么场景、什么表现、怎么解决的。这两个文档是你 AI Coding 能力的复利资产。用一年下来你会发现自己的效率提升不是线性的是复利的。7. 关于工具选型和 MCP 的一些补充7.1 工具选型的核心不是哪个最强而是哪个最顺手市面上 AI Coding 工具很多编辑器插件、独立 IDE、命令行工具各有各的路子。我的建议是别纠结哪个模型跑分最高选一个能融入你现有工作流的。判断标准就三条上下文管理方不方便能不能方便地引用文件、管理对话历史和你的技术栈合不合对主流语言和框架的支持好不好MCP 生态怎么样能不能接你需要的 MCP server。这三条比跑分高 5 分重要得多。7.2 MCP 的落地从能用到好用还有距离MCP 是个好方向但目前的落地体验参差不齐。我实测下来文件读取类和数据查询类的 MCP server 比较成熟设计工具类、特定软件类的 MCP server 还在早期稳定性一般。如果你要自己搭 MCP server我的建议是返回数据要精简别把整个数据库表返回只返回相关字段错误处理要清晰server 出错时返回明确的错误信息别让模型瞎猜权限要控制MCP server 能读什么、能写什么要有明确边界。MCP 的本质是给模型扩展能力但扩展能力的同时也扩展了风险。能力越大越要管住。7.3 本地部署大模型的取舍有些场景下你可能想本地部署模型比如数据敏感、想省钱。本地部署的核心取舍是能力 vs 成本本地小模型几 B 到十几 B 参数跑得动但代码能力明显弱于云端大模型本地大模型几十 B 以上能力强一些但对硬件要求高推理速度慢。我的经验是本地模型适合做辅助而不是主力。比如用它做代码补全、简单问答复杂的任务还是交给云端模型。混合使用性价比最高。8. 最后聊几句我自己的体会AI Coding 这个东西用了一两年下来我最大的感受是它改变的不是写代码这件事而是想清楚这件事的价值。以前一个想得不太清楚的需求靠着手速快、边写边改也能糊弄过去。现在有了 AI写代码的成本大幅下降想清楚反而成了瓶颈。你能不能把需求讲清楚、能不能把任务拆明白、能不能管住上下文这些软技能变得比手速重要得多。我见过效率提升最明显的人不是那些 prompt 写得最花哨的而是那些本来就想问题就想得很清楚的人。AI 只是把他们脑子里的清晰更快地变成了代码。反过来脑子一团浆糊的人用上 AI 之后只是更快地生产了一堆浆糊代码。所以如果你问我怎么合理使用 AI Coding我的答案不是某个工具、某个技巧而是先练好把问题想清楚、把任务拆明白的基本功然后让 AI 帮你把想清楚的东西快速实现。工具会一直变这个基本功不会过时。至于上下文限制和任务拆解本质上都是这个基本功的延伸——你能不能把一个大问题拆成一系列小到模型能一口吞下、你又能快速验收的小问题。这个能力练好了换什么模型、什么工具你都能用得顺手。最后分享一个我最近养成的习惯每次让 AI 写代码之前先花两分钟在纸上或者文档里把任务拆一遍写清楚每一步的输入、输出、验收标准。这两分钟看起来是浪费但实测下来它省掉的返工时间至少是这两分钟的十倍。
返回列表