openAutoGLM代码解读

得到autoglm开源的消息后,我第一时间去看了他的仓库和代码。

简单来说,9B的模型,可以在很多的家用显卡上跑起来了


写在开头

这一套phone agent的代码较为简单,主要处理了一套简单的上下文拼接(没有压缩!就是单纯的提示词+用户消息+ai+用户)。每一步会去进行截图,并把之前的截图信息去除,拼接在最后。


主入口和流程的解析:

PhoneAgent

首先,这个PhoneAgent类是一个手机自动化助手的大脑。它通过摄像头看手机屏幕,用AI模型理解屏幕上有什么,然后决定要做什么操作,最后通过ADB命令控制手机执行。

初始化函数(init):这是创建助手时的准备工作。它需要两个配置:一个是AI模型的配置(比如模型地址、名称等),另一个是助手自己的配置(比如最多执行多少步、用哪个手机设备等)。它会创建两个帮手:一个负责和AI模型对话(ModelClient),另一个负责执行具体操作(ActionHandler)。还会准备一个空的本子(_context)来记录对话历史,以及一个计数器(_step_count)来记录已经走了多少步。

运行函数(run):这是主要的入口函数。你告诉它一个任务,比如“打开微信给张三发消息”,它就从头开始执行。它会先清空之前的记录,然后执行第一步。如果第一步就完成了任务,就直接返回结果。如果没完成,就继续一步一步执行,直到完成任务或者达到最大步数限制。

单步执行函数(step):这个函数让你可以手动控制,一次只执行一步。如果是第一步,你需要提供任务描述;如果不是第一步,它会继续执行下一步。这就像手动驾驶模式,你可以一步一步看它怎么思考、怎么操作。

重置函数(reset):这个很简单,就是把记录本清空,步数归零,准备开始一个新的任务。

核心执行函数(_execute_step):这是最核心的部分,每次执行一步的具体流程。首先,它会拍一张手机屏幕的照片,看看当前在哪个应用里。然后,它会根据是不是第一步来构建不同的消息:如果是第一步,它会加上系统指令和你的任务要求;如果不是第一步,它只告诉AI当前屏幕信息。接着,它把这条消息(包含图片和文字)发给AI模型,让AI分析。

AI模型会返回两样东西:一个是它的思考过程(比如“现在在桌面,需要先打开微信”),另一个是具体要执行的动作(比如“点击微信图标”)。助手会解析这个动作,然后交给ActionHandler去执行。执行完后,它会更新对话记录:把用户消息里的图片去掉(为了节省空间),然后把AI的思考和动作添加到记录里。最后检查这个动作是不是表示任务完成了,如果是就结束,如果不是就准备下一步。

上下文属性(context):这个就是返回当前的对话记录本,让你看看助手和AI都说了些什么。

步数属性(step_count):这个就是返回已经执行了多少步。

ActionHandler

接下来我来解析ActionHandler文件里每个函数是干什么的。这个文件就像是手机自动化助手的

标签: none

评论已关闭