
三个月前我把一个内部客服型的 AI Agent 部署上线专门处理公司员工的各种IT服务请求——密码重置、邮箱退信排查、软件安装审批、会议室设备报修。头两周跑得很顺第三周问题出现了公司换了邮件网关旧网关的所有排障动作全部失效员工反馈的“邮箱退信”工单开始大量堆积。我当时的第一个反应是“要不微调一下模型”但认真一算这个需求根本做不过来规则每周都在变每次微调要准备数据、训练、评测、灰度上线周期至少三五天而且每次微调都可能让模型在其他任务上表现退化。后来我换了个思路不再去动模型权重而是把Agent改造成一个“权重不变、外围可变”的架构让它在运行过程中自己积累经验、沉淀技能、自我更新。这套架构跑了两个月模型权重一次没动过Agent的工单解决率反而从61%稳定爬到了87%。这篇文章就把这套东西完整拆开讲讲“不改权重的终身学习”到底怎么落地技能自演进闭环怎么设计以及我在真实项目中踩过的坑。这个内容适合谁看如果你正在做 Agent 类产品被“模型不更新导致能力老化”困扰或者你想让 Agent 具备在运行中自我成长的能力又不想陷入“微调-评估-上线”的无限循环这篇文章应该能给你一个经过验证的参考方案。1. 先想清楚为什么“不动权重”反而是Agent长期可用的前提很多人一提到“让Agent终身学习”第一反应就是微调或者持续预训练。这个直觉可以理解毕竟模型是Agent的“大脑”大脑不更新能力怎么能成长但实际做过生产环境的人会很快发现微调路线在Agent场景里有几个绕不开的硬伤。1.1 微调路线的三个死穴知识新鲜度、任务漂移、成本回归第一个死穴是知识新鲜度。大模型的训练语料有截止日期而你部署Agent之后面对的业务规则是持续变化的。拿我那个IT服务Agent举例公司的邮箱网关从A厂商换成B厂商退信错误码的含义完全不同排障的第一步从“检查A网关队列”变成了“调用B网关的查询接口”。这种变化靠微调根本追不上——等你花几天准备好数据、训完模型业务规则可能又改了。微调本质上是在给模型“补一张期效很短的考卷”考完就过期。第二个死穴是任务漂移。一个Agent在真实环境里会不断碰到训练时没见过的新任务类型。比如员工突然问“我们部门的软件授权还剩几个名额”这既不是排障类任务也不是权限类任务它需要Agent去查询License管理系统。如果Agent只能靠模型权重里的知识来应对面对这种长尾需求就必然露怯。你不可能为了每个新任务都微调一次模型。第三个死穴是成本回归。微调不只是训练成本还有评估成本和回归风险。每次微调都要准备评测集、跑回归测试、灰度观察稍有疏忽就可能在某个边角任务上“灾难性遗忘”。我见过一个项目微调之后对话类任务的准确率涨了5个点但代码生成类任务直接跌了十几个点整个团队折腾了两周才回滚。在生产环境里这种风险是很多人不愿意承担的。1.2 “可塑性”不等于“再训练”向人脑学分层适应抛开具体的工程实现我觉得这件事首先得想明白一个认知模型。人脑并不是学一个新技能时就重写一遍全部神经连接而是有一套非常精细的分层适应机制新信息先进海马体变成短期记忆经过反复使用后被固化到皮层具体操作流程会被基底节“程序化”变成不需要深度思考就能执行的自动行为而前额叶负责在行为不符合预期时踩刹车、调策略。把这个结构映射到Agent上就是“核心推理层 可变外围层”的分层架构。核心推理层是模型权重本身负责语言理解、逻辑推理、工具调用的决策这一层冻结不动外围层包括记忆系统、技能库、工作流定义、策略配置这一层在运行中不断迭代。这样做的好处很明显模型的能力边界保持不变但Agent作为一个系统它的行为边界可以不断扩展。一句话总结我的设计哲学模型负责“聪明”系统负责“经验”。权重是模型的长期记忆而Agent的短期记忆、程序性知识、任务策略都应该放在系统层让它们在运行时自由生长。这样既避开了微调的三个死穴又让Agent真正具备了“越用越顺手”的可能。2. 可塑性架构的四大积木记忆仓库、技能手册、工作流沙盒、策略看门狗我设计的可塑性架构底层是模型推理核心权重冻结上层由四大组件构成。下面逐个拆解它们的功能、实现方式和我踩过的设计坑。2.1 记忆仓库情景记忆与语义记忆的分工记忆系统是“不改权重”的第一个关键组件它解决的是“Agent如何记住过去”。我把它分成两类对应人类的两种记忆类型。情景记忆Episodic Memory记录具体的交互过程比如“昨天下午某员工反馈邮箱退信最终是因为附件超过20MB被网关拦截”这类记忆的粒度是事件用于后续的案例检索和技能提炼。语义记忆Semantic Memory记录稳定的知识事实比如“公司邮箱附件上限是20MB”“B网关的退信码SMTP-550表示收件人不存在”这类记忆的粒度是陈述用于在推理时给模型补充背景知识。在实现上我采用向量库加结构化字段的组合方式。情景记忆每条记录包含时间戳、用户角色、任务类型、完整对话轨迹、操作序列、最终结果语义记忆每条记录包含知识主体、谓词、对象、有效期、来源。查询时既走向量相似度检索也可以按部门、任务类型等结构化字段过滤。一个必须强调的细节记忆入库前的“清洗”比检索算法本身更影响效果——如果一段错误的操作结果被当成成功案例存进去后续所有检索到它的会话都会被带偏这就是所谓的“记忆污染”。2.2 技能手册把一次性调用变成可复用的“肌肉记忆”技能库是整个架构里最核心的部分。技能解决的核心问题是Agent不能每次遇到同类问题都从零开始思考它需要把经过验证的解题流程沉淀下来下次直接调用。我把技能定义成一个自包含的JSON结构体核心字段包括技能ID、触发条件、执行计划、所需工具、验证标准、版本状态、适用领域。举个例子沉淀一条“邮箱退信排障”技能后它的执行计划会写成这样先调用退信详情查询工具获取退信原文再根据退信码走不同的分支——若是SMTP-550则查询收件人地址是否存在若是SMTP-552则检查附件大小是否超过20MB若是网关策略拦截则查询发件人IP是否在白名单。模型在推理时看到这台“技能手册”里有匹配项就不用再去思考“该查什么、按什么顺序查”直接按技能模板执行大大降低出错概率和Token消耗。技能库需要配套检索机制我使用“双路召回”一路是LLM根据用户问题和上下文主动从技能库中挑选候选技能另一路是向量相似度检索把用户问题映射成向量到技能库中找语义相近的技能。两路结果做交集和排序取置信度最高的1到3个作为候选交给策略看门狗裁决。2.3 工作流沙盒用编排层隔离临时试错不是所有问题都适合立刻沉淀成技能。有些是真正的新场景Agent也拿不准该怎么处理这时候就需要一个“临时工作区”让Agent在里面自由组合工具、尝试多步操作——这就是工作流沙盒。沙盒里的执行逻辑用DAG有向无环图描述节点是工具调用或LLM推理步骤边是执行顺序和条件分支。Agent可以在沙盒里实验各种工具组合观察每一步的输出是否符合预期。为什么叫“沙盒”因为这里允许犯错失败的操作不会污染正式技能库。一旦某次沙盒实验被后续验证为有效我们就可以把整条DAG从“临时草稿”提升为正式技能模板完成从“试错”到“可复用”的转化。沙盒的存在让Agent具备了“探索能力”这是技能自演进的土壤。必须强调沙盒本身要有副驾驶机制——关键节点需要人工确认或策略审批不能完全撒手让Agent在无人监管下自由操作高风险系统。2.4 策略看门狗不变权重怎么约束行为边界既然模型权重冻结了怎么保证Agent在不断变化的技能库和记忆的“喂养”下不越界这就是策略看门狗的职责。它是一个独立的规则引擎不依赖模型和技能库专门负责检查两件事行为是否在授权范围内技能调用是否经过验证。所有技能在真正执行前都要过一遍看门狗的规则校验。我在看门狗里维护了一张“权限矩阵”什么角色能访问哪些工具、哪些操作需要额外审批、哪些敏感操作必须在特定时间段执行。比如员工密码重置技能是被授权的但批量重置部门账号的技能只允许管理员角色发起并且必须走审批流程。看门狗还维护“黑名单技能”和“降级技能列表”一旦某个技能连续失败达到阈值看门狗会强制降级该技能下次Agent就不会再调用它。这是整个架构里唯一不以学习为导向、以安全为优先的模块权重不变的情况下它是可靠的安全底线。3. 技能自演进的完整闭环从一次偶然成功到永久技能这一节是整个架构的“灵魂”。技能不能靠人手工编写——那就又回到传统规则系统的老路了技能也不能由Agent自由生成——那会产生大量无效甚至有害的“伪技能”。我用的方案是一个四段式闭环捕获触发、拆解泛化、验证灰度、沉淀淘汰。3.1 捕获触发在什么时机采集“有效行为”捕获是闭环的起点。在系统运行过程中并不是每一次对话都值得沉淀成技能我们只采集两类事件。第一类是“高价值成功事件”Agent完成了一个之前从未处理过的新任务类型并且最终结果被用户明确确认满意第二类是“修复事件”Agent在沙盒里经历了多次失败后最终找到正确路径完成了任务。这两种事件都意味着Agent学到了一些原本不在技能库里的东西。如何识别这类事件我设计了一个主动记录的钩子在Agent执行轨迹中加入“事件评估点”。当流程结束时系统会检查三个指标——任务是否完成结果状态、是否多步操作超过三个节点具备技能价值、新场景度评分是否超过阈值和已有技能库的语义相似度低于某个值。三个条件都满足就把整个轨迹打包送进“技能提炼队列”。注意用户的一句“谢谢”不能直接作为成功标志太容易被讨好型输出误导必须结合任务状态的客观评估。3.2 拆解与泛化把轨迹压成带参数的技能模板拿到一条高价值轨迹后接下来要做的是“拆解”。原始轨迹里混着大量会话噪音——用户抱怨、来回澄清、无效分支——要把里面真正有效的操作序列提炼出来。我是用另一套独立的提炼模型也可以用更好的通用模型来完成配合规则过滤去掉纯闲聊节点只保留工具调用节点和关键决策节点并对长段推理文本做摘要压缩。泛化是更关键的一步。轨迹里的具体参数必须被替换成占位符。比如“把张三的账号在AD里解锁”应该泛化成“把{用户}的账号在{目录服务}里解锁”否则技能只能服务这一个具体场景。泛化处理我坚持半自动模型做初步参数识别再由人工或规则引擎审核一遍参数边界把哪些字段可以变量化、哪些必须是常量都写入技能模板的“参数约束”字段里。这一步做不好技能就会过拟合换个场景就废。3.3 验证与灰度新技能必须先过“模拟考”新技能不能直接进入正式库它先进入“草稿区”并打上“待验证”标签。我会在历史工单里抽一批同类型任务作为测试集让Agent执行这个草稿技能计算技能成功率。如果一个技能在测试集上的首次成功率能达到80%以上才被允许进入灰度区。灰度区的技能在执行时仍然会被看门狗标记为“低置信度”并且每次执行都会要求用户做额外的结果确认“这是我根据新学到的流程自动处理的请确认结果是否正确”。这种做法既积累了更多真实反馈又避免一个新技能在无人监督的情况下出大事故。当一个灰度技能在真实环境里连续成功20次以上阈值可以逐步降低最后转正进入正式技能库。3.4 沉淀、版本化与淘汰技能库不是藏宝阁而是一个需要持续清理的花园。我会为每个技能维护调用次数、成功率、平均耗时和最近成功时间四项指标。如果一个技能被调用但成功率持续低于60%系统会将它自动降级回灰度区并提醒维护者如果超过30天没有被调用且没有关联的任务类型匹配就进入待删除名单由人工确认后清理。版本化同样重要。业务规则变化会导致旧技能失效但我们不能直接把旧技能删掉因为可能还有历史工单需要回溯。我采用的方案是给技能加“版本链”每次修改技能都生成新版本旧版本标记为“已归档”不再用于新任务但保留在库里供审计和回滚。在一次邮件网关切换事件中旧版排障技能被归档新版排障技能的触发条件里加上了“网关类型B”的约束条件Agent在切换后的第二天就学会了走新流程——整个过程模型权重零改动。4. 落地过程中的五个隐蔽坑与我的处理方式理论设定讲完说点更实际的。这套系统我在开发环境和生产环境跑了两个月前前后后踩了不少坑挑五个最隐蔽、最容易被忽略的分享出来。4.1 坑一技能检索比技能执行更容易让系统变笨你可能会觉得技能库有了挑个合适的技能执行不就行了实际上大部分返工都发生在“检索”这一步。技能检索的意图匹配非常容易出错——员工问“邮件发不出去”技能库里可能有五六个技能都沾点边如果召回错了哪怕技能本身执行得再漂亮结果也是错上加错。我的解法是“检索结果排序”和“执行前自检”两道保险。排序阶段不仅看语义相似度还看历史匹配率——这个技能在过去类似查询下最终解决率如何执行前自检阶段让模型在调用技能前用一句话复述“我选择了技能X因为用户问题匹配了条件Y”再由策略看门狗校验“条件Y”和当前上下文的客观事实是否一致。好用的技能如果没有好用的“检索器”等于有个大脑袋但装在了小身子上。4.2 坑二记忆写入把关不严系统开始“复读”记忆系统上线初期我设置了很低的写入门槛结果Agent开始出现“复读机”行为用户问A问题Agent检索到一段语义相似的旧记忆B就把B的答案套出来。一开始还觉得“模型会举一反三了”后来发现不少旧记忆本身就是过期的错误信息Agent越用越偏。修这个问题的思路是给记忆加“保质期”和“来源信用分”。语义记忆每条都有有效期到期自动降权情景记忆的信用分取决于最终反馈一旦某条记忆关联的会话出现“用户明确表示不满意”的负面信号这条记忆的信用分就大幅下调检索排名也相应降低。记忆不是越多越好而是越准越好。4.3 坑三工作流沙盒逃逸危险行为进入生产沙盒的初衷是隔离风险但如果沙盒里的操作走的是真实的工具接口风险并没有被真正隔离。我有一次发现沙盒里某次实验已经触发了真实的邮件发送接口给客户发了一封测试邮件。虽然内容无害但说明沙盒隔离不彻底——“实验环境”和“生产环境”的边界没有做好。改法很直接所有工具调用都要经过统一的“网关接口”网关根据当前上下文判断这是实验模式还是生产模式实验模式下对写操作类工具一律返回模拟数据只有显式标记为生产模式的调用才走真实接口。沙盒可以探索但探索必须不带副作用。4.4 坑四技能模板过拟合换场景就失效我的技能提炼管线早期有一个通病从一条具体轨迹提炼出的技能写死了太多隐含约束。比如某个排障技能的前两步是“检查退信队列”和“查询ID目录”看起来完全正常但技能模板里把这两个操作的顺序写死了后来发现某些场景下应该先查ID目录再查退信队列顺序反了就查不到数据。解决方式是“条件化技能模板”在模板的DAG节点间加入显式的条件边标注什么条件成立时走哪条分支而不是把所有顺序都做成线性依赖。模板的泛化能力要在验证阶段就用多场景测试集来检验而不仅仅是拿提炼用的原始轨迹来回放一个“过拟合的答案”。4.5 坑五缺少度量指标演进成了玄学如果做完了上面所有机制却没有一套度量指标你只能感觉“Agent好像变强了”但说不清强在哪也没法判断哪个环节出了问题。我给这套系统定义了一组核心指标技能覆盖率成功处理的任务类型中有对应技能的比例、技能首次成功率不经过沙盒试错直接一次成功的比例、记忆召回准确率检索出的记忆与当前问题的相关性评分、以及回滚率技能被看门狗强制降级的次数占比。有了这些指标每次架构调整都可以量化验证。比如我调优了技能检索的排序权重就可以对比调整前后“技能首次成功率”的变化。若没有度量体系“技能自演进”就会变成“无监督的賭博”你根本不知道系统哪天会突然变蠢。5. 一套可复用的最小落地配置数据结构、伪代码与评测最后给出一套可复用的最小配置。下面的数据结构定义和伪代码都是我在这套架构里实际跑过的版本你可以直接参考改造成自己的项目。我尽量给出具体字段和参数而不是停留在概念层。5.1 四大数据表的物理结构技能表、记忆表、沙盒实验表、权限规则表是最核心的四个存储结构。下面用简化结构表示出来。# 技能库主表Skill Library class SkillRecord: skill_id: str # 唯一标识 name: str # 技能名称 description: str # 技能用途说明用于语义检索 trigger_conditions: list # 触发条件列表如 [退信码 SMTP-550] execution_plan: str # DAG结构化执行计划一般存JSON required_tools: list # 需要的工具列表 version: int # 当前版本号 status: str # 枚举draft - sandbox - grayscale - active - deprecated confidence: float # 灰度/正式置信度阈值0.8 success_count: int # 成功次数 fail_count: int # 失败次数 last_success_time: str created_at: str # 记忆表Memory Store class MemoryRecord: memory_id: str memory_type: str # episodic | semantic content: str # 记忆正文 embedding_vector: list # 向量索引 expiration_date: str # 有效期 source_credit: float # 来源信用分 feedback_signal: str # 正面/负面反馈 domain: str # 适用领域如 email_troubleshoot # 沙盒实验表Sandbox Experiment class SandboxExperiment: exp_id: str related_trace: str # 来源轨迹ID dag_definition: str # DAG定义 status: str # running | success | failed verified_flag: bool # 是否通过验证 result_summary: str created_at: str # 权限规则表Policy Rule class PolicyRule: rule_id: str role: str # 角色如 employee | admin tool_name: str permitted_actions: list # [read, write] 等 requires_approval: bool # 是否需要审批 sandbox_only: bool # 是否仅限沙盒 blacklist: bool # 是否命中黑名单具体运行时的策略技能从沙盒转正本质上就是在trace实验表里回放一次然后把执行计划从沙盒DAG拷贝到正式技能表的execution_plan字段里同时生成一条新的权限规则把该技能所需的工具绑定到授权角色。5.2 核心决策流程的伪代码下面是Agent在收到用户问题后经过记忆召回、技能召回、看门狗校验、执行、反馈回收的主流程伪代码用Python风格表达方便你对应着实现。def handle_user_request(user_input, user_role, context): # 阶段一记忆召回 relevant_memories memory_store.recall( queryuser_input, domaincontext.domain, limit5, min_credit0.6, # 过滤过期expiration_date now ) # 阶段二技能召回双路召回 llm_recall skill_selector.llm_select(user_input, skill_metadata) vec_recall skill_selector.vector_select(user_input, skill_embeddings) candidate_skills intersect_top_k(llm_recall, vec_recall, k3) # 阶段三看门狗校验 allowed_skills [] for skill in candidate_skills: if policy_gatekeeper.check_skill_permission(skill, user_role): allowed_skills.append(skill) # 阶段四执行决策 if allowed_skills: skill rank_by_historical_success(allowed_skills) if skill.status active: result executor.run_skill(skill, context) elif skill.status grayscale: # 灰度技能额外确认 result executor.run_skill(skill, context, require_user_confirmTrue) else: result executor.run_sandbox(skill.execution_plan, context) # 自动进入沙盒实验 sandbox_experiment.create(related_tracecontext.trace_id, ...) else: # 无匹配技能走沙盒探索 result explorer.run_freeform_with_sandbox(context) # 阶段五反馈回收与触发演进 event_evaluator.evaluate( trace_idcontext.trace_id, task_resultresult, memory_recallrelevant_memories, skill_candidatesallowed_skills, ) return format_response(result)需要特别说明的是LLM在整个流程中的角色不是被抛弃而是嵌在skill_selector.llm_select和explorer.run_freeform_with_sandbox这两个环节里——前者做意图理解后者处理真正的新场景。权重冻结不影响这两个环节发挥作用因为LLM负责的始终是“理解与推理”而“经验与流程”都在外围数据层增长。5.3 评估这套系统的四张仪表盘落地离不开数据反馈我把四张关键指标表放在这里你可以在项目的监控面板里直接照抄。目标是每项指标都能回答一个“到底行不行”的问题。指标名称计算方式我的建议阈值作用技能覆盖率成功处理的任务类型中命中技能库的比例≥70%衡量技能库积累是否跟上需求变化技能首次成功率调用技能后不做沙盒试错直接成功的比例≥80%衡量技能检索和模板质量记忆召回准确率人工抽检检索结果的相关性评分≥75%衡量记忆清洗与检索质量技能回滚率被看门狗降级退回的技能数 / 技能总数≤5%衡量技能泛化与质量稳定性四张表之外我还会记录一个“未沉淀事件数”——Agent成功处理了但没有提炼成技能的高价值任务数量。如果这个数字持续增长说明捕获触发条件太苛刻需要放宽如果技能库长期不变但未沉淀事件很多说明技能库已经跟不上业务了。这套指标不是一次性建好就不管了我每个月都会重新校准一次阈值因为Agent的技能库在长大阈值也应该跟着动态变化否则度量就会失真。写到这里整个“不改权重、终身学习”的架构就基本拆完了。它不是一个纯理论模型而是我过去两个多月在生产环境里一点点调试出来的组合方案。我个人体会最深的一点是Agent的能力边界并不等于模型的参数边界把记忆、技能、策略这些外围系统做好完全可以摆脱“成长就要改权重”的思维定式。如果你准备在自己项目里尝试这套架构我建议先从“一个业务域的技能库闭环”开始别一上来就铺全套记忆系统。先种一小块地把水浇透再考虑扩大规模。最后再分享一个小技巧给技能库加一条“触发条件解释字段”——每次技能被选中时都让系统记录一句“为什么选它”。积累一个月后回看这些解释你会发现很多检索策略的优化线索它们比任何日志分析都来得直接。