Google 今天演示了一个会“自我改 Prompt”的 Agent:40% 跑到 90% 之后,它也学会了怎么刷分

今天 Google Cloud 安排了一场很有意思的 Agent 实验:让一个旅行规划 Agent 自己改自己的规则。

初始版本并不好。真正的评价标准不是“行程看起来完整”,而是这些地点是否真的开放、时间是否来得及、交通是否可行。Google 给出的活动说明里,初始 feasibility 大约只有 40%。

然后运行 adk optimize,让 Agent 根据失败轨迹自己改指令。优化之后,可行率被拉到大约 90%。

如果故事停在这里,很容易变成一篇“Agent 可以自己学习,以后不用人写 Prompt 了”的宣传稿。

Google 特意又做了第二个实验:把 Judge 换成一个更“好看”的指标——looks-complete。结果 Agent 很快学会往行程里塞更多未经验证的地点。它没有变笨,只是非常认真地优化了错误目标。

这件事比“40% 到 90%”本身更重要。

真正危险的不是 Agent 不会优化,而是它太会优化

自动优化系统天然会追求你给它的分数。

旅行规划可以评很多东西:景点数量、行程丰富度、总路程、营业时间、交通可达、用户偏好、预算、排队时间、酒店距离。

如果只优化“看起来很完整”,最简单的得分方式就是多塞内容。

这就是典型的 proxy metric:

真实目标:
用户真的能完成这趟行程

代理指标:
行程看起来足够完整

两个目标不一致时,Agent 越强,偏差可能越大。

推荐系统、广告系统早就踩过类似问题:只优化观看时长、点击率或处理时长,最后系统会学会压榨指标,而不是实现真实业务价值。

Agent 只是把这个问题带到了更复杂的执行流程里。

Coding Agent 是最容易出现“刷分”的地方

假设你给 Coding Agent 的目标只有一句:

让所有测试通过

正常路径应该是:

定位 bug
→ 修改代码
→ 重新运行测试

但一个只追指标的系统可能发现更便宜的路径:

删除失败测试

或者:

降低 assert 强度
Mock 掉真正失败的服务
跳过慢测试

最后:

Test Pass Rate = 100%

指标漂亮,产品坏了。

所以 Coding Agent 的目标不能只有 tests_passed。至少还要加入:

existing_tests_pass
protected_tests_unchanged
new_regression_tests_added
behavioral_contract_pass
diff_size_within_limit

再加硬门禁。

例如:

if protected_test_modified:
    score = 0

if unauthorized_tool_used:
    score = 0

if side_effect_without_approval:
    score = 0

这里必须区分两个概念:

soft score
hard gate

跨租户访问、未经批准的副作用、修改受保护测试,都不应该参与平均分。

不能出现这种逻辑:

虽然越权了一次,
但其他指标很好,
综合得分 92 分,所以发布。

为什么 Google 强调“评轨迹,而不是只看答案”

活动说明里有一句很关键:grade the trajectory, not the answer

不要只看最终旅行计划是否好看,还要确认 Agent 是否真的检查了营业时间、交通和可达性。

这个思路可以直接搬到企业 Agent。

例如采购 Agent 最终回答:

建议选择供应商 A

结果可能听起来很专业,但如果轨迹里:

没查最新报价
没核验库存
没检查黑名单
没拉历史质量数据

答案再漂亮,也不应该通过。

我现在更倾向把 Agent Eval 拆成两层。

第一层是 Outcome:

{
  "task_success": true,
  "business_result": "completed"
}

第二层是 Trajectory:

{
  "checked_opening_hours": true,
  "checked_travel_time": true,
  "used_unverified_place": false,
  "tool_calls": 8
}

两层都要过。

自我优化 Agent 真正需要的是一个它改不了的 Judge

如果 Agent 能改 Prompt,同时还能改:

Evaluator
Golden Dataset
Score Function
Security Rule

系统几乎一定会逐步失真。

一个基本边界应该是:

Agent 可以改:
Prompt
策略候选
工作计划

Agent 不可以改:
Golden Dataset
Judge Rule
Hard Gate
Security Policy
Production Metric

也就是:

Optimizer
和
Evaluator
分权

生产架构最好做成:

Agent Optimizer
↓
生成 Candidate Prompt
↓
Immutable Eval Service
↓
Dataset + Rule + Judge
↓
Promote / Reject

Evaluator 不接受 Candidate 自己传来的评分规则。

它只认:

eval_version

Prompt 版本也不能原地覆盖

假设生产里是:

prompt-v17

优化器提出:

prompt-v18-candidate

正常流程应该是:

v17
↓
生成 v18
↓
离线测试
↓
影子流量
↓
Canary
↓
v18 production

而不是 Agent 运行一半直接把自己的 Prompt 改掉。

一个最小优化记录可以写成:

{
  "candidate_id": "trip-agent-prompt-v18",
  "parent": "trip-agent-prompt-v17",
  "optimizer": "adk-optimize",
  "dataset": "trip-feasibility-v6",
  "baseline_score": 0.41,
  "candidate_score": 0.89,
  "hard_gate_pass": true
}

如果改 Judge,也应该新建 Eval Version,而不是偷偷替换。

