本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
构建和评估计算机用途代理的最佳实践
计算机使用代理是循环运行的:它看着屏幕,采取行动,然后再看。以下做法可帮助您构建代理,以更少的步骤和更低的成本可靠地完成任务。它们适用于工作流程和模型系列。结果因工作流程、模型、提示和环境而异,因此请根据自己的任务来衡量每一次变化。
设计动作循环
代理的大部分精力都集中在阅读屏幕和打字上,而不是在窗口之间移动。在调整导航之前,减少读取错误和步骤数。
-
为代理提供文本而不是像素。从屏幕截图中读取确切的值,例如姓名、电子邮件地址和账号,是常见的错误来源。当数据有文本副本时,通过工具提供。对于表或列中的值,也让代理查看图像,因为文本层可能会混淆各列。
-
将说明放在屏幕截图之前。当代理必须找到并单击某项内容时,将指令放在请求中的图像前面,以便代理知道要查找什么。
-
从已知布局开始。在代理运行之前,使用键盘快捷键最大化每个应用程序。一致的布局使重复的流程更具可预测性,并减少滚动。
-
更喜欢键盘。使用键盘快捷键滚动、最大化窗口和打开菜单,尤其是对于小型或难以点击的控件。快捷方式不依赖于在屏幕上找到控件。
-
确认每项操作。繁忙的应用程序可以忽略按键。每次操作后稍等片刻,查看几张最近的屏幕截图,然后让代理重复一个没有效果的操作。
-
仅在安全的地方使用 Tab。Tab 键在纯文本字段中效果很好。点击字段失去焦点时应用程序会做出反应的字段,例如带有自动填充、下拉列表或日期选择器的字段。
-
Switch,不要重新启动。要在正在运行的应用程序之间移动,请使用任务栏或应用程序切换器。重新启动应用程序会增加步骤。
-
在当前屏幕上找到控件。当窗口移动时,从之前的屏幕复制的坐标会过时。仅在最大化的固定布局中使用固定坐标。
-
检测没有任何改变的动作。当连续两个操作使屏幕保持不变时,使用代理变更方法。限制重复滚动,这样跑步就不会将步数预算花在一项操作上。
-
谨慎批量操作。批次仅显示代理上次操作后的屏幕,因此在代理需要阅读的一个屏幕上结束批处理。在依赖批处理之前,先衡量批处理是否可以节省整个工作流程的时间。批量错误仅以文本形式返回,因为某些模型拒绝包含图像的错误结果。
适应模型家族
型号家族对台式机的操作方式有所不同。建立一次代理回路,然后调整每个家庭的技能和设置。为一个家庭调整的技能通常需要先进行更正,然后才能与另一个家庭一起使用。
-
每次更改后发送新的屏幕截图。有些模型会继续根据旧的屏幕截图进行操作,而不会发出任何问题的信号。在每次更改屏幕的操作后附上新的屏幕截图。
-
明确处理坐标。有些模型报告像素坐标,而另一些模型则在必须转换为像素的标准化网格上报告坐标。在提示符中注明屏幕大小和有效坐标范围,并检查每次点击是否在屏幕内。
-
根据模型调整屏幕截图大小。将屏幕截图分辨率与模型的图像限制相匹配。如果您缩小屏幕截图的比例,请在单击之前重新缩放模型的坐标。
-
键入前清除字段。在某些模型上,键入会附加到字段而不是替换其值。聚焦字段,选择全部,删除,键入一次,然后读回值。
-
控制并行工具调用。如果模型无论提示如何都会在一条消息中发送多个操作,请在客户端中关闭并行工具调用。按顺序运行批处理操作,并在第一次失败时停止。
-
默认情况下,将推理工作量保持在较低水平。简单的任务通常以较低的工作量获得成功,而较高的努力会增加成本,而不会提高准确性。加大分支或多步任务的工作量。
-
将提示长度与模型相匹配。更强的模型可以从短期目标起作用。仅在模型需要时添加规则,并随着模型的改进缩短提示。
-
在回合之间继续推理。如果您通过框架或兼容性 API 调用推理模型,请确认该模型的推理从一个回合延续到下一个回合。掉落的循环可能会停滞不前。
-
比较每项完成任务的成本。模型每步使用多少代币不同,因此单靠每个代币的价格并不能预测成本。将模型与计划使用的刀具表面进行比较。
撰写技巧和提示
这项技能,即你向代理人提供的工作流程指令,对准确性和成本有很大影响。设计不当的通用提示音可能比没有提示音更差。
-
包括一些工作规则。例如:记住所读内容,在继续前进之前进行验证,在两次尝试失败后更改方法,等待应用程序响应。
-
提供事实,而不是程序。当前模型需要的分步指导较少。保持技能简短,包括代理无法发现的事实,例如文件路径、字段格式和应用程序怪癖。
-
定义高价值字段。说明诸如标识符和帐号之类的字段的确切格式,并让代理在键入之前根据该格式检查每个值。
-
要求进行有针对性的验证。代理可以完全放心地输入错误的值,因此不要将验证留给代理判断。在键入每个值后立即检查一次,并在保存之前读回几个高值字段。在不提高准确性的情况下,对每个字段进行全面重新检查会增加步骤。
-
更正原处的错误。当值错误时,让代理修复该字段,而不是清除并重新键入整个表单。
-
干净利落地交给子代理。向子代理提供完整的指令,最后要求提供报告,而不是边检查其工作。
-
从自己的跑步中提高技能。查看每次运行的屏幕截图、操作和推理,一次更改一条规则,并且仅在每次运行都成功时才保留更改。将工作流程划分为里程碑,这样您就可以看到失败的运行在哪里停止。
管理背景和成本
成本主要取决于模型的背景和运行中的步骤数。每次通话都会重新发送历史记录,因此每增加一个步骤的成本都比上次更高。降低成本的最有效方法是选择以最少的步骤完成任务的模型和技能。
-
重置任务之间的上下文。从简洁的环境和已知的屏幕状态开始每项独立任务。
-
只保留最近的屏幕截图。保留一些最近的屏幕截图,例如最后三张屏幕截图,并用简短的文字说明替换旧的图像。只保留一张屏幕截图会增加成本,因为代理会向后滚动以查看丢失了什么。
-
告诉代理你删除了什么。解释一下旧的屏幕截图是故意删除的,并让代理在屏幕上显示该值时在回复中记录每个值。
提示缓存可以显著降低成本,但前提是您仔细构建有效负载:
-
仅添加到对话的结尾。缓存从一开始就与有效载荷相匹配,因此对较早的回合进行编辑会使缓存失效。
-
批量删除旧屏幕截图,而不是每轮都移除,这样缓存的前缀在两次删除之间保持不变。
-
不要每回合都重建对话。每回合都会变化的有效载荷使用缓存可能比没有缓存的成本更高。
-
确认缓存已启用。模型具有用于缓存的最小前缀大小,较小的前缀不会被缓存,也不会返回错误。
衡量结果
-
进行足够多的试验。相同运行的结果会有所不同。在得出一个版本更好的结论之前,先进行多次试验,报告价差,并使用统计测试(例如配对测试)。
-
计算每种代币类型的成本。包括新的输入、输出、缓存写入和缓存读取。提供商报告缓存令牌的方式不同,因此请检查每个提供商如何计算缓存令牌。报告代币和成本。
-
用分数报告成本。尽管更改会增加成本,但可以保持相同的成功率。同时报告成功率、成本和步骤,并将跑步及格和失败的成本分开。
-
谨慎设定步数限制。将限制设置在工作流程需求之上,并报告达到该限制的运行次数。用完步骤的运行需要与产生错误结果的运行不同的修复方法。还要设置时间和费用限制,并取消支持。
-
一次改变一件事。将其他所有内容固定不变,这样您就可以看到每次更改的效果。
-
按原因对失败进行排序。将读取屏幕失败与行动失败区分开来。技能可以改善代理的行为,但不能改善模型的读取效果。在将改进归因于规则之前,请检查代理是否遵守了该规则。
-
对结果进行评分,而不是代理的报告。使用自动评估器检查保存的记录和最终屏幕,该评估器要求每个字段都匹配,并包括阴性对照。代理可以将任务报告为已完成。
-
检查您的测试设置。评估器或环境中的错误可能看起来像代理故障。记录所有提示、屏幕截图和操作,以便您可以跟踪失败的运行。不要发布无法重现的结果。
监督和安全
-
让一个人了解情况。要求在相应或难以撤销的操作(例如付款、删除或提交)之前进行确认。将向表单中键入敏感数据视为发送敏感数据。在批量执行每项操作之前检查所需的确认,并在人员批准后再次找到目标,因为屏幕可能已更改。
-
将代理的问题传递给某人。有些模型会自行停下来要求确认,例如当屏幕提示生产系统时。确保你的循环可以向他人显示问题。
-
限制代理可以达到的范围。在隔离的环境中以最低权限运行代理。尽可能将登录凭据放在代理无法访问的地方,并将互联网访问限制在域名允许列表内。
-
将屏幕上的内容视为不可信内容。页面或文档中的文本无法授予权限或更改任务。不要让屏幕上的指令重定向代理。
-
让代理远离开放的网络。将代理需要的信息放入技能中,而不是让它在网上搜索,在那里它可能会遇到验证码和不可信的内容。
相关资源
模型提供者为其模型发布计算机使用指南。他们当前的文档描述了特定模型的细节,例如支持的屏幕尺寸、坐标系和工具。