← Discover MCPs and Agents
s
AgentAI & MLGitHub

screen-flow-ai-agent

智能截图解析悬浮窗 — 截图 + 多模态大模型 = 即时 AI 回答,基于LangGraph

Links

README

From the repo.

Ai_Flow

Ai_Flow — 智能远程桌面AI助手

远程桌面操控智能体 · ReAct 桌面自动化 · 安全隐私保护


这是什么

Ai_Flow 是一个 Windows 桌面常驻悬浮窗。按下快捷键截取屏幕任意区域,多模态大模型流式解析。也可以直接在输入框打字对话。即快捷键工具+AI 流式对话·ReAct 桌面自动化·手机远程控制·安全隐私保护

内置 ReAct GUI Agent——纯视觉决策引擎,AI 看截图自己决定下一步该点哪里、敲什么。输入自然语言即可自动操作桌面和浏览器:打开软件、搜索网页、填写表单、点击按钮,完全模拟人类操作。支持手机远程控制,手机浏览器扫码即可实时查看 PC 屏幕并发送指令。RAG 驱动的多层记忆系统(检索增强生成)让 AI 记住你是谁、你在做什么项目、你的偏好——BM25+语义双路召回 → RRF 融合 → rerank 精排 → 注入 prompt。安全 Harness 为远程指令提供风险评估、确认门禁、审计追踪和回滚方案,高危操作需手机端二次确认才执行。

  • 纯文本对话 — 悬浮窗底部输入框打字,Enter 发送
  • 截图提问Ctrl+D 连续截图,缩略图累积,点发送统一提交
  • OCR 识别Ctrl+R 截图,腾讯云 OCR 识别返回可复制文字
  • 桌面自动化Ctrl+G 或输入 自动 任务,ReAct Agent 自动操作桌面/浏览器
  • 手机远程控制 — 手机浏览器扫码,实时看截图+发指令+控制 PC
  • 安全 Harness — 远程指令风险评估 + 确认门禁 + 审计追踪 + 回滚方案
  • 语音输入Ctrl+Y 实时语音转文字,滚轮选句子,AI问答

操作演示

悬浮窗常驻桌面,底部随时打字。Ctrl+F 隐藏/显示。

对话

Ctrl+D 进入截图,拖拽松手自动确认变绿,连续多框。Ctrl+Z 撤销。

连续框选 截图

框选完 Enter 放入对话框,缩略图累积,可删除单张。输入文字点发送。

追问

GUI Agent 桌面自动化 — AI 看截图自己决定每一步操作。

GUI Agent

手机远程控制 — 手机浏览器扫码,实时看 PC 屏幕 + 发送指令。

手机远程控制

快捷键

快捷键功能
Ctrl+D截图发送(支持多框连续截图)
Ctrl+ROCR 文字识别
Ctrl+GGUI Agent 桌面自动化弹窗
Ctrl+Y语音识别(实时录音,静默自动断句)
Ctrl+F隐藏/显示悬浮窗
ESC终止当前 GUI Agent 操作
Ctrl+Q退出程序

功能一览

