Agentic Coding 场景下基于职责分离的上下文管理思路分享

文章深入探讨了在自动化编码(Agentic Coding)场景中,大语言模型因上下文过长而导致的“性能退化”问题。作者指出,传统的上下文管理方式(如直接返回完整文件内容)会导致 token 快速膨胀和信息过载。为此,文章提出了一种借鉴人类开发者使用 IDE 习惯的“职责分离”方案:将工具调用拆分为“行为”(如 open_file)和“影响”(在上下文中实时更新的结构化状态)。通过在 System Prompt 中构建一个包含 标签的结构化块,动态展示当前打开的文件、TODO 列表和备忘录,并引入“事实记忆”与“行为记忆”的分离管理,以及基于 Sub-Agent 的关键信息提取(记忆/遗忘机制)。这种方法不仅提升了模型在复杂任务中的稳定性,还为多 Agent 协作中的上下文继承提供了清晰的工程路径。




本文提出了一种在 Agentic Coding 场景下基于“职责分离”思想的上下文管理新思路:将工具调用解耦为 “行为”(如 open_file)和“影响”(如 IDE 中实时更新的文件内容),通过结构化、模块化(如 <ide> 块)、动态组装的上下文设计,替代传统将大量原始数据(如完整文件内容)直接塞入上下文的做法;同时引入“行为-影响分离”“记忆/遗忘机制”“事实与行为记忆区分”“延迟卸载”等策略,系统性缓解长上下文导致的注意力稀释、信息过载、内容过期与性能退化等问题,提升 Agent 在复杂编码任务中的稳定性、可维护性与上下文利用效率。该思路虽源于 coding 场景,但具备跨任务复用潜力。

图片

Agentic Coding 场景下基于职责分离的上下文管理思路分享

⽂主要S1尝试⾏模为主的⾃动化编码程中到了⻓任务下上下⽂的以及短任务中意⼒的分散问题尝试了模压缩FIFOagent上下⽂隔离等各种策略后摸索程中逐渐演变出的的⼀个设计思路⼼思想⼯具的职责分离

⽂会基于语⾔模的原理特点以及实践程中到的问题从⼯程中职责分离的⻆度出发尝试种新的上下⽂管理的思路通过将⼯具分为通过上下⽂的动态管理尝试解决上下⽂中的各类问题虽然是在coding的尝试但思路也许也可以被复⽤到其他类场景中。

Agentic Coding 场景下基于职责分离的上下文管理思路分享

上下

LLM有 tokentokentoken token token 

次请求中我们⼊给模的完整内容即为上下Context简单,上下⽂就看到⽤于理解当前语义或预下⼀个词的所前置信息

的 Agent

  1. UserInput

  2. ToolCalls&Responses

  3. ConversationHistory

  4. MCP

Agent设计——ContextEngineering使

Agentic Coding 场景下基于职责分离的上下文管理思路分享

token下文。简

agent成:

  1. mcp

对⽤户说能够掌握的分只⽤户对于agent的开发者说则除了⽤户以外的所内容,上下⽂⼯程指的就agent开发者在软件开发程中对上下⽂中包含的内容的组装。

使其

ContextDesign

对话历史

ContextAssembly

成最⼊。

ContextCompression

限 token息。

ContextManagement

持跨致性。

ContextOptimization

通过 A/B

Agentic Coding 场景下基于职责分离的上下文管理思路分享

上下⽂的影响

型本⼀个么得感情的计算机器⽤户被动感知环境的⽅式⽽⼯具则主动感知和影响环境的⼿段。基于语⾔模的原理我们知出取决于⼊和模固有参数对应⽤层开发说模固有参数⽆调整能控制的只有输⼊内容我们知的参数维度是固此模能感知到的是有限的当⽤户的明显感觉到模似乎变笨”。

种现象常被称为上下⽂⻓度增加导致性能上下退long-context degradation),当前⼤语⾔模LLM处理超⻓常⻅的种局限性具体表现

多 token 

使如 RoPEALiBitoken4K⼊ 32Ktokens),token 

——来像

-

使如 YaRNNTK-aware scaling显著

O(n²)),稀疏表。

Agentic Coding 场景下基于职责分离的上下文管理思路分享

⼯具的上下

Agentic Coding 场景下基于职责分离的上下文管理思路分享

LLMtoken使制扩API 回。

将 LLM⼿。所————

Agent

  • 编码时确

是直

codingread_filewrite_file

提供read_file⼯具简单的⽅式就直接读取并返回完整的⽂件内容为⽅便起⻅我们叫⼯具read_full_file

