1. 从“写代码”到“写规则”:一个正在发生的交付逻辑迁移
“当 Agent 能开发 Agent,我们还在交付什么”——这个问题第一次出现在我脑子里,是去年底一个内部技术评审会上。当时团队里一个做自动化流水线的同学演示了一套自研的多智能体协作框架,其中一个 Agent 负责拆解需求,另一个 Agent 负责生成模块代码,第三个 Agent 负责跑测试并回传修复建议。整个链路跑完,一个中等复杂度的内部工具从需求到可运行版本,只用了不到四十分钟。会议室里安静了几秒,然后有人问了一句:“那我们这些写代码的人,到底在交付什么?”
这个问题听起来有点哲学,但它其实非常具体。它问的不是“程序员会不会被替代”这种老生常谈,而是:当构建软件这件事本身可以被软件部分地完成时,我们作为从业者,手里真正有价值的东西是什么?是代码行数?是架构图?是需求文档?还是某种更底层的东西?
我后来花了大概三个月时间,在自己的项目里反复试验各种 Agent 协作模式,也踩了不少坑。这篇文章就是把这些观察和实操经验整理出来,聊聊当 Agent 开始具备“开发 Agent”的能力时,交付这件事的本质发生了什么变化,以及我们作为一线从业者,应该把精力重新押注在哪些环节上。
这篇文章适合几类人看:正在做 AI 工程化落地的开发者、带技术团队的技术负责人、以及任何对“软件生产方式的下一步”感到好奇的从业者。不需要你已经有很深的 Agent 开发经验,但如果你写过一点自动化脚本、用过至少一种大模型 API,理解起来会更顺畅。
2. 拆解“Agent 开发 Agent”到底在说什么
2.1 三个层次的“自举”,别被概念绕晕
“Agent 开发 Agent”这个说法很容易被过度浪漫化。实际上,根据我这段时间的观察和实操,它至少可以拆成三个完全不同的层次,每个层次的技术难度和交付含义都不一样。
第一个层次是模板化生成。一个 Agent 根据预定义的模板和参数,生成另一个 Agent 的配置文件、提示词结构或者简单的工具调用链。这个层次本质上还是代码生成,只不过生成的目标从“业务代码”变成了“Agent 配置”。我试过用这种方式批量生成数据清洗类的 Agent,每个 Agent 的差异只在于输入输出格式和清洗规则,核心逻辑复用同一套模板。这个层次的技术门槛不高,但已经能省掉大量重复劳动。
第二个层次是反馈驱动的迭代优化。一个 Agent 负责生成另一个 Agent 的初始版本,然后通过测试结果、运行日志或者人工反馈,自动调整后者的提示词、工具选择策略或者决策阈值。这个层次开始涉及真正的闭环优化。我在一个内部客服分流项目里用过类似思路:主 Agent 根据分流准确率,自动调整子 Agent 的分类阈值和兜底策略。实测下来,经过大概两百轮迭代,分流准确率从初始的 73% 提升到了 91% 左右,但中间有几次因为反馈信号设计不当,导致子 Agent 过度拟合了某几类样本,反而把整体效果拉低了。
第三个层次是架构级重构。一个 Agent 不仅能调整另一个 Agent 的参数,还能根据任务复杂度的变化,重新设计后者的工具集、协作拓扑结构甚至通信协议。这个层次目前还处于非常早期的实验阶段,我只在一些研究性质的 demo 里见过,离稳定交付还有相当距离。但它代表的方向很明确:Agent 的“开发”行为正在从参数级向架构级蔓延。
理解这三个层次的区别很重要,因为不同层次对“我们交付什么”这个问题的回答完全不同。第一个层次替代的是重复性配置工作,第二个层次替代的是调参和迭代工作,第三个层次才开始触及架构设计本身。目前真正在生产环境里跑出稳定价值的,主要集中在第一个层次,第二个层次在特定场景下有效,第三个层次基本还在实验室里。
2.2 为什么这件事现在才变得可行
“Agent 开发 Agent”这个概念其实不新,早在几年前就有自动化机器学习、神经架构搜索之类的方向在做类似的事情。但为什么最近一年突然变得特别热?我自己的判断是三个条件同时成熟了。
第一个条件是大模型的代码理解和生成能力跨过了某个阈值。具体来说,当模型能够稳定理解一个中等规模代码库的结构、依赖关系和接口约定时,它才有可能去“开发”另一个 Agent。这个阈值大概在一年前被跨过,表现就是模型在代码补全、跨文件重构、根据自然语言描述生成可运行模块这些任务上的成功率大幅提升。
第二个条件是Agent 运行时的标准化。工具调用协议、上下文管理、记忆机制这些东西,从各家自己造轮子逐渐收敛到一些相对通用的模式。这意味着一件事:一个 Agent 生成的另一个 Agent,更容易被现有的运行时环境直接加载和执行。没有这个标准化,生成的 Agent 就是一堆无法落地的文本。
第三个条件是反馈信号的获取成本大幅下降。以前要让一个 Agent 根据反馈优化另一个 Agent,你得自己搭一套完整的评估流水线,成本很高。现在很多场景下,测试用例、运行日志、用户行为数据都可以比较低成本地转化为结构化的反馈信号。我在一个内部工具项目里,就是直接用单元测试的通过率和代码覆盖率作为反馈信号,驱动主 Agent 调整子 Agent 的代码生成策略,效果比预期好不少。
这三个条件叠加在一起,才让“Agent 开发 Agent”从一个概念演示变成了可以在特定场景下产生实际价值的东西。但注意,我说的是“特定场景”,不是“通用场景”。这个区别后面会详细展开。
2.3 交付物的三次转移:从代码到规则到判断
回到核心问题:当 Agent 能开发 Agent,我们还在交付什么?
我的观察是,交付物正在经历三次转移。第一次转移是从“代码”到“规则”。以前我们交付的是具体的函数、类、模块,现在越来越多的时候,我们交付的是一套规则:Agent 在什么条件下触发什么行为、工具调用的优先级怎么排、异常情况怎么兜底。这些规则本身不是传统意义上的代码,但它们决定了系统的行为边界。
第二次转移是从“规则”到“判断”。规则是可以穷举的,但判断不行。当 Agent 能够自己生成和调整规则时,人的价值就转移到了判断上:判断哪些规则值得生成、判断生成出来的规则是否合理、判断规则之间的冲突怎么取舍。这些判断很难被形式化,但恰恰是交付质量的分水岭。
第三次转移是从“判断”到“品味”。这个词听起来有点虚,但我在实操中越来越感受到它的实在。同样一套 Agent 协作框架,不同的人来设计,产出的系统在稳定性、可维护性、扩展性上差异巨大。这个差异不来自技术能力,而来自一种近乎审美的选择:什么时候该让 Agent 自由发挥,什么时候该加约束;什么时候该追求端到端自动化,什么时候该保留人工介入点。这种品味,目前还没有任何 Agent 能替代。
3. 核心细节:Agent 开发 Agent 的实操要点
3.1 工具选型:别一上来就追求全自动
我在最开始尝试 Agent 开发 Agent 的时候,犯过一个很典型的错误:追求端到端的全自动。就是让一个主 Agent 从需求描述开始,一路生成子 Agent、跑测试、修 bug、再测试,直到产出可交付的版本。听起来很美好,实际跑起来问题一大堆。
最大的问题是错误累积。主 Agent 在第一步对需求的理解偏差,会在后续每一步被放大。子 Agent 生成的代码基于错误的理解,测试用例也基于错误的理解,修复建议还是基于错误的理解。最后产出的东西看起来像模像样,但跟实际需求差了十万八千里。我试过大概十几次全自动流程,真正能直接用的产出不到两次。
后来我调整了策略,改成半自动的检查点模式。具体来说,在几个关键节点设置人工确认:需求拆解完成后确认一次、子 Agent 的接口设计完成后确认一次、第一版可运行代码生成后确认一次。每个检查点不需要人工写代码,只需要判断“方向对不对”。这个调整之后,可用产出率从不到 20% 提升到了 70% 以上。
工具选型上,我的建议是:
- 主 Agent 的模型选择:优先选代码理解能力强、上下文窗口大的模型。因为主 Agent 需要同时理解需求、理解已有代码库、理解子 Agent 的运行反馈,上下文压力很大。
- 子 Agent 的模型选择:可以根据任务类型分化。代码生成类的子 Agent 选代码能力强的,测试生成类的子 Agent 选逻辑严谨的,文档生成类的子 Agent 选语言表达好的。没必要所有子 Agent 都用同一个模型。
- 运行时环境:尽量选支持热加载和沙箱执行的。子 Agent 生成出来之后,需要能快速加载运行,出错了要能隔离,不能把主流程搞崩。
- 反馈信号采集:这个最容易被忽视。我的经验是,在项目一开始就要设计好反馈信号的采集点,不要等到需要优化了才临时加。单元测试通过率、接口调用成功率、响应延迟分布、人工修正频率,这些都是很有价值的反馈信号。
注意:不要因为追求“全自动”而跳过检查点设计。我踩过的最大的坑就是,全自动流程跑出来的东西,排查问题的时间比人工写还长。
3.2 提示词结构:给 Agent 的“开发说明书”怎么写
主 Agent 要开发子 Agent,本质上是通过提示词来传递“开发说明书”。这份说明书的质量,直接决定了子 Agent 的质量。我经过反复调整,总结出一个比较稳定的提示词结构,包含五个部分。
第一部分是角色定义。明确告诉子 Agent 它是什么角色、负责什么类型的任务、边界在哪里。这部分看起来简单,但很多人写得太模糊。比如“你是一个数据处理 Agent”就不如“你是一个负责清洗结构化表格数据的 Agent,输入是 CSV 格式,输出是清洗后的 CSV 格式,不负责数据分析和可视化”来得清晰。
第二部分是工具清单。列出子 Agent 可以调用的工具,每个工具的功能、输入输出格式、调用限制都要写清楚。我试过让子 Agent 自己发现可用工具,结果它经常调用一些不存在或者权限不够的工具,浪费大量 token。后来改成显式列出工具清单,稳定性大幅提升。
第三部分是决策规则。这是最核心的部分,描述子 Agent 在什么情况下做什么决策。我的经验是,规则要尽量具体,避免模糊表述。比如“如果数据质量差就清洗”就不如“如果某列缺失值比例超过 30%,则将该列标记为低质量列,并在输出中附带质量报告”来得可执行。
第四部分是异常处理。明确列出常见的异常情况和对应的处理策略。这部分经常被忽视,但实际运行中异常处理的质量直接决定了系统的稳定性。我一般会要求主 Agent 在生成子 Agent 时,至少覆盖五类异常:输入格式错误、工具调用失败、超时、结果为空、结果置信度低。
第五部分是输出规范。明确子 Agent 的输出格式、字段含义、示例。这部分要尽量用结构化格式,比如 JSON Schema,方便后续的自动化处理。
下面是一个简化版的提示词结构示例,用 Python 字符串模板表示:
SUB_AGENT_PROMPT_TEMPLATE = """ ## 角色 你是一个{role_name},负责{task_description}。 你的边界是:{boundary_description}。 ## 可用工具 {tool_list} ## 决策规则 {decision_rules} ## 异常处理 {exception_handling} ## 输出规范 {output_schema} ## 示例 {examples} """这个模板看起来简单,但每个字段的填充质量差异巨大。我实测下来,决策规则和异常处理这两部分写得好不好,对子 Agent 的实际表现影响最大,大概能解释 60% 以上的效果差异。
3.3 反馈闭环:怎么让主 Agent 知道子 Agent 干得好不好
Agent 开发 Agent 的核心价值在于闭环。没有闭环,主 Agent 生成一次就结束了,跟普通的代码生成没区别。有了闭环,主 Agent 才能根据子 Agent 的实际表现持续优化。
但闭环的设计有几个坑。第一个坑是反馈信号太稀疏。比如你只告诉主 Agent “最终结果对不对”,那它很难知道中间哪一步出了问题。我的做法是,在子 Agent 的每个关键决策点都埋反馈信号。比如工具调用是否成功、决策规则是否被触发、异常处理是否生效,这些都可以作为反馈信号。
第二个坑是反馈信号有噪声。比如单元测试通过率,有时候测试本身写得不好,通过率低不代表代码质量差。我的做法是,对反馈信号做置信度加权。测试通过率的权重取决于测试覆盖率,覆盖率低的测试结果权重也低。
第三个坑是反馈信号导致过拟合。主 Agent 可能会针对某几类反馈信号过度优化,导致子 Agent 在其他场景下表现变差。我的做法是,保留一个独立的验证集,不参与优化,只用来监控整体效果。如果验证集上的表现持续下降,就说明过拟合了,需要调整优化策略。
下面是一个反馈信号采集的简化示例,用表格展示我常用的几类信号和对应的权重计算方式:
| 反馈信号类型 | 采集方式 | 权重计算 | 适用场景 |
|---|---|---|---|
| 单元测试通过率 | 运行测试套件 | 通过率 × 覆盖率 | 代码生成类子 Agent |
| 接口调用成功率 | 运行时埋点 | 成功次数 / 总次数 | 工具调用类子 Agent |
| 人工修正频率 | 人工审核记录 | 1 - 修正次数 / 总次数 | 所有类型 |
| 响应延迟分布 | 运行时埋点 | 基于 P95 延迟的归一化值 | 实时性要求高的场景 |
| 结果置信度 | 模型自评 | 自评置信度的平均值 | 决策类子 Agent |
这张表是我在实际项目中反复调整后形成的,不一定适用于所有场景,但可以作为起点参考。关键是要根据自己项目的实际情况,选择合适的反馈信号组合,并且定期检查信号的有效性。
4. 实操过程:一个完整的 Agent 开发 Agent 案例
4.1 场景选择:为什么从内部工具入手
我选择内部工具作为 Agent 开发 Agent 的试验场景,原因有三个。第一,内部工具的需求相对明确,边界清晰,不容易出现需求理解偏差。第二,内部工具的使用者就是团队成员,反馈信号容易获取,而且质量高。第三,内部工具即使出问题,影响范围可控,不会造成严重后果。
具体场景是一个内部数据报表生成工具。需求是:给定一个数据源和一组报表模板,自动生成日报、周报、月报。这个需求看起来简单,但涉及数据清洗、格式转换、模板填充、异常处理等多个环节,很适合用来试验 Agent 协作。
我设计了一个主 Agent 和三个子 Agent 的架构。主 Agent 负责理解需求、拆解任务、生成子 Agent、收集反馈、迭代优化。三个子 Agent 分别负责数据清洗、格式转换、模板填充。每个子 Agent 都有明确的输入输出规范和异常处理策略。
4.2 主 Agent 的初始化配置
主 Agent 的配置是整个流程的起点。我用的配置结构大概是这样:
MAIN_AGENT_CONFIG = { "role": "报表工具开发协调者", "responsibilities": [ "理解报表生成需求", "拆解为数据清洗、格式转换、模板填充三个子任务", "为每个子任务生成对应的子 Agent 配置", "收集子 Agent 的运行反馈", "根据反馈迭代优化子 Agent 配置" ], "tools": [ "generate_sub_agent_config", "run_sub_agent", "collect_feedback", "update_sub_agent_config" ], "decision_rules": [ "如果子 Agent 的单元测试通过率低于 80%,触发配置优化流程", "如果子 Agent 的接口调用成功率低于 95%,检查工具清单是否合理", "如果人工修正频率超过 10%,重新审视需求拆解是否准确" ], "feedback_signals": [ "sub_agent_test_pass_rate", "sub_agent_api_success_rate", "human_correction_frequency", "end_to_end_latency" ] }这个配置的关键在于决策规则和反馈信号的对应关系。每条决策规则都绑定了一个具体的反馈信号,这样主 Agent 在收集到信号之后,能直接判断是否需要触发优化流程。
4.3 子 Agent 的生成与迭代
子 Agent 的生成过程,本质上是主 Agent 根据任务描述和模板,填充提示词结构,然后加载到运行时环境。我用的生成流程大概分四步。
第一步是任务描述解析。主 Agent 把“数据清洗”这个任务拆解成具体的输入输出规范:输入是原始 CSV,输出是清洗后的 CSV,清洗规则包括缺失值处理、异常值处理、格式统一。这一步的产出是一份结构化的任务描述。
第二步是提示词填充。主 Agent 根据任务描述,填充前面提到的五部分提示词结构。角色定义、工具清单、决策规则、异常处理、输出规范,每一部分都根据任务特点做具体化。
第三步是初始版本生成与测试。子 Agent 生成后,主 Agent 会跑一组预定义的测试用例,收集通过率和失败原因。如果通过率低于阈值,主 Agent 会根据失败原因调整提示词,重新生成。
第四步是上线运行与持续反馈。子 Agent 通过测试后,进入实际运行环境。主 Agent 持续收集运行反馈,定期评估是否需要优化。
我实测下来,一个中等复杂度的子 Agent,从初始生成到稳定运行,大概需要 5 到 8 轮迭代。每轮迭代的时间取决于测试用例的数量和运行环境的响应速度。在我的环境里,一轮迭代大概 3 到 5 分钟,所以整体下来半小时左右能搞定一个子 Agent。
4.4 关键参数的计算与选择
在实操过程中,有几个关键参数需要根据实际情况计算和选择。我拿数据清洗子 Agent 举例说明。
第一个参数是缺失值处理阈值。这个阈值决定了什么情况下删除列、什么情况下填充、什么情况下保留。我的计算方式是:统计历史数据中每列的缺失值比例分布,取 30% 作为删除阈值,取 5% 作为填充阈值。这两个数字不是拍脑袋定的,而是根据历史数据中缺失值比例的实际分布,结合业务对数据完整性的要求,综合确定的。
第二个参数是异常值判定倍数。我用的是 IQR 方法,判定倍数取 1.5 还是 3.0,取决于业务对异常值的敏感程度。报表场景下,我取 3.0,因为报表数据本身波动较大,用 1.5 会误杀太多正常数据。
第三个参数是迭代停止条件。主 Agent 什么时候停止优化子 Agent?我的设置是:连续三轮迭代的测试通过率提升小于 2%,或者人工修正频率低于 5%,就停止优化。这个条件避免了无限迭代,也保证了优化效果。
这些参数的计算过程,我一般会记录在一个配置文档里,方便后续追溯和调整。下面是一个参数记录的示例表格:
| 参数名称 | 取值 | 计算依据 | 调整记录 |
|---|---|---|---|
| 缺失值删除阈值 | 30% | 历史数据缺失比例 P75 分位 | 初始 20%,因误删过多调整为 30% |
| 缺失值填充阈值 | 5% | 业务对完整性的最低要求 | 初始 10%,因填充质量差调整为 5% |
| 异常值判定倍数 | 3.0 | 报表数据波动特征 | 初始 1.5,因误杀过多调整为 3.0 |
| 迭代停止条件 | 提升<2% 或修正<5% | 平衡优化效果与时间成本 | 初始提升<5%,因迭代过少调整为 2% |
这张表是我在实际项目中积累下来的,每个参数的调整都有具体的触发原因。我建议你在做类似项目时,也养成记录参数调整历史的习惯,这对后续排查问题和优化效果非常有帮助。
5. 常见问题与排查技巧实录
5.1 子 Agent 生成出来跑不起来,怎么排查
这是最常见的问题。子 Agent 生成出来之后,加载到运行时环境直接报错,或者跑起来但结果完全不对。我总结了一个排查顺序,基本能覆盖 90% 以上的情况。
第一步,检查提示词结构是否完整。五部分结构里,任何一部分缺失或者格式错误,都可能导致子 Agent 行为异常。我遇到过好几次,主 Agent 生成提示词时漏掉了异常处理部分,结果子 Agent 遇到异常输入直接崩溃。
第二步,检查工具清单是否与实际可用工具匹配。子 Agent 调用了不存在的工具,或者调用了权限不够的工具,都会导致运行失败。我的做法是,在生成子 Agent 之后,先跑一个工具可用性检查,确认所有列出的工具都能正常调用。
第三步,检查输出规范是否与下游兼容。子 Agent 的输出格式如果跟下游处理逻辑不匹配,会导致整个链路断掉。我一般会用 JSON Schema 做校验,确保输出格式符合预期。
第四步,检查决策规则是否有冲突。多条决策规则之间如果存在冲突,子 Agent 的行为会变得不可预测。我的做法是,在生成子 Agent 之后,跑一组边界测试用例,专门测试规则冲突的情况。
下面是一个排查速查表,我平时就贴在工位上:
| 问题现象 | 可能原因 | 排查方法 | 解决方式 |
|---|---|---|---|
| 加载报错 | 提示词结构不完整 | 检查五部分是否齐全 | 补全缺失部分,重新生成 |
| 运行崩溃 | 工具调用失败 | 检查工具清单与可用工具 | 修正工具清单,重新生成 |
| 结果格式错误 | 输出规范不匹配 | 用 JSON Schema 校验 | 调整输出规范,重新生成 |
| 行为不可预测 | 决策规则冲突 | 跑边界测试用例 | 调整规则优先级,重新生成 |
| 效果持续下降 | 反馈信号过拟合 | 检查验证集表现 | 调整反馈权重,增加验证集 |
这张表是我踩了无数坑之后总结出来的,基本上覆盖了我在实操中遇到的大部分问题。当然,实际情况可能更复杂,但按照这个顺序排查,至少能快速定位到问题的大致方向。
5.2 主 Agent 优化方向跑偏了,怎么拉回来
主 Agent 在迭代优化子 Agent 的过程中,有时候会跑偏。具体表现是:子 Agent 在某几类测试用例上表现越来越好,但在其他用例上表现越来越差。这就是典型的过拟合。
我的应对策略是引入独立的验证集。验证集不参与优化,只用来监控整体效果。每次迭代之后,都在验证集上跑一遍,如果验证集上的表现持续下降,就说明过拟合了。这时候需要调整优化策略,比如降低反馈信号的权重、增加反馈信号的多样性、或者直接暂停优化,人工介入调整方向。
另一个策略是设置优化边界。主 Agent 在优化子 Agent 时,不能修改某些核心配置,比如角色定义和输出规范。这些核心配置一旦确定,就作为硬约束,不允许在迭代中修改。这样可以防止主 Agent 为了提升某几类用例的表现,把子 Agent 的核心行为改得面目全非。
我试过这两种策略的组合,效果比较稳定。引入验证集之后,过拟合的情况大概减少了 70% 以上。设置优化边界之后,子 Agent 的核心行为稳定性明显提升。
5.3 人工介入的时机和方式
虽然 Agent 开发 Agent 的目标是减少人工介入,但完全不介入是不现实的。关键是找到合适的介入时机和方式。
我的经验是,在三个时机必须人工介入。第一个时机是需求拆解完成后。主 Agent 对需求的理解是否正确,直接决定了后续所有工作的方向。这个时机的人工介入,成本最低,收益最高。
第二个时机是子 Agent 接口设计完成后。接口设计决定了子 Agent 之间的协作方式,一旦确定,后续修改成本很高。这个时机的人工介入,主要是确认接口的输入输出规范是否合理、异常处理策略是否完备。
第三个时机是第一版可运行代码生成后。这个时机的人工介入,主要是确认整体方向是否正确,不需要逐行审查代码,只需要跑一遍端到端流程,看看结果是否符合预期。
介入方式上,我建议用结构化反馈,而不是自由文本。结构化反馈的好处是,主 Agent 能直接解析并转化为优化信号。比如,不要只说“这里不对”,而是说“数据清洗环节的缺失值处理策略需要调整,当前策略导致 15% 的正常数据被误删”。这种结构化反馈,主 Agent 处理起来效率高很多。
提示:人工介入的频率不是越低越好。我试过完全不加人工介入,结果跑出来的东西完全不能用。也试过每个环节都人工确认,结果效率比人工写还低。找到平衡点很重要,我的经验是每个子 Agent 平均介入 1 到 2 次比较合适。
6. 交付物的重新定义:从代码到判断力
6.1 我们真正在交付什么
回到最初的问题:当 Agent 能开发 Agent,我们还在交付什么?
我的答案是:交付判断力。具体来说,是三种判断力。
第一种是需求判断力。Agent 可以拆解需求,但它不知道哪个需求更重要、哪个需求可以妥协、哪个需求背后有隐藏的业务约束。这些判断需要人的经验和对业务的理解。
第二种是质量判断力。Agent 可以跑测试、收集反馈,但它不知道什么样的质量是可接受的、什么样的质量是不可接受的。这个判断需要人对业务场景的理解和对风险的评估。
第三种是取舍判断力。Agent 可以优化某个指标,但它不知道这个指标的提升是否值得牺牲其他指标。这个判断需要人对整体目标的把握和对优先级的判断。
这三种判断力,目前还没有任何 Agent 能替代。它们不是技术能力,而是经验、直觉和价值观的综合体现。当 Agent 能开发 Agent 时,我们交付的不再是代码本身,而是这些判断力。
6.2 能力结构的调整方向
基于这个判断,我认为一线从业者的能力结构需要做相应调整。具体来说,有三个方向。
第一个方向是从写代码转向写规则。不是说不写代码了,而是说写代码的比重会下降,写规则的比重会上升。规则包括:Agent 的决策规则、异常处理规则、反馈信号的采集和加权规则。这些规则的质量,直接决定了 Agent 系统的质量。
第二个方向是从调参数转向调反馈。以前优化系统,主要是调参数。现在优化 Agent 系统,更多是调反馈信号。反馈信号的设计、采集、加权、验证,这些环节的优化空间比参数调整大得多。
第三个方向是从做功能转向做判断。功能实现会越来越多地被 Agent 承担,人的价值会更多体现在判断上。判断什么该做、什么不该做、什么先做、什么后做、做到什么程度。这些判断的质量,决定了交付的质量。
我自己的调整方式是,把每天的时间重新分配。以前大概 70% 时间写代码,30% 时间做设计和沟通。现在大概 30% 时间写代码,40% 时间设计规则和反馈机制,30% 时间做判断和决策。这个比例还在持续调整中,但方向是明确的。
6.3 一个实用的自检清单
最后分享一个我平时用的自检清单,用来判断自己在 Agent 开发 Agent 的时代,是否还在交付真正有价值的东西。
- 我交付的东西,是 Agent 能自己生成的吗?如果是,那我的价值在哪里?
- 我做的判断,是 Agent 能自己做的吗?如果是,那我需要提升什么判断力?
- 我设计的规则,是 Agent 能自己设计的吗?如果是,那我需要关注什么更高层次的问题?
- 我采集的反馈,是 Agent 能自己采集的吗?如果是,那我需要设计什么更复杂的反馈机制?
- 我解决的问题,是 Agent 能自己解决的吗?如果是,那我需要解决什么更难的问题?
这个清单不一定适用于所有人,但对我来说,它帮助我持续思考自己的价值定位。每次自检,都会发现一些需要调整的地方。这个过程本身,就是在交付判断力。
踩过几次坑之后,我越来越觉得,Agent 开发 Agent 不是要替代我们,而是把我们从重复性劳动中解放出来,让我们去做那些真正需要判断力的事情。交付物的形式在变,但交付的本质没变:解决问题,创造价值。只是解决问题的层次和创造价值的方式,需要重新定义。