CogAgent代码结构详解:inference/finetune/app三大模块功能划分

CogAgent代码结构详解:inference/finetune/app三大模块功能划分

【免费下载链接】CogAgent An open-sourced end-to-end VLM-based GUI Agent 【免费下载链接】CogAgent 项目地址: https://gitcode.com/GitHub_Trending/co/CogAgent

CogAgent作为开源的端到端基于视觉语言模型(VLM)的GUI智能体(Graphical User Interface Agent),其代码结构围绕三大核心模块展开:inference(推理)finetune(微调)app(应用部署)。这三大模块分工明确,分别负责模型的实时交互、定制化训练和生产环境部署,共同构成了CogAgent从研发到落地的完整链路。本文将深入解析每个模块的功能划分、核心文件及典型应用场景,帮助开发者快速掌握项目架构。

整体架构概览

CogAgent的代码结构采用模块化设计,核心目录包括inference/finetune/app/,分别对应推理、微调与应用部署功能。此外,项目根目录包含全局配置文件和文档,assets/目录存储图片资源。

CogAgent功能架构

图1:CogAgent功能架构示意图,展示模型从视觉输入到GUI操作的全流程

模块职责划分

  • inference/:提供命令行与Web界面的交互工具,支持实时屏幕截图分析与GUI操作预测。
  • finetune/:实现模型微调功能,支持多轮对话数据格式与LoRA/SFT等微调策略。
  • app/:提供客户端-服务端部署方案,支持本地GUI自动化控制。

inference/模块:实时交互与推理

inference/模块是CogAgent与用户交互的核心,提供命令行(CLI)和Web两种推理方式,支持输入屏幕截图与任务描述,输出GUI操作指令(如点击、输入文本)。

核心文件解析

  1. cli_demo.py
    命令行交互工具,支持连续对话式任务输入。用户需提供任务描述与屏幕截图路径,模型输出操作步骤并在图片中标注关键区域。

    • 关键功能:
      • draw_boxes_on_image:在截图中绘制红色边框标注操作区域(如按钮、输入框)。
      • 支持多轮历史记录拼接,通过history_step维护操作序列。
    • 使用示例:
      python inference/cli_demo.py --model_dir THUDM/cogagent-9b-20241220 --platform "Mac" --output_image_path ./results
      
  2. web_demo.py
    基于Gradio的Web交互界面,支持图片上传、任务输入与实时操作可视化。相比CLI版本,Web界面更直观,适合演示与调试。

    • 关键功能:
      • 实时流输出(TextIteratorStreamer):边生成边展示操作指令。
      • 操作中断与历史回滚:通过stop_event支持紧急停止,undo_last_round回滚错误步骤。
    • 界面组成:
      • 左侧:截图上传区与任务输入框
      • 右侧:标注后截图显示区
      • 底部:操作历史与控制按钮

Web Demo界面

图2:inference/web_demo.py运行界面,右下角为客户端控制图标

技术特性

  • 多格式输出:支持status_action_op_sensitive(状态-动作-操作-敏感度)等5种输出格式,通过format_key参数切换。
  • 量化支持:代码中预留INT4/INT8量化选项(默认BF16精度),可通过注释启用以降低显存占用。
  • 跨平台兼容:通过--platform参数指定操作系统(如"Mac"、"WIN"),适配不同GUI布局。

finetune/模块:定制化模型训练

finetune/模块提供模型微调功能,支持基于自定义数据优化GUI操作能力,适用于特定场景(如企业内部软件自动化)的定制需求。

数据格式与配置

  1. 多轮对话数据格式
    微调数据需遵循特定JSON格式,包含用户任务、历史操作与图片路径。例如:

    {
      "messages": [
        {
          "role": "user",
          "content": "Task: 开启“显示器具有单独空间”选项\nHistory steps: ...",
          "image": "images/0000000000336.png"
        },
        {
          "role": "assistant",
          "content": "Action: 点击“调度中心”板块中的开关按钮\nGrounded Operation:CLICK(box=[[655,842,671,857]]...\n<<一般操作>>"
        }
      ]
    }
    

    注:<<一般操作>>表示操作安全性标签,用于区分敏感操作(如删除文件)与普通操作。

  2. 配置文件
    configs/目录下提供4种配置模板:

    • ds_zero_2.json/ds_zero_3.json:DeepSpeed分布式训练配置,支持多机多卡。
    • lora.yaml/sft.yaml:微调策略配置,包含数据路径、学习率、LoRA参数等。