分类功能说明
截图对话常驻悬浮窗启动即显示,可拖拽移动、四角缩放、半透明置顶
连续截图松手自动确认变绿,多框多图同时提交,Ctrl+Z 撤销
缩略图预览截图累积显示在输入框上方,可单独删除
AI 引擎多模态理解豆包 VL,支持多图 + 文字混合输入,最懂中文
流式输出逐字显示,Markdown 渲染(表格 / 代码块 / 标题 / 粗斜体 / 列表)
模型切换mini / lite / pro 三档随时切换,省成本或追求质量
RAG 三层记忆短期 3 轮原文 + 中期 BM25+语义检索 + 长期 FAISS 向量库(Embedding → Retrieve → Rerank → Augment)
GUI 自动化ReAct 循环截图 → AI 看图思考 → 返回动作坐标 → pyautogui 执行 → 再看效果
纯视觉定位模型直接看截图返回归一化坐标 (0-1000),无需 DOM/无障碍 API
15 步循环每步 1.5s 间隔,最多 15 轮,连续 3 次相同动作自动退出防死循环
安全性ESC 立即终止、Alt+F4 等关闭快捷键智能拦截
最终审计完成后用 pro 模型独立判定任务成功/失败
手机远程实时截图每 1.5s 自动推送,降采样 720px + JPEG 50% 省流量
多轮任务子进程常驻模式,手机连续发指令不复启动
多种穿透局域网 IP + Tailscale + ngrok + Cloudflare Tunnel,自动生成二维码
安全 Harness风险评估基于关键词 + 否定句式检测,三级分类(安全/高风险/关键),区分"如何删除"和"删除文件"
确认门禁高风险指令需手机端二次确认;关键指令(支付/转账/格式化)直接拦截阻断
审计追踪JSONL 格式记录每条指令的完整生命周期(风险评估→确认响应→执行路径→结果)
回滚方案高风险操作提供替代方案(回收站删除/先备份再删/取消),一键改写指令
直达命令简单操作(打开QQ/切换到微信/锁屏/关机)绕过 Agent 直接执行,毫秒级响应
RAG 记忆系统Embeddingdoubao-embedding-text-240715 文本向量化,FAISS IndexFlatIP 内积索引
Retrieval三路召回:BM25 关键词 + 语义向量 + jieba 分词关键词
RerankRRF 双路融合 + lightweight rerank 精排,Top-K 注入 prompt
Augment长期记忆:LLM 后台提取事实 → FAISS 语义检索 → System Prompt
语音 & OCR语音输入PyAudio 实时录音 + 腾讯云 ASR,静默 0.8s 自动断句,滚轮选句子
OCR 识别腾讯云 GeneralBasicOCR,1000 次/月免费,批量多区域识别
隐私 & 设置隐私保护防屏幕捕获,截图看不到悬浮窗
即时设置悬浮窗底部按钮,随时配置 API Key / 代理 / OCR 凭证
系统托盘最小化到托盘,右键菜单操作,气泡提示
对话管理侧边栏切换/搜索/重命名/删除对话,多用户按 API Key 隔离

GUI Agent 桌面自动化

输入框输入 自动 你的任务 或用 Ctrl+G 打开任务面板,AI 自动操作桌面。

使用示例

自动 打开百度搜索 Python,然后点进一个网页
自动 打开浏览器进入 B 站搜周杰伦
自动 打开计算器算 123+456
自动 帮我在桌面上新建一个文件夹命名为 test
自动 打开记事本写一段代码

ReAct 工作流程

ReAct Loop (最多 15 步):
  ① 截图全桌面
  ② 发送给豆包 VL → AI 看图思考
  ③ AI 返回: {"done": false, "thought": "看到百度首页...",
               "action": "click", "x": 500, "y": 300}
  ④ 归一化坐标 0-1000 → 像素坐标
  ⑤ pyautogui / MCP 执行动作
  ⑥ sleep 1.5s 等待页面响应
  ⑦ 截图看效果 → 下一步
  ... 循环 ...
  AI 判定完成 → {"done": true, "reason": "已成功打开目标网页"}
  ↓
最终审计 — pro 模型独立验证

核心设计

特性说明
纯视觉定位模型直接看截图返回归一化坐标 (0-1000),pixel = normalized * img_dim / 1000
ReAct 范式每步观察→思考→行动,AI 动态决策,不依赖预定义步骤
20+ 种动作click / double / right / move / drag / fill / hotkey / scroll / type / press / wait / alt_tab / focus_window / open_url / observe_browser / zoom / maximize / read_page / page_up / page_down / multi_scroll / ask_user
鼠标定位三层兜底:pyautogui.moveTo → ctypes SetCursorPos → SendInput (MOUSEEVENTF_ABSOLUTE)
输出校验Pydantic 级 JSON 校验,无效动作/坐标越界自动抛错触发 LLM 重试
安全机制ESC 立即终止、最大 15 步、连续 3 次相同动作自动退出、Alt+F4 智能拦截、动作执行前二次取消检查
进程隔离Agent 跑在独立子进程,崩溃不影响 UI,方便取消和资源回收

