尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从代码助手到个人助理:Agent、上下文与Token的工程实践

从代码助手到个人助理:Agent、上下文与Token的工程实践 1. 从写代码到管上下文AI 角色迁移的底层逻辑过去两年我身边不少做开发的朋友都经历了一个微妙的心态转变。最开始大家把大模型当成一个高级的代码补全工具写个正则、补个单元测试、解释一段祖传逻辑用完就关。但到了现在越来越多的人开始把 AI 当成一个能持续对话、能记住上下文、能主动推进任务的“个人助理”。这个转变不是产品营销话术而是实实在在发生在日常工作流里的角色迁移。我自己是从去年开始系统性地把 AI 引入日常工作的。一开始只是用来写脚本后来发现真正省时间的不是“生成代码”这个动作本身而是把需求拆解、方案对比、边界条件梳理这些前置思考交给 AI 去跑一遍。再往后我开始让它记住我的项目结构、技术栈偏好、命名习惯甚至是我踩过的坑。这时候它就不再是一个工具而是一个有记忆、有上下文的协作对象。这个迁移背后有三个技术支点在同时发力Agent 架构让模型从“一问一答”变成“多步执行”大模型上下文窗口的扩大让长期记忆成为可能Token 成本的持续下降让高频调用在经济上变得可行。三者缺一不可。少了 AgentAI 只能被动响应少了长上下文每次对话都是重新开始少了成本优势个人开发者根本养不起这种用法。所以这篇文章我想聊的不是“怎么用 AI 写代码”这种老生常谈而是从编程场景切入讲清楚当 AI 从代码助手进化成个人助理时底层发生了什么变化我们在实操中该怎么设计这套系统以及哪些坑是必须提前知道的。适合已经用过基础 AI 编程工具、想往更深层协作方向走的开发者也适合对 Agent 和大模型应用感兴趣但还没动手的人。2. 核心概念拆解Agent、大模型与 Token 的真实关系2.1 Agent 不是更聪明的模型而是会规划的执行者很多人第一次听到 Agent 这个词会下意识觉得它是“更强的 AI”。其实不是。Agent 的本质是一套任务编排机制它把大模型当作推理引擎在外面套上一层循环观察当前状态、决定下一步动作、调用工具执行、拿到结果后再决定下一步。这个循环可以跑很多轮直到任务完成或者触发终止条件。我举个自己实际用过的例子。我让 AI 帮我重构一个老项目的日志模块如果只是普通对话它会直接给我一段重构后的代码。但如果是 Agent 模式它会先读项目结构找到所有调用日志的地方分析依赖关系然后分步骤改每改一步跑一次测试失败了就回退重试。这中间的“读文件”“跑测试”“回退”都是工具调用不是模型本身的能力。这里有个容易混淆的点Agent 和普通对话的区别不在于模型大小而在于有没有工具调用和循环控制。同一个模型套上 Agent 框架之后能做的事情会多出一个量级。这也是为什么热词里“agent开发”“agent框架”“agent是什么”的搜索量一直很高大家真正关心的是怎么把这套循环搭起来。2.2 大模型是推理内核不是知识库我在带新人的时候经常强调一句话不要把大模型当数据库用。它的价值在于推理和生成不在于记住事实。你问它某个 API 的具体参数它可能编一个看起来很合理的答案但你让它根据一段报错日志推断可能的根因它往往能给出很有价值的思路。这个认知直接影响到架构设计。如果你需要精确的事实查询应该走检索增强把相关文档喂给模型让它基于给定材料回答。如果你需要的是方案设计、代码生成、逻辑推理那直接调用模型就行。把这两件事混在一起是很多早期项目效果不好的主要原因。另外大模型的“微调”和“上下文注入”也是两条不同的路。微调适合固定风格的输出、特定领域的术语对齐上下文注入适合动态变化的项目信息。我个人在个人助理场景下更倾向上下文注入因为我的项目信息每天都在变微调的成本和滞后性都太高。2.3 Token 是成本单位也是上下文预算Token 这个概念大家都不陌生但很多人只把它当成计费单位忽略了它同时是上下文预算。一个模型的上下文窗口是有限的你塞进去的历史对话、工具返回结果、系统提示词全部占用 Token。当预算用完要么截断历史要么触发摘要压缩要么直接报错。我在实际使用中总结了一个粗略的分配比例系统提示词占 10%工具定义占 15%历史对话占 30%当前任务相关材料占 45%。这个比例不是固定的但思路是给当前任务留足空间历史对话该压缩就压缩。很多人抱怨 AI 聊着聊着就“失忆”本质上是上下文预算被无关内容占满了。还有一个容易被忽略的点Token 用量和响应质量不是线性关系。塞更多上下文不一定更好无关信息反而会干扰模型判断。我试过把整个项目的代码都塞进去结果模型在回答一个简单问题时绕了一大圈。后来改成按需检索相关文件效果反而更稳。3. 从编程场景切入AI 助理的架构设计思路3.1 为什么编程是 AI 助理的最佳试验场编程场景有几个天然优势让它成为验证 AI 助理架构的理想起点。第一输入输出结构化程度高代码有明确的语法和语义模型容易判断对错。第二反馈闭环短写完跑一下就知道行不行不需要等很久。第三工具生态成熟文件读写、命令执行、版本控制这些操作都有现成的接口。我自己的 AI 助理就是从编程场景长出来的。最开始只是让它帮我写脚本后来加了文件读取能力再后来加了命令执行最后加了记忆模块。每一步扩展都是因为上一个能力不够用了而不是一开始就设计一个大而全的系统。这种渐进式扩展的思路比一上来就搭复杂框架要靠谱得多。3.2 三层架构感知层、决策层、执行层落到具体设计上我把自己的 AI 助理分成三层。感知层负责收集信息包括读文件、查日志、拉取接口返回。决策层是大模型本身负责理解意图、规划步骤、判断下一步。执行层负责实际动作包括写文件、跑命令、发请求。这三层之间通过一个状态对象传递信息。状态对象里包含当前任务描述、已完成步骤、待办步骤、工具返回结果、错误信息。每一轮循环决策层读取状态对象决定下一步动作执行层执行后更新状态对象。这个设计的好处是可追溯任何一步出了问题都能回看当时的状态。注意状态对象不要无限增长每轮循环后要把已经消化的信息压缩成摘要否则上下文很快就会被撑爆。3.3 工具选型够用就好别贪多工具选型上我踩过最大的坑就是贪多。一开始我给助理配了十几个工具文件读写、网络请求、数据库查询、图像处理全都有。结果模型经常选错工具或者在一个简单任务上反复调用不相关的工具。后来砍到五个核心工具准确率立刻上来了。我现在的核心工具集是这样的读文件、写文件、执行命令、搜索代码、记录笔记。这五个覆盖了日常 90% 以上的操作。其他能力通过组合实现比如“查数据库”可以通过“执行命令”调用命令行客户端来完成。工具越少模型的决策空间越小出错概率越低。工具名称用途调用频率注意事项读文件获取代码和配置内容高大文件要分段读写文件生成或修改代码高写前先备份执行命令跑测试、装依赖中限制危险命令搜索代码定位符号和引用中限定搜索范围记录笔记保存跨会话记忆低定期清理过期内容3.4 记忆模块短期靠上下文长期靠外部存储记忆是 AI 助理和普通对话工具最大的区别。我的做法是分两层短期记忆放在上下文里就是最近几轮对话和当前任务状态长期记忆放在外部文件里包括项目结构、技术栈偏好、历史决策记录。长期记忆的写入时机很关键。我一般在这几种情况下写入完成一个完整任务后、做了一个重要技术选型后、踩了一个值得记录的坑之后。写入的内容要精简一条记忆控制在两三句话包含时间、背景、结论。太长的记忆读起来费 Token而且容易过时。读取长期记忆的时机也很讲究。不是每次对话都全量读取而是根据当前任务关键词做匹配。比如当前任务涉及“日志”就只读取和日志相关的历史记忆。这个匹配逻辑可以很简单用关键词包含判断就行不需要上向量检索。4. 实操落地搭建一个能记住上下文的 AI 编程助理4.1 环境准备与基础依赖先说环境。我自己的助理跑在本地用 Python 写的核心依赖就三个大模型 SDK、命令行执行库、文件操作库。不需要复杂的框架一百多行代码就能跑起来。如果你用的是现成的 Agent 框架那更省事但理解底层循环还是有必要的出问题的时候知道去哪查。大模型的选择上我建议先用通用模型跑通流程再根据场景换专用模型。通用模型在推理和工具调用上比较均衡适合起步阶段。等流程稳定了再针对具体任务换更便宜的或者更擅长的模型。不要一上来就纠结模型选型那是优化阶段的事。4.2 核心循环的实现要点核心循环的伪代码大概长这样while not task_done: state build_state(history, tools, memory) action model.decide(state) if action.type tool_call: result execute_tool(action) history.append(result) elif action.type final_answer: task_done True看起来简单但有几个细节决定成败。第一循环上限要设不然模型可能陷入死循环我一般设 20 轮。第二每轮要检查 Token 用量超过阈值就触发摘要压缩。第三工具调用失败要有重试和降级不能一次失败就整个任务挂掉。4.3 上下文管理摘要、检索与压缩上下文管理是这套系统里最容易被低估的部分。我的做法是三级管理最近三轮对话保留原文三到十轮做摘要十轮以上只保留关键结论。摘要用模型生成提示词很简单“用三句话总结这段对话的核心信息和结论”。检索这块我一开始想上向量数据库后来发现没必要。我的项目文件数量不多直接用关键词匹配加文件路径过滤就够了。比如当前任务涉及“用户模块”就只检索路径里包含 user 的文件。这个简单策略在实际使用中命中率很高而且没有额外依赖。压缩的触发时机是 Token 用量达到窗口的 70%。压缩时优先压缩历史对话其次压缩工具返回结果最后才动系统提示词。系统提示词是助理的“人格设定”动它会影响整体行为一致性尽量别碰。4.4 工具调用的安全边界工具调用给了助理很强的能力但也带来了风险。我给自己定了三条规矩。第一写操作前必须备份不管是改文件还是改数据库先留一份原始状态。第二危险命令要拦截删除、格式化、批量修改这类操作必须二次确认。第三网络请求要限域只允许访问白名单里的地址。这些规矩听起来麻烦但真出过一次事故就知道值了。我有一次让助理清理临时文件它理解成了清理整个缓存目录差点把依赖包删了。幸好有备份恢复花了十分钟。从那以后所有删除操作我都加了确认步骤。提示安全边界不是限制能力而是让能力可以放心使用。没有边界的自动化用起来提心吊胆反而不敢用。5. 常见问题与排查技巧实录5.1 助理“失忆”了怎么办这是最高频的问题。表现是聊到一半助理突然不记得前面说过的关键信息。原因通常是上下文被截断或者摘要丢信息。排查步骤先看 Token 用量是不是接近窗口上限再看摘要逻辑是不是把关键信息压掉了最后看长期记忆有没有正确写入。我的解决方法是关键信息双写既放在上下文里也写进长期记忆文件。上下文丢了还能从文件里捞回来。另外摘要提示词里明确要求“保留所有技术选型和结论”减少信息损失。5.2 工具调用选错或者反复调用这个问题的根因通常是工具描述不够清晰或者工具数量太多。排查时先看工具描述是不是有歧义比如“读文件”和“搜索代码”如果描述重叠模型就容易混。再看工具数量超过七个就要考虑合并或砍掉。我的经验是给每个工具写清楚“什么时候用”和“什么时候不用”。比如读文件的描述里加上“当需要查看完整文件内容时使用不要用于查找特定符号”。这种负向说明能显著降低误用率。5.3 Token 消耗过快怎么优化Token 消耗快一般有三个来源历史对话太长、工具返回结果太大、系统提示词太啰嗦。优化顺序也是这个顺序。历史对话用摘要压缩工具返回结果只保留关键字段系统提示词精简到最必要的指令。我实测下来光是把工具返回结果从完整 JSON 改成只保留状态码和关键数据Token 消耗就降了四成。系统提示词从五百字压到两百字又降了一成多。这些优化不影响效果纯粹是减少冗余。问题现象可能原因排查方法解决措施助理失忆上下文截断查 Token 用量关键信息双写工具选错描述歧义看工具定义加负向说明Token 消耗快冗余内容多分析用量分布压缩历史与返回循环不终止终止条件缺失看循环日志设轮次上限写操作出错缺少备份查操作记录强制备份机制5.4 多轮任务中途失败怎么恢复长任务跑到一半失败是常事。我的做法是每完成一个子步骤就落盘一次状态包括已完成步骤、当前进度、待办事项。失败后重新启动时先读状态文件从断点继续而不是从头再来。这个机制在跑批量任务时特别有用。我有一次让助理批量重构二十个文件跑到第十五个的时候模型超时了。因为有状态落盘重启后直接从第十六个继续前面十五个的成果都保住了。如果没有这个机制前面十五个就白跑了。5.5 助理输出风格不稳定怎么调风格不稳定通常是因为系统提示词不够具体或者历史对话里的风格污染了当前输出。我的做法是在系统提示词里明确写清楚输出格式要求比如“代码块标注语言类型”“解释用短句”“不要用感叹号”。同时在每轮对话开始时把风格要求重新强调一遍。还有一个技巧是用示例锚定风格。在系统提示词里放一两个输入输出示例模型会倾向于模仿示例的风格。这比纯文字描述有效得多尤其是对格式要求比较严格的场景。6. 个人助理的边界与我的实际体会聊了这么多架构和实操最后想说点更个人的体会。AI 助理再强它的价值也取决于你给它多少上下文、多清晰的指令、多合理的工具边界。我见过不少人抱怨 AI 不好用仔细一问要么是提示词写得含糊要么是工具配得乱七八糟要么是根本没做记忆管理。这些问题本质上不是 AI 的问题是使用方式的问题。另一个体会是不要追求全自动。我现在的工作流是 AI 做 80%我做 20% 的关键决策。它负责跑腿、查资料、写初稿我负责判断方向、把关质量、做最终决定。这个比例我觉得挺舒服既省了时间又没有失去控制感。全自动听起来很酷但真出了偏差排查成本比省下的时间高得多。还有一点关于透明性。标题里说“更透明的你”我理解有两层意思。一层是 AI 让工作过程更透明每一步决策都有记录可查。另一层是你自己得更透明地面对 AI把你的偏好、习惯、踩过的坑都告诉它它才能真正帮到你。藏着掖着它就只能给你泛泛的答案。这套东西我还在持续迭代最近在试的是把多轮任务的中间结果做成可视化面板方便回看和调试。等跑顺了再找机会聊。如果你也在搭自己的 AI 助理建议从最小的循环开始跑通了再加能力别一上来就搞大框架。
返回列表