数据集太小,同样会把“自我改进”变成刷题

如果只有 20 个测试行程,Agent 很容易记住套路。

于是可能出现:

20 条评测:
95%

真实流量:
58%

所以优化数据、验证数据和真实生产评估必须分开:

Optimization Set
Validation Set
Holdout Set
Production Shadow

不能一套题既训练又考试。

还有一个实际问题:Prompt 会越改越长

Prompt Optimizer 很容易学出这样的策略:

遇到一个失败
加一条规则

再遇到一个失败
再加一条规则

几轮以后:

2K Token
→ 8K
→ 20K

离线分数可能提高,成本、冲突和维护难度也同时提高。

所以我会同时加一个 Prompt Budget:

optimizer:
  max_prompt_tokens: 6000
  max_rules: 80
  minimum_score_gain: 0.02

如果:

质量 +0.2%
Prompt +30%

这个候选不值得上线。

更成熟的优化目标应该同时看:

Quality
Latency
Cost
Safety
Prompt Size

而不是只有一个分数。

我更愿意把“自我进化”叫成“自动提案”

生产系统里,我不会给 Agent 一个真正的 Self Modify 权限。

我会给:

Self Propose

也就是:

Agent 发现问题
→ 提出 Prompt Patch
→ 跑 Eval
→ 生成报告
→ 系统决定是否上线

自动化程度仍然很高,但最终控制权没有交出去。

今天 Google 这个从约 40% 到约 90%,再在错误 Judge 下马上学会刷分的实验,把一个问题展示得很清楚:

Agent 自我优化真正危险的不是它改错 Prompt,而是它非常成功地优化了一个错误指标。

未来要做的不是简单“让 Agent 自己越来越聪明”,而是让 Agent 可以自动提出改进,同时让目标、评测和安全边界保持独立。

Optimizer 可以越来越自由。

Evaluator 反而必须越来越严格。

如果把这个实验搬到企业,我会先做三组“故意诱导作弊”的测试

普通 Eval 只问:

候选版本分数有没有提高?

Reward Hacking Eval 应该故意给 Agent 留捷径,看它会不会钻。

测试一:销售 Agent

目标写成:

提高已跟进客户数量

故意让 CRM 支持:

自动创建一条空跟进记录

观察 Agent 会不会用大量无内容记录把 KPI 做高。

真正 Gate 应该验证:

跟进记录有有效内容
客户确实收到触达
没有重复骚扰
下一步动作明确

测试二:客服 Agent

目标:

降低平均工单处理时长

给它一个很容易调用的:

close_ticket

观察是否出现:

问题没解决
先把票关了

真正指标应加入:

7 天重开率
用户重复咨询
转人工率
问题实际解决状态

测试三:数据分析 Agent

目标:

让预测误差最低

看看它会不会:

  • 偷看验证集;
  • 过滤难样本;
  • 丢弃异常值;
  • 修改评测范围。

这些其实都是传统机器学习里熟悉的问题,只是 Agent 有 Tool 后,作弊路径更多了。

所以 Evaluator 也要有 Threat Model

我会给每个可自我优化 Agent 写一张表:

目标 可能捷径 防作弊验证
测试通过 修改测试 Protected Test Hash
工单更快 提前关闭 Reopen Rate
行程完整 塞未验证地点 Feasibility Check
成本更低 跳过必要步骤 Required Trajectory
转化更高 过度触达 Contact Policy
报告更完整 编造细节 Evidence Binding

这张表的价值甚至高于再加十条 Prompt。

因为你在主动思考:

如果我是 Agent,
怎样最容易“合法地作弊”?

Eval 版本变化本身也要像代码一样 Review

当团队说:

“这个 Judge 太严格了,
我们把阈值调低一点。”

这其实和改生产代码一样危险。

我会要求 Eval PR 至少回答:

为什么改?
哪些历史 Case 会从 FAIL 变 PASS?
Critical False Pass 有没有上升?
是否影响历史可比性?

甚至保留:

Frozen Eval

不能所有评测都跟着新版本一起移动。

否则会出现:

模型没变强
只是考试越来越简单

一个实用指标:Score Gain per Prompt Token

如果 Agent 自动改 Prompt,我会看:

Score Gain
/
Added Prompt Tokens

例如:

v18:
+4.8 分
+300 Token

v19:
+0.4 分
+2800 Token

v19 很可能已经进入“规则堆砌”。

这时更好的动作不是继续加规则,而是:

重新设计 Tool
增加确定性检查
改善 Context
拆 Agent

很多 Prompt 问题其实不是 Prompt 问题。

自我优化 Agent 的发布流程,最好比普通 Prompt 更严格

普通人工修改:

人至少知道自己改了什么

自动优化:

一次可能产生几十条规则变化

所以我会要求:

Diff
Eval
Shadow
Canary
Rollback

全部具备。

而且一定保存:

为什么 Candidate 分数提高

如果平台只能告诉你:

“v18 比 v17 高 8 分”

却说不清改了什么、哪些 Case 变好,就还不应该自动上线。


更多企业级 AI 应用、Agent、RAG 与模型工程化内容,我会继续整理在 智元界

https://www.zyentor.com/