手机远程控制

手机浏览器扫码或输入 URL,实时查看 PC 屏幕、发送指令、控制 PC 执行任务。

手机远程控制

连接方式

场景做法手机打开
同 WiFi手机和 PC 同一 WiFihttp://192.168.1.x:8765
手机热点手机开热点 → PC 连接同上(局域网 IP 不变)
Tailscale两台设备装 Tailscalehttp://100.x.x.x:8765
Cloudflare Tunnel自动获取公网 URLhttps://xxx.trycloudflare.com

功能

  • 📸 实时截图 — 每 1.5 秒自动推送,降采样 720px + JPEG 50% 省流量
  • 📝 发送指令 — 输入自然语言任务,和 PC 端 "自动 xxx" 完全一样
  • 🛑 远程取消 — 点取消按钮 = PC 按 ESC
  • 📊 进度日志 — 实时显示 ReAct 每一步的执行状态
  • 🔄 多轮复用 — 子进程保持不退出,连续发指令无需重新初始化浏览器

安全 Harness — 远程控制安全防护

手机远程控制场景下,每条指令都经过多层安全检测,确保危险操作不会静默执行。

架构

手机指令 → 取消/停止? ──→ 直接取消
        → 直达命令?   ──→ 设备端直接执行 (锁屏/关机/截图/休眠)
        → 风险评估 ──→ safe     → 正常发送给 Agent
                    → high     → 手机端弹确认面板 + 替代方案
                    → critical → 直接阻断 (支付/转账/格式化)

风险评估

基于规则引擎的三级分类,内置否定句式检测——区分"如何删除文件"(学习意图)和"删除文件"(危险操作):

级别示例处理
🟢 safe"打开百度"、"搜索Python"直接执行
🟠 high"删除桌面文件"、"卸载软件"手机端弹窗确认 + 替代方案
🔴 critical"转账"、"支付"、"格式化D盘"直接阻断,显示原因

确认面板

高风险指令被拦截后,手机端弹出确认面板:

  • 📋 显示原始指令和风险原因
  • 🔄 提供替代方案(回收站删除 / 先备份 / 取消操作)
  • ⏰ 2 分钟超时自动取消
  • 📝 完整审计记录
手机远程控制

审计日志

每条远控指令以 JSONL 格式记录完整生命周期,线程安全追加写入:

{"id":"a1b2c3","timestamp":"2026-07-27T14:30:00","command_text":"删除桌面文件","risk_level":"high","confirmation_requested":true,"confirmation_response":"confirmed","execution_path":"agent","session_id":"abc123"}
{"id":"d4e5f6","timestamp":"2026-07-27T14:35:00","command_text":"转账100元到xxx","risk_level":"critical","confirmation_requested":true,"confirmation_response":"blocked","execution_path":"blocked","session_id":"abc123"}

直达命令

简单操作不走 Agent,绕过 AI 决策直接执行,毫秒级响应:

  • 锁屏 / 关机 / 休眠 / 重启
  • 截图 / 打开QQ / 切换到微信
  • 音量加 / 音量减 / 静音
  • 亮度+ / 亮度-

含"然后"、"接着"、"帮我把"等复合标记的指令不会被直达系统拦截,自动路由给 Agent 处理。

快速上手

