3.2 决策:模型凭什么选这个动作


文档摘要

3.2 决策:模型凭什么选这个动作 本节摘要:决策拍是一张牌桌:模型拿到的牌是任务目标、历史轨迹、当前情报简报与可用动作清单,出的一张牌就是一个结构化动作(含编号、参数、思考理由)。你在牌桌边有三类旋钮——任务单措辞、动作空间、模型参数。行为漂移时按此顺序排查,十有八九能定位。 决策不是玄学,是一份提示词的函数 很多初学者把智能体的行为当成黑盒抽签,其实每一拍的决策高度确定地依赖于四样输入:任务单怎么写的、此前走过哪几步、现在页面的情报简报长什么样、军械库里登记了哪些动作。模型内部怎么算的你不用管,工程上只要记住一个函数关系:同样的输入给足,决策就稳定;行为漂移,必是四样输入之一变了。上一节查情报拍,这一节查剩下三样。

3.2 决策:模型凭什么选这个动作

本节摘要:决策拍是一张牌桌:模型拿到的牌是任务目标、历史轨迹、当前情报简报与可用动作清单,出的一张牌就是一个结构化动作(含编号、参数、思考理由)。你在牌桌边有三类旋钮——任务单措辞、动作空间、模型参数。行为漂移时按此顺序排查,十有八九能定位。

决策不是玄学,是一份提示词的函数

很多初学者把智能体的行为当成黑盒抽签,其实每一拍的决策高度确定地依赖于四样输入:任务单怎么写的、此前走过哪几步、现在页面的情报简报长什么样、军械库里登记了哪些动作。模型内部怎么算的你不用管,工程上只要记住一个函数关系:同样的输入给足,决策就稳定;行为漂移,必是四样输入之一变了。上一节查情报拍,这一节查剩下三样。

图:决策拍状态机——从四样输入到一张动作牌

图:决策拍状态机——从四样输入到一张动作牌

动作牌的结构与连招

模型的每次决策输出不是一句话,而是一段结构化数据:思考区(为什么这么走)加动作区(做什么、参数是什么)。一个值得知道的设计:一拍可以含多个动作,即连招——"点元素 3,输入关键词,点元素 8"三连发,省掉中间两拍。任务路径明确时连招降本提速;页面易变时连招容易踩空(第二击的编号在第一击后失效,呼应 3.1 的地图换版)。框架无法替你判断该不该连招,这写在任务单里由你引导。

三个旋钮的调法

旋钮一:任务单措辞。措辞是权重最大的旋钮。对比两组实验,同一站点同一目标:

# 措辞 A:目标模糊,产出没约定 task_a = "帮我看看这个网站" # 模型会漫游,几拍都停不下来 # 措辞 B:目标明确,产出可复核 task_b = "找到本月销量第一的商品名,只回答商品名" # 两三拍收兵

旋钮二:动作空间。可用动作越多,模型选错的面越大。若任务全程用不到开新标签页,就别把相关动作喂给它——动作空间是"减少选项=提高选择质量"的少数免费午餐,第 4 章自定义动作时会给出裁剪与扩充的具体代码。

旋钮三:模型参数。温度是头号嫌疑参数。操作类任务的黄金区间在 0 到 0.2:温度一高,决策的随机性放大,绕路、点错、幻觉按钮都会出现。换模型的判断标准同理:操作稳定性优先于聊天的聪明程度,一个听话的普通模型常常胜过一个恃才傲物的旗舰——这在低配场景(本地小模型)尤其明显。

亲眼看一次决策

把每拍的思考理由打印出来,漂移时这就是黑匣子记录仪:

def 黑匣子(state): # 取本拍模型的原始决策记录 last = state.history[-1] if state.history else None if last: print("模型思考:", (last.model_thoughts or "")[:120]) print("所选动作:", last.model_actions) result = agent.run(max_steps=10, on_step_end=黑匣子)

预期输出示意:

模型思考:页面上有两个"登录"字样,索引4是导航栏按钮,索引17是弹窗内链接,先点导航栏的 所选动作: 点击元素 索引 4

读到"模型思考"与你的预期分岔的那一刻,修哪个旋钮就清楚了。

本节要点

  • 决策是四样输入的函数:任务单、历史、情报、动作空间,漂移必有输入变化;
  • 一拍可发连招,省拍但易踩空,路径稳不稳决定敢不敢连;
  • 旋钮优先级:改措辞、裁空间、调参数——参数是最后才动的那个;
  • 每拍思考理由是黑匣子,回调打出来,行为漂移从猜变成读。

任务单改写前后对照表

把 3.2 的旋钮落成可抄的改写模板。左边是常见病句,右边是改法:

病句 病因 改法
"帮我看看这个网站" 无目标无产出 "找到本月销量第一的商品名,只回答商品名"
"点那个按钮" 指代含糊 "点击文本为'提交订单'的按钮(不是'取消订单')"
"把信息都收集一下" 范围发散 "提取表格前五行的名称与价格两列"
"出错的话处理一下" 处理方式未定义 "报错就停止并原样报告错误文案,不要重试"

注意最后一行:显式定义失败行为。默认情况下模型遇错会尝试自救,自救失败再换个法子,几下就烧掉半本预算。在任务单里把失败语义写死(停、报、不重试),复核拍就有了明确的停车线。

连招敢不敢开:一拍多动作的判断

一拍连发多个动作能省步数,但每一击的编号依赖上一击后的页面状态——地图换版问题在连招里被放大。判断标准就一条:**第一击之后的页面是可预测的吗?**可预测(比如"点搜索框、输入关键词、点搜索"三连,中间不产生新页面)就放心连;不可预测(点完弹出广告层、跳转新页)就一拍一动作,让观察拍每步重新画图。省的那两步钱,抵不过一次踩空后的全部重来。

一个关于模型的诚实提醒

同一厂商的模型隔几个月换一代,操作风格就变一次;不同厂商的模型对同一任务单的理解差异更大。所以任务单不要按"某个模型的脾气"来调——按 3.2 的三要素写规范了,换模型只改配置不改文案。凡是"只在某个模型上灵"的任务单,都是埋了雷的。

历史上下文:决策的第三块砝码

四样输入里最容易被忽视的是历史轨迹——模型记得自己走过哪几步。这带来两个工程后果。其一,长任务的决策质量会衰减:轨迹越长,提示词越臃肿,模型对当前页面的注意力被稀释,6.3 里"步数涨、准确率跌"的现象多半源于此。这也是粒度拆解(3.3)的又一重价值:每场小仗的轨迹都是短的,决策质量全程在线。其二,历史里有毒会传染:任务中途的误操作会留在轨迹里影响后续决策,重跑时另起实例而不是续跑旧实例,就是为了让决策不带历史包袱。

给任务单加"阶段划分"是缓解注意力稀释的低成本手段:

阶段一:定位目标商品(只看不点) 阶段二:核对价格与库存(记录数值) 阶段三:汇报(只输出结论)

阶段声明让模型在每一拍都知道"现在这一仗打到哪了",决策的时距感明显变好——尤其适合多阶段流程任务,第二役会用到。

司令选完了牌,下一拍看牌桌裁判:复核怎么判成败、卡住时循环怎么体面收场。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U