微调命令与策略

  1. 单机单卡训练

    python finetune.py data/CogAgentData/ THUDM/cogagent-9b-20241220 configs/lora.yaml
    
    • 适用场景:资源有限的开发者,使用LoRA(Low-Rank Adaptation)策略冻结大部分参数,仅训练低秩矩阵。
  2. 分布式训练

    OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=8 finetune.py data/CogAgentData/ THUDM/cogagent-9b-20241220 configs/sft.yaml
    
    • 适用场景:大规模SFT(Supervised Fine-Tuning),需8张A100 GPU(每卡≥60GB显存)。

关键技术点

  • 多轮Loss计算:通过loss_mask区分用户与助手角色,仅计算助手回复的Loss。
  • 断点续训:支持从上次保存的Checkpoint继续训练,通过命令行第四个参数指定(如yes或具体断点编号)。
  • 昇腾设备支持:预留华为昇腾NPU适配代码,需取消torch_npu相关注释。

app/模块:客户端-服务端部署

app/模块提供生产级部署方案,支持将CogAgent部署为服务端,并通过本地客户端实现GUI自动化控制。

部署架构

  1. 服务端(Server)

    • openai_demo.py:模拟OpenAI API格式的推理服务,支持多客户端连接。
      python app/openai_demo.py --model_path THUDM/cogagent-9b-20241220 --host 0.0.0.0 --port 7870
      
    • vllm_openai_server.py:基于vLLM的高性能推理服务,支持高并发请求。
  2. 客户端(Client)

    • client.py:本地控制程序,负责截图捕获、操作执行与权限管理。
      python app/client.py --api_key EMPTY --base_url http://127.0.0.1:7870/v1 --client_name "MyClient"
      
    • 权限配置:需在系统设置中开启截图、录屏与鼠标控制权限(以macOS为例,见图3)。

权限配置 权限配置

图3:macOS权限设置界面,左为录屏权限,右为辅助功能权限

核心功能

  • 实时截图:通过pyautogui库捕获屏幕内容,发送至服务端分析。
  • 操作执行:解析服务端返回的CLICK/TYPE指令,模拟鼠标键盘操作。
  • 安全控制:客户端提供紧急停止按钮,可中断模型操作以避免风险。

模块协同与扩展建议

跨模块数据流

  1. finetune → inference:微调后的模型权重可直接用于inference/模块,通过--model_dir指定本地路径。
  2. inference → appapp/client.py可调用inference/模块的推理逻辑,实现本地化部署(无需独立服务端)。

扩展方向

  • 自定义操作库:在Action_space.md中扩展GUI操作类型(如滑动验证码处理)。
  • 多模态输入:集成语音识别模块,支持语音指令输入(需修改app/client.py的输入处理逻辑)。
  • 任务模板库:在app/目录下添加常见任务模板(如"发送邮件"、"生成报表"),简化用户输入。

总结

CogAgent的三大模块通过职责分离实现了"训练-推理-部署"全链路覆盖:

  • inference/ 聚焦实时交互,提供灵活的用户接口;
  • finetune/ 支持定制化优化,提升特定场景性能;
  • app/ 实现生产级部署,解决权限、并发与安全问题。

开发者可根据需求选择模块组合:普通用户通过inference/体验基础功能,企业用户通过finetune/app/构建专属GUI自动化方案。

官方文档项目首页 | 微调指南 | 部署文档
安全提示:自动化操作存在风险,建议在隔离环境中测试(如虚拟机),并启用客户端紧急停止功能。

【免费下载链接】CogAgent An open-sourced end-to-end VLM-based GUI Agent 【免费下载链接】CogAgent 项目地址: https://gitcode.com/GitHub_Trending/co/CogAgent

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值