需要注意的是部分⽼项⽬或不规范项⽬中可能会存在编码不⼀致的问题,例如utf8和gbk混⽤的情况,如果未使⽤准确的编码读取⽂件内容可能导致注释、⾮英⽂常量⽆法被模型识别导致⽆法正确理解“业务含义”(代码逻辑之外的信息)。在java项⽬中推荐这两个库 juniversalchardet 和 cpdetector 来通过部分字节推测⽂件编码以避免此类问题。

当然最佳实践是通过改造来完成项⽬编码的统⼀,最佳实践是统⼀使⽤utf-8编码。

    String readFullFile(String path){
      //这里去读取文件内容,然后return出去
    }

    ⚠注意:⼯具的返回值也是上下⽂或者说提示词的⼀部分

    read_full_file题:

    • 胀。

    题:

    • 型 "xx"“”qwen)。

    • path等。

    对于path准确的问题可以基于⼀个简单的思路来进⾏处理即先搜索在读,通过关键path⾏搜索能定位到的⽂件则读取此⽂件否则确告知模在有相似的⽂件需要模重新再⽣成次⼯具调⽤

    readwriteread_full_file题:

    我们先不关注write⼯具的具体实现,只需要知道write后⽂件内容肯定发⽣了变化

    • 的responeresponse胀。

    式:

      tool_call:read_full_file filePath
      tool_response:filePath.content //第一次读取
      tool_call:write_file filePath xxxx
      tool_response: 更新成功
      tool_call: read_full_file filePath
      tool_response:filePath.content //第二次读取

      使aicodingwrite

      在coding场景中,“影响”指的是修改后代码的内容。

      read_full_file read_block_file容:

        String readBlockFile(String path,int startLine,int lineCount){
          //这里去读取文件内容,然后return出去
        }

        • 需要的内容在哪可能还是会多次调⽤读取⼯具后把整⽂件读取反⽽导致了和模多次交互增加了成)。

        • 误。

        输⼊的token也是会计费的,⽤块⼯具读取完整的⽂件内容⽐直接读取完整的⽂件内容会增加多次重复上下⽂的调⽤,导致成本的上升。

        在最坏情况下(需要的逻辑在⽂件read_full_file多的成,且上下还有⼯具调⽤),write⼯具联合使⽤的问题仍

        为了解决write⼯具联合使⽤的问题我试引⼊按需卸的策略发现write⼯具后判断⽂件内容已经变更时就去掉历史调⽤中的read⼯具的返回值我将⼯具划分为两个即读和写当读写操作同⼀个实体⾥指⽂件果有写操作则卸次的读操作导致模的幻觉现象变得⼊分了模出后我发现并能实应该延(⼀些读写操作后再卸否则模很难感知到次的⾏50

        在aone copilot中使⽤了类似的思路,⼤约只会保留最近250次的操作内容,可以右键打开 devtools来查看交互的对话内容。

        是这思路只能解决readwrite⽂件的⻓上下⽂问题难以推⼴到grepgetDependency等⼯具上,⼯程实现够优雅

        writewrite2

          String replace(String path,String search,String replace){
            //找到search块并替换为replace
          }
          String write(String path,String content){
            //直接覆盖path的内容,如果不存在则创建一个文件
          }

          write⼯具的主要问题⼯具调⽤内容相⽐read⼯具write只需要确保内部替逻辑是准确的,且出现问题能够准确反馈问题可以让模重新推理即可实际试中和模框架有关的两个需要意:

          1. \rwindows\r号。

          2. 型在输\t例如参数需要为\t但模型输\\t应该是通过json式约型输出⼯具调⽤导致的问题)。

          writepathread率。

          read_file

          1. 陷:

            writeread

          2. 读 限:

            与 write 

            耗 token

          3. 阱:

            在 writeread——50–250),

          Agentic Coding 场景下基于职责分离的上下文管理思路分享

          ⼯具的⾏为和影响

          回过思考⼈coding场景的⾏为当⼈在进⾏编码,⼀观察ide中打开的代码⽂通过键盘对代码⽂件⾏编位置),当需要切换编的位置将光移动到新的位置随后开始段新的

          通过拟态优化⼯具的设计思路当⼈在进⾏编码观察的IDE的界⾯时通过键盘界⾯中的元素⾏交互屏幕是有限的所以我们观察到的内容也是有限的agent

          当模图进次⼯具调⽤为了观察影响环境也可以说为了环境这是主导的⾏为环境则agent的具体务需要的信息例如coding场景中可以把代码⽂件等视为环境当⼯具调⽤结束时将⼯具返回的内容组装到上下⽂中就实现了让模观察环境或了解成的影响

          read_file为例实际⼯具的⽬的取⽂件内容并发给模⾏为是获取指定⽂件的内容影响是在上下⽂中增加⽂的内容终发给模使得模看起阅读了代码似的。

          IDE们“

          基于思路system prompt中增加了⼀个定存但内容新的储模看到的事实读⽂件的⼯具变成了open_fileclose_file两个操作当模调⽤open_file⼯具是进⾏了⾏为⽽⼯具的影响⾏为的结以及“IDE示⽂件内容

          实时更新是指每次发送给模型前进⾏更新

            String openFile(String path){
              //如果成功在ide中记录path被打开,返回已经成功打开文件
              //如果失败原因是什么
            }

            IDEIDE

            “TODOLIST”IDE

            /

            1. 我们现打开的⽂件可以上下⽂中增加警告信息让模重要的⽂件关闭

            2. 使),

            3. 使

            但⼈和模型还是有本的区别抛开逻辑能⼒的差异重要的记忆⼈可以记住刚刚打开的⽂件即使现关闭了⼤概也能记得内容并基于记忆中的内容对当前打开的⽂件⾏操作LM我们知是没有记忆的之所以记忆的假象是因上下⽂中包含了完整的信息

            ide

            Agentic Coding 场景下基于职责分离的上下文管理思路分享

            记忆和遗忘

            说到记忆我们的根本⽬的让模记住需要的信息基于些信息给出准确的判断佳⽅式把所⾏为影响上下⽂中只要模⾜够能做出准确的判断但我们知语⾔模上下是有限的,且基于语⾔模的原理我们知上下⽂中的内容否则会导致模性能

            当⼈阅读了⽂件后可以直接关闭或切换到其他⽂件⾏后续⼯作这是因为⼈记住了⽂件中的关键内容⽽⾮记住了完整的⽂件内容

            我们则需要⼿动上下⽂中增加关键信息以便让模记住关键信息上下⾜的情况下,保留完整的⽂件内容随着模,上下⽂也开始捉襟⻅肘了时在系统提示词的引导下,会开始试关闭或⼯程主动出发关闭⽂件需要对即将关闭的⽂件次关键信息提取后将关键信息记录到⼀个⼩的备忘录中以实现让模记得刚刚关闭的⽂件中的关键信息我们仍可以借助⼀个subagent来进⾏关键信息提⽽如何判断⽂件的关键信息则由主agent给出当主agent打开⼀个⽂件需要同给出此操作的⽬的subagent基于⽬的⾏关键信息提取

            随着探索的继续备忘录的⼤⼩也到我们需要从上下⽂中真正的删除内容佳⽅式仍然是让模⾃主管理分需要被移除分需要保留但也可以使⽤简单的先先出或者策略

            等⾏

            functioncalling),如:

            1. functioncallfunctionresponse

            2. unctioncallfunctionresponse使

              user:今天天气怎么样
              assistant:function_call getDate
              agent:function_response 2025-12-22
              assistant:function_call getWether 2025-12-22
              agent:function_response 晴天
              assistant:今天是2025-12-22,天气睛

              instruct使

              agent忆。

              使functioncall/response的⽂difftodo

              通过⽅式组织上下⽂可以使得上下⽂保持定⼤⼩内既能够分利⽤上下⽂窗⼝也可以上下⽂快膨胀导致的性能快

              difftodoxml⽂。

                <ide>
                <open_file>文件路径</open_file>
                <todo>待办</todo>
                <note_book>备忘录</note_book>
                </ide>

                ⚠在使⽤chat和模型进⾏交互时,需要将ide内容放⼊system prompt,否则容易被模型遗忘。

                对每

                multi agentsub agentdeep searchdeep search。在的⼯

                图片

                结语

                我看上下⽂⼯程⼀个且不断发展的⼤模的⼯程产由于语⾔模能⼒的⾜⽽出现的种⼯程的妥协随着语⾔模能⼒的增强或许在未来天我们资源

                图片

                团队介绍

                本文作者时兮,来自淘天集团-物流解决方案&电子面单团队。一支专注于商家寄件与电子面单业务研发的技术团队。依托多元业务场景,我们持续探索与迭代技术能力,长期投入稳定性建设,为数百万商家提供稳定可靠的寄件与物流体验,为数亿包裹安全高效流转保驾护航。


                AI 前线

                从像素到字符:GitHub Copilot CLI 动画 ASCII 横幅背后的工程设计

                2026-1-31 19:00:40

                AI 前线

                早报|OpenAI 推出科研写作工具 Prism/Kimi 推出最强开源 Agent 模型/AI 承诺内容有误赔 10 万,首例 AI 幻觉案宣判

                2026-1-31 19:00:55

                0 条回复 A文章作者 M管理员
                  暂无讨论,说说你的看法吧
                个人中心
                购物车
                优惠劵
                今日签到
                有新私信 私信列表
                搜索