今天所见
今天看了一个库,说是用来解决llm连接现实的agent,也就是rpa的网页增强。其实我之前也想写,但是写到一半我看到别人也在写,我就停下来了,然后看看别人怎么写的。
这个库是https://github.com/web-arena-x/webarena计算机世界第一的大佬写的。阅读框架我比较不喜欢亲自去,麻烦,虽然那样可以让你理解代码的架构,加深不同人编写代码的思路,但是我选择偷懒。
分析代码
于是我加载了我的小工具,直接上llm
问题: 请你一步步思考分析告诉我这套代码实现的逻辑和思路
答案: 这套代码实现了一个基于浏览器的智能代理系统,主要包含以下几个方面:
1. 环境设置和初始化:
- 定义了各种网站的URL和账号信息,为后续操作做准备。
- 生成了测试数据,并将其保存为JSON格式的配置文件。
- 初始化了浏览器环境,包括设置无头模式、缓慢模式、观察类型、视口大小等参数。
2. 动作定义和执行:
- 定义了各种浏览器操作动作,如点击、输入、滚动、切换标签页等,并提供了创建这些动作的函数。
- 实现了一个执行动作的函数,根据动作类型调用相应的底层函数来执行动作。
3. 观察处理和解析:
- 定义了两种观察类型:HTML和无障碍树(Accessibility Tree)。
- 实现了从页面获取观察信息的函数,包括解析HTML、解析无障碍树等。
- 将观察信息转换为结构化的数据格式,方便后续处理。
4. 代理Agent的实现:
- 定义了三种Agent:TeacherForcingAgent、PromptAgent和Agent。
- TeacherForcingAgent根据预定义的动作序列执行操作。
- PromptAgent根据提示信息生成动作,并使用语言模型进行预测。
- Agent是一个抽象基类,定义了Agent的通用接口。
5. 评估和渲染:
- 实现了多种评估器,如StringEvaluator、URLEvaluator和HTMLContentEvaluator,用于评估Agent的执行结果。
- 实现了一个RenderHelper类,用于将Agent的执行过程和结果渲染到HTML页面中,方便查看和调试。
总的来说,这套代码实现了一个可配置、可扩展的浏览器自动化系统,包括环境设置、动作定义、观察处理、Agent实现和结果评估等多个模块。它为开发基于浏览器的智能代理系统提供了一个良好的基础框架。
问题: 这样是不是意味着这套代码必须要有一个脚本库定义好它每一步的操作才可以实现?
答案: 是的,这样的设计确实意味着这套代码需要有一个预定义的脚本库来指定每一步的操作。具体来说:
1. 这个系统使用了一个"Action"对象来表示每一个可执行的操作,比如点击、输入文本、滚动等。这些操作都被定义在一个专门的"actions.py"模块中。
2. 在运行过程中,代码会根据预先定义好的操作序列来执行相应的动作。这些操作序列可能来自于一个配置文件,或者是由一个"Agent"组件动态生成的。
3. 这种基于预定义动作的设计方式,使得系统可以更好地控制和追踪每一步的操作,从而实现更精细的行为控制和评估。但同时也意味着需要提前定义好所有可能的操作,增加了开发的复杂度。
总的来说,这种基于预定义动作的设计方式适合于需要精细控制和评估的自动化任务,但也增加了系统的复杂性。开发者需要在灵活性和可控性之间权衡取舍。
问题: 它是有llm来生成这些操作的每一步的指令吗
答案: 是的,这个代码中使用了语言模型(LLM)来生成每一步的操作指令。具体来说:
1. 代码中定义了一个PromptAgent类,它使用了一个PromptConstructor来构建输入给LLM的提示。这个提示包含了当前页面的观察信息、用户的目标以及之前执行的操作等。
2. 在PromptAgent的next_action方法中,它会调用LLM来生成下一步的操作,并将其解析成一个Action对象。
3. 这个Action对象包含了具体的操作类型、参数等信息,然后被传递给ScriptBrowserEnv环境来执行。
所以整个流程就是利用LLM来根据当前状态和目标,生成下一步的最佳操作,最终完成整个任务。这种方式可以让代理agent更加灵活地适应不同的场景和任务。
概括
所以它的总逻辑就是:
1.分析你的需求生成对应的prompt来生成具体操作的action,例如click、type等一系列playwright或pypeppter的命令。
2.让浏览器操作智能体来操作,失败后会继续尝试生成prompt来重新生成浏览器指令。
3.结果判断智能体会检查操作是否正确
不足之处
因为我之前想写过,所以我知道这个玩意儿有一个bug,也就是无法解决的问题:llm的上下文大小。
目前这个作者的思路是通过html来让llm判断的,但是llm有的大的,因为要包括动态生成的dom,所以会很大。可能会超过128k或者是200k大小,这个时候这个库就嗝屁了。所以我提问以下问题
问题: 它是如何解决html过大导致llm无法生成指令的
答案: 这个问题主要涉及到两个方面:
1. 观察数据的长度限制:
- 很多语言模型都有输入长度的限制,比如OpenAI的模型最多只能处理2048个token。如果HTML内容过长,超过了模型的最大输入长度,就会导致模型无法正常生成指令。
2. 数据预处理:
- 为了解决这个问题,代码中采取了一些预处理措施:
- 在获取HTML内容时,会检查当前观察数据的长度,如果超过了设定的最大长度,就会对其进行截断。
- 在构建prompt时,也会对观察数据的长度进行限制,确保输入不会超过模型的最大长度。
- 对于一些不重要的节点,也会进行过滤,进一步减少输入数据的长度。
总的来说,这个问题的关键在于合理地管理观察数据的长度,确保它不会超过语言模型的输入限制。通过对数据进行适当的预处理和截断,可以有效地解决这个问题,确保模型能够正常生成指令。
总的来说 好像是无法解决的。
我有一个比它更好的思路:
方案1
1.让用户输入自然语言的步骤,用户是小白,你让它描述这个比让用户写一段click action的脚本方便吧。同时这部分可以继续简化,调用tts来通过让用户说,降低用户的输入和描述成本
2.调用llm来实现解析用户的prompt的意图,生成浏览器的指令,但是要求按照你的预定的格式输出。比如你支持click type 等。选择器可以调教下llm让它实现生成模糊的选择器。然后这部分做成智能体,对选择器s做模糊的递归调用
3.直到成功
这个方案很简单,唯一的缺点就是要让用户用自然语言说一遍具体的操作流程
方案2
1.让用户输入模糊的意图,llm生成流程步骤
2.打开网站,通过截图,然后使用vision llm来识别定位到截图的组件的坐标,浏览器执行坐标的action
3.检查生成的流程是否完成
这个方案用户体验很高,对网站的容错性也很高,啥都可以搞定。缺点就是要反复调试这个可行性
自从有了ai 我觉得我每天一个idea停不下来,在ai世界里 你随便找个点 深入去研究就是一门生意,只要你做的比别人好 就可以了,而且随着ai 的进步,你觉得“你的idea别人也可以想到”一去不复返了。以后会和不会idea差异巨大,我观察了一些应用,如果不是那个应用开源,你再怎么优化真的不知道它如何设计的,你破解了它的prompt也拿不到它全局的设计,加上ai的加持,这种无法知道别人如何设计的无力感很强烈。
你可以参考下当下做搜索的,每个都号称很强,但是看看metaso,很早就做到了别人好几个月都追赶不上的无力感。想象力将成为变现的资源,n人的时代来了。
原文始发于微信公众号(xsser的博客):增强rpa agent webarena分析
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论