Open-AutoGLM如何记录操作日志?审计追踪功能实现
Open-AutoGLM – 智谱开源的手机端AI Agent框架,正在重新定义我们与移动设备的交互方式。它不仅让AI能够“看懂”屏幕、理解用户意图,还能自动执行复杂操作流程。但随着自动化能力的增强,一个关键问题浮现:我们如何知道AI做了什么?什么时候做的?为什么这么做?
这正是操作日志和审计追踪功能的核心价值所在。
AutoGLM-Phone 是一个基于视觉语言模型的 AI 手机智能助理框架。它能以多模态方式理解屏幕内容,并通过 ADB 自动操控设备。用户只需用自然语言下指令,如“打开小红书搜美食”,模型即可解析意图、理解界面并自动规划、执行操作流程,无需手动点击。
而 Phone Agent 更进一步,作为一个基于 AutoGLM 构建的完整手机端智能助理系统,它集成了感知、决策、执行与安全机制于一体。系统通过 ADB 控制设备,利用视觉语言模型进行屏幕感知,结合推理引擎生成操作序列。更重要的是,在整个自动化过程中,每一步动作都被精确记录——这是实现可追溯、可审查、可调试的关键。
本文将深入探讨 Open-AutoGLM 是如何设计和实现其操作日志与审计追踪功能的,帮助开发者理解系统的透明性保障机制,并为后续的功能扩展提供参考。
1. 为什么需要操作日志与审计追踪?
在AI代理系统中,尤其是涉及真实设备控制的场景下,操作日志不是附加功能,而是基础安全设施。
1.1 可信执行的前提
当AI代替你打开App、输入信息、甚至完成支付准备时,你必须清楚地知道它“做了什么”。没有日志,就等于把控制权交给一个黑箱。操作日志提供了行为的可见性,让用户或管理员可以回溯整个任务流程。
1.2 故障排查与调试支持
自动化流程可能因界面变化、网络延迟、权限限制等原因失败。如果没有详细的执行记录,排查问题将变得极其困难。日志中包含时间戳、操作类型、目标元素、执行结果等信息,是定位问题的第一手资料。
1.3 安全合规与风险控制
对于企业级应用或敏感操作(如金融类App操作),审计日志是合规要求的一部分。系统需记录谁发起了请求、AI执行了哪些步骤、是否有敏感操作被触发、是否进行了人工干预等,确保所有行为均可追溯。
1.4 用户反馈与体验优化
通过分析日志数据,可以了解AI在哪些环节频繁出错、哪些指令表述不够清晰、哪些App兼容性较差。这些洞察可用于持续优化提示词工程、改进UI识别算法,提升整体用户体验。
2. Open-AutoGLM的日志架构设计
Open-AutoGLM 的日志系统采用分层结构,兼顾性能、可读性和可扩展性。整体分为三个层级:
2.1 日志采集层:从动作到事件
每次AI决定执行一个操作(如点击、滑动、输入文本),都会生成一条结构化事件。这些事件由ActionExecutor模块统一捕获,并附加上下文信息。
class ActionEvent: def __init__(self, action_type, target_element=None, value=None, timestamp=None): self.action_type = action_type # "tap", "input", "swipe", "back" self.target_element = target_element # 元素描述或坐标 self.value = value # 输入值 self.timestamp = timestamp or time.time() self.screenshot_ref = None # 截图文件名(可选)例如,当AI识别到“搜索框”并输入“美食”时,会生成如下事件:
{ "action_type": "input", "target_element": {"text": "搜索", "resource_id": "com.xingredian.app:id/search_input"}, "value": "美食", "timestamp": 1718923456.789, "screenshot_ref": "screen_1718923456.png" }2.2 日志存储层:本地文件 + 可选远程上报
默认情况下,所有操作日志以 JSON Lines 格式保存在本地目录logs/下,每个任务独立成文件,命名规则为task_<timestamp>.log。
每行代表一个事件,便于流式读取和后期处理:
{"action_type":"tap","target_element":{"text":"发现","bounds":[100,200,300,400]},"timestamp":1718923450.123} {"action_type":"input","target_element":{"text":"搜索框"},"value":"美食","timestamp":1718923452.456} {"action_type":"tap","target_element":{"text":"搜索按钮"},"timestamp":1718923454.789}同时,系统预留了LoggerHook接口,支持将日志实时发送至远程服务器(如ELK、Prometheus或自建API),适用于团队协作或集中监控场景。
2.3 日志展示层:结构化输出与可视化支持
除了原始日志文件,Open-AutoGLM 还提供命令行实时输出功能。在运行main.py时,你会看到类似以下的清晰日志流:
[INFO] 2024-06-21 10:17:30 | 视觉识别完成 | 发现元素: '小红书' 图标 [INFO] 2024-06-21 10:17:31 | 执行操作 | 点击坐标 (540, 800) [INFO] 2024-06-21 10:17:33 | 屏幕更新检测 | 应用已启动 [INFO] 2024-06-21 10:17:34 | 执行操作 | 输入文本 "美食" [INFO] 2024-06-21 10:17:36 | 执行操作 | 点击 "搜索" 按钮此外,项目还附带一个简单的 Web 查看器(log_viewer.py),可加载日志文件并配合截图回放操作过程,实现“视频式”审计体验。
3. 关键日志点详解:从指令接收到任务结束
让我们以一条典型指令为例,看看 Open-AutoGLM 是如何全程记录操作轨迹的。
指令:“打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!”
3.1 指令解析阶段日志
系统首先调用大模型进行意图理解,这一过程也会被记录:
{ "stage": "intent_parsing", "raw_input": "打开抖音搜索抖音号为:dycwo11nt61d 的博主并关注他!", "parsed_plan": [ {"step":1,"action":"launch_app","app":"com.ss.android.ugc.aweme"}, {"step":2,"action":"find_element","criteria":"搜索框"}, {"step":3,"action":"input_text","text":"dycwo11nt61d"}, {"step":4,"action":"tap","element":"搜索按钮"}, {"step":5,"action":"tap","element":"用户卡片"}, {"step":6,"action":"tap","element":"关注按钮"} ], "confidence": 0.96 }这类日志帮助开发者判断AI是否正确理解了用户意图。
3.2 执行过程中的详细动作日志
每一步执行都会生成对应的日志条目。以下是部分示例:
启动App
{ "action_type": "launch_app", "package_name": "com.ss.android.ugc.aweme", "timestamp": 1718923500.123, "status": "success" }输入文本
{ "action_type": "input", "target_element": { "text": "搜索", "resource_id": "com.ss.android.ugc.aweme:id/kn" }, "value": "dycwo11nt61d", "timestamp": 1718923505.456, "adb_command": "adb shell input text 'dycwo11nt61d'" }点击关注按钮(含确认机制)
{ "action_type": "tap", "target_element": { "text": "关注", "class": "android.widget.Button" }, "coordinates": [900, 1200], "requires_confirmation": true, "user_approved": true, "timestamp": 1718923520.789 }注意:这里启用了敏感操作确认机制。日志明确记录了该操作需要用户确认,并且用户已批准,增强了安全性。
3.3 异常与重试日志
如果某次点击未生效(如页面未加载完成),系统会尝试重试,并记录全过程:
{ "action_type": "tap", "target_element": {"text": "搜索"}, "attempt": 1, "result": "failed", "error": "element not found", "retry_after": 2.0, "timestamp": 1718923503.111 }随后的重试也会单独记录,形成完整的失败-恢复链条。
4. 如何启用和查看操作日志?
操作日志功能默认开启,无需额外配置。但你可以通过参数调整其行为。
4.1 命令行运行时的日志输出
当你使用main.py执行任务时,日志会实时打印到终端:
python main.py \ --device-id YOUR_DEVICE_ID \ --base-url http://your-server-ip:8800/v1 \ --model "autoglm-phone-9b" \ "打开抖音搜索美食"你将在屏幕上看到清晰的操作流水,包括时间、阶段、动作和状态。
4.2 查看本地日志文件
任务结束后,前往项目根目录下的logs/文件夹:
ls logs/ # 输出示例: # task_1718923450.log使用任何文本编辑器或命令行工具查看内容:
cat logs/task_1718923450.log | jq .建议配合jq工具格式化JSON,便于阅读。
4.3 启用截图关联功能(增强审计)
若希望日志包含截图证据,可在启动时添加--save-screenshots参数:
python main.py \ --device-id YOUR_DEVICE_ID \ --base-url http://your-server-ip:8800/v1 \ --model "autoglm-phone-9b" \ --save-screenshots \ "打开小红书搜索咖啡店"此时,每次操作前后的屏幕截图会被保存在screenshots/目录,并在日志中引用文件名,实现“图文并茂”的审计追踪。
5. 高级用法:自定义日志处理器与远程审计
对于企业部署或团队开发,Open-AutoGLM 支持扩展日志行为。
5.1 注册自定义日志钩子
你可以在代码中注册回调函数,监听所有日志事件:
from phone_agent.logger import register_log_hook def my_audit_handler(event): print(f"[AUDIT] {event['action_type']} on {event.get('target_element', {})}") # 可在此处发送到企业内部系统 send_to_slack(event) register_log_hook(my_audit_handler)5.2 集成到集中式日志平台
通过编写适配器,可将日志转发至主流系统:
| 平台 | 实现方式 |
|---|---|
| ELK Stack | 使用 Logstash 接收 JSON 日志 |
| Prometheus | 暴露指标接口统计成功率 |
| Sentry | 错误日志自动上报 |
| 自建API | 调用 webhook 发送 POST 请求 |
示例:向远程API推送日志
import requests def remote_logger(event): try: requests.post("https://your-audit-api.com/logs", json=event, timeout=2) except Exception as e: print(f"Failed to send log: {e}") register_log_hook(remote_logger)6. 总结
Open-AutoGLM 不只是一个能“动”的AI助手,更是一个可审计、可信任、可追溯的自动化系统。其操作日志与审计追踪功能贯穿于从指令解析到动作执行的每一个环节,提供了以下核心价值:
- 透明性:每一项操作都有据可查,打破AI黑箱。
- 可调试性:失败流程可通过日志快速定位原因。
- 安全性:敏感操作需确认,且全程留痕。
- 可扩展性:支持本地存储与远程上报,适应不同部署需求。
无论是个人用户想了解AI替自己做了什么,还是企业需要满足合规要求,这套日志体系都提供了坚实的基础。
未来,随着更多应用场景落地(如自动化测试、远程客服、无障碍辅助等),完善的审计能力将成为AI Agent走向生产环境的必备条件。而 Open-AutoGLM 已经走在了前面。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。