环境要求

  • Windows 10/11
  • Python 3.10+
  • Node.js(可选,浏览器自动化需要 npx

安装

git clone https://github.com/zebinlu7-a11y/screen-flow-ai-agent.git
cd screen-flow-ai-agent
pip install -r requirements.txt

配置

启动后点悬浮窗底部设置按钮(⚙️),填写:

配置项获取地址必填
API Keyconsole.volcengine.com/ark
代理地址http://127.0.0.1:7897,不需要则留空
OCR SecretId/Keyconsole.cloud.tencent.com/cam/capi

启动

python main.py

启动后系统托盘出现图标,悬浮窗自动显示。按 Ctrl+D 开始截图,或在悬浮窗底部直接打字对话。

下载

pyinstaller打包压缩成ZIP,解压双击 Ai_Flow.exe 运行。

架构

┌──────────────────────────────────────────────────────────────┐
│  main.py                        Qt 主进程 + 悬浮窗              │
│  ├─ 对话:   StreamWorker → LangGraph → 豆包 VL 流式输出        │
│  ├─ 自动化: DesktopAgentProcessThread → 子进程 → ReAct Agent  │
│  └─ 远程:   RemoteServer → HTTP API → 安全 Harness → 手机控制  │
├──────────────────────────────────────────────────────────────┤
│  agent/                          AI 核心                       │
│  ├─ gui_agent.py       ReAct Agent + MCP 浏览器 + Loop Engineer│
│  ├─ graph.py           LangGraph 状态机 + 三层记忆检索         │
│  ├─ llm_client.py      豆包 VL ChatModel (OpenAI-compatible)  │
│  ├─ state.py           AgentState 类型定义                     │
│  └─ run_gui_agent.py   自动化子进程 CLI 入口                   │
├──────────────────────────────────────────────────────────────┤
│  gui/                Qt 界面        │  utils/          工具库   │
│  ├─ capture_window.py 截图遮罩      │  ├─ image_tool.py   图片  │
│  ├─ result_window.py  悬浮窗        │  ├─ ocr_tool.py     OCR   │
│  ├─ sidebar_widget.py  侧边栏       │  ├─ speech_worker.py 语音  │
│  ├─ api_key_dialog.py  设置弹窗     │  ├─ memory_store.py 记忆  │
│  ├─ gui_agent_panel.py 任务面板     │  ├─ vector_store.py FAISS │
│  └─ input_widget.py   快捷输入      │  ├─ retrieval_ranker.py  │
│                                      │  ├─ context_store.py    │
│  remote/             手机远程        │  ├─ user_manager.py     │
│  ├─ server.py        HTTP API       │  ├─ api_key_manager.py  │
│  └─ phone.html       手机界面+Harness│  ├─ token_counter.py    │
│                                      │  ├─ risk_engine.py    │
│                                      │  ├─ audit_store.py    │
│                                      │  ├─ rollback.py        │
│                                      │  ├─ direct_commands.py │
│                                      │  ├─ task_router.py    │
│                                      │  └─ app_control.py    │
└──────────────────────────────────────────────────────────────┘

项目结构

AIRAG/
├── main.py                     # Qt 主入口: 悬浮窗 + 热键 + 子进程管理 + 远程服务
├── config.py                   # 全局配置 (API Key / 模型 / 代理 / MCP / 端口)
├── build_exe.py                # PyInstaller 打包脚本
├── requirements.txt            # Python 依赖
│
├── agent/                      # AI Agent 核心
│   ├── state.py                # LangGraph AgentState 类型定义
│   ├── graph.py                # LangGraph 状态机 + 流式对话 + 三层记忆检索
│   ├── llm_client.py           # VL ChatModel (OpenAI-compatible 封装)
│   ├── gui_agent.py            # ReAct GUI Agent + MCP 客户端 + CDP 兜底
│   └── run_gui_agent.py        # GUI Agent 独立子进程 CLI 入口
│
├── gui/                        # Qt 界面
│   ├── capture_window.py       # 全屏截图遮罩 (多框拖拽 + Ctrl+Z + 锚点调整)
│   ├── result_window.py        # 悬浮窗 (Markdown + 流式 + 侧边栏 + 隐私模式)
│   ├── sidebar_widget.py       # 对话历史侧边栏 (搜索/新建/删除/重命名)
│   ├── api_key_dialog.py       # 设置弹窗 (API Key / 代理 / OCR 凭证)
│   ├── gui_agent_panel.py      # GUI Agent 任务面板 (进度条 + 状态)
│   └── input_widget.py         # 截图后快捷输入弹窗
│
├── remote/                     # 手机远程控制
│   ├── server.py               # HTTP API 服务 (aiohttp) + 安全 Harness + Cloudflare Tunnel + QR 码
│   └── phone.html              # 手机端界面 (深色主题, 响应式, 确认面板, 提示栏)
│
├── utils/                      # 工具库
│   ├── image_tool.py           # QImage ↔ PIL ↔ base64 转换 + 压缩
│   ├── ocr_tool.py             # 腾讯云 OCR 封装
│   ├── token_counter.py        # Token 估算 (中文/英文/图片)
│   ├── context_store.py        # LangChain 消息持久化
│   ├── api_key_manager.py      # airag_config.json 本地配置读写
│   ├── user_manager.py         # 多用户隔离 + 对话 CRUD
│   ├── speech_worker.py        # PyAudio 录音 + 腾讯云 ASR (音量检测断句)
│   ├── memory_store.py         # 长期记忆提取/去重/检索/注入 prompt
│   ├── vector_store.py         # FAISS + TF-IDF 向量存储引擎
│   ├── retrieval_ranker.py     # RRF 融合 + lightweight rerank 精排
│   ├── gui_operation_memory.py # GUI 操作历史记忆
│   ├── session_memory.py       # 会话记忆管理
│   ├── app_control.py          # Windows 应用发现/激活/启动 (40+ 应用)
│   ├── direct_commands.py      # 直达命令路由 (纯启动/切换绕过 Agent)
│   ├── task_router.py          # 任务分类路由 (embedding 语义相似度)
│   ├── risk_engine.py          # 风险评估引擎 (safe/high/critical)
│   ├── audit_store.py          # 审计日志存储 (JSONL + 线程安全)
│   └── rollback.py             # 回滚方案 + 替代操作建议
│
├── tests/                      # 测试套件
│   ├── test_risk_engine.py
│   ├── test_audit_store.py
│   ├── test_task_router.py
│   ├── test_app_control.py
│   ├── test_server_harness.py
│   └── test_scroll_drag.py
│
├── pyproject.toml              # 项目配置 + pytest 设置
│
└── assets/                     # 截图和图标
    ├── logo.png
    ├── user.png / user1.png / user2.png / user3.png
    ├── user5.png               # 手机远程控制界面
    └── user6.jpg               # GUI Agent 桌面自动化

技术栈

层次技术
UIPyQt6,无边框悬浮窗,系统托盘,Markdown 渲染
热键pynput GlobalHotKeys,后台线程监听,QTimer.singleShot 切主线程
Agent 范式ReAct (Reasoning + Acting) 纯视觉循环 + Loop Engineer 外层控制
决策模型豆包 VL lite(ReAct 决策),豆包 VL pro(最终审计)
LLM豆包 VL(火山引擎方舟),OpenAI-compatible API
流式输出LangChain BaseChatModel,SSE streaming,QThread + asyncio
状态机LangGraph StateGraph + MemorySaver 检查点
浏览器控制MCP (Model Context Protocol) JSON-RPC 2.0 over stdio + Playwright CDP 兜底
桌面操作pyautogui(鼠标/键盘),pyperclip(剪贴板粘贴)
RAG 检索BM25 + 语义向量 + jieba 三路召回 → RRF 融合 → lightweight rerank 精排 → 注入 prompt
Embeddingdoubao-embedding-text-240715(dense retrieval)+ BGE-small-zh-v1.5(任务路由语义匹配)
向量存储FAISS IndexFlatIP + TF-IDF + jieba 分词
长期记忆LLM 后台提取事实 → Jaccard 去重 → FAISS 索引 → 注入 System Prompt
远程控制aiohttp HTTP API + 轮询 + Cloudflare Tunnel / ngrok / Tailscale
安全 Harness规则引擎风险评估 + 确认门禁 + JSONL 审计日志 + 回滚方案 + 直达命令路由
任务路由sentence-transformers (BGE-small-zh-v1.5) 语义相似度 + 规则引擎复合检测
语音识别PyAudio 实时录音 + 腾讯云 ASR,VAD 音量阈值断句
OCR腾讯云 GeneralBasicOCR,1000 次/月免费额度
打包PyInstaller onedir 模式

并发架构

1 个主进程 ─┬─ 主线程 (Qt QEventLoop)     UI 渲染 + 热键响应 + 定时器
            ├─ QThread: StreamWorker       asyncio 协程 → 流式对话
            ├─ QThread: DesktopAgentThread  stdout 管道 → 管理子进程
            ├─ QThread: MemWorker          同步阻塞 → 长期记忆提取
            └─ 守护线程: RemoteServer       aiohttp 协程 → HTTP API + 安全 Harness

1 个子进程 ─── python run_gui_agent.py     同步阻塞 → ReAct Agent 执行

并发单元

并发单元类型并发模型职责与主线程通信
主线程线程 #1Qt C++ QEventLoopUI 渲染、信号槽、热键响应、巡检手机指令
StreamWorkerQThread #2asyncio 协程流式对话: 记忆检索 → 豆包 VL 逐 tokenpyqtSignal(token)
DesktopAgentThreadQThread #3stdout 管道同步读子进程管理: 启动、读进度、读结果pyqtSignal(msg)
MemWorkerQThread #4同步阻塞LLM 提取事实 → 去重 → FAISSpyqtSignal(facts)
RemoteServer守护线程 #5aiohttp 协程HTTP API: 轮询/风险评估/确认门禁/审计记录变量写入 + threading.Lock
截图推送线程守护线程 #6threading.Thread每 1.5s 截图推给手机RemoteServer.set_screenshot()
pynput 线程后台线程pynput 内部 threading全局热键监听QTimer.singleShot(0, cb)
子进程独立进程同步阻塞ReAct: 截图→决策→执行→循环stdout 管道 + JSON 文件

设计原则

决策原因
I/O 密集用协程等 LLM 响应 / HTTP 请求,单线程协程切换纳秒级
简单阻塞用子线程pyautogui / 文件 I/O 不支持 async,放子线程 GIL 释放时不挡主线程
事件循环冲突用子进程Playwright 同步 API 内部有 asyncio 事件循环,和 Qt C++ QEventLoop 抢线程。子进程物理隔离
跨线程通信用 Qt 信号槽Qt 自动深拷贝数据到目标线程队列,不加锁
pynput 线程不碰 UI热键回调在 pynput 线程,QTimer.singleShot(0, cb) 安全切回主线程

RAG 记忆系统(检索增强生成)

标准 RAG (Retrieval-Augmented Generation) 管道驱动三层记忆,让 AI 既知道"正在聊什么",也记得"你是谁":

用户消息
  │
  ├─ 短期记忆: 最近 3 轮原文 ──────────→ 直接拼入 prompt(Retrieve-free)
  │
  ├─ 中期记忆: 历史消息
  │   ├─ BM25 关键词召回 ──┐
  │   ├─ 语义向量召回     ──┼─→ RRF 融合 → rerank 精排 → Top-K 注入
  │   └─ jieba 分词召回   ──┘
  │
  └─ 长期记忆: 用户事实
      ├─ Embedding: doubao-embedding-text-240715
      ├─ Index: FAISS IndexFlatIP
      └─ Semantic search → Top-K 注入 System Prompt
管道阶段短期中期长期
Source最近 3 轮对话原文当前会话历史消息LLM 提炼的用户事实 (身份/偏好/项目/知识)
Chunking不分割按消息边界按事实条目
Embedding不需要doubao-embedding-text-240715doubao-embedding-text-240715
Index不需要内存 BM25 + FAISSFAISS IndexFlatIP 持久化
Retrieval直接拼接 (Retrieve-free)BM25 + 语义 + jieba 三路召回语义 + 关键词双路召回
Fusion & Rerank不需要RRF 融合 → lightweight rerankRRF 融合 → lightweight rerank
Augment拼入 System PromptTop-K 注入上下文Top-K 注入 System Prompt
Lifecycle当前会话当前会话跨会话永久

长期记忆在对话结束后由后台 MemWorker 异步提取,不阻塞用户操作。

License

MIT © zebinlu7-a11y

Collected info

  • 118 stars
  • 5 forks
  • Language: Python
  • Source updated: 9/3/2026