UFO 源码实战 (5):实战修改源码,打造属于你的专属桌面助理

前言

经过前四篇文章的洗礼,通过阅读源码,我们已经从“使用者”进阶为了“理解者”。

但是,开源项目的最大乐趣在于折腾。原版的 UFO 也许只是一个严肃的自动化工具,但在我们手里,它可以变成一个毒舌的二次元管家,或者一个效率极高的办公助手。

今天这篇大结局,我们将实战演示三个级别的源码修改,带你打造一个独一无二的 UFO。


🛠️ Level 1: 换“芯”手术 —— 升级 GPT-4o

UFO 项目发布较早,默认配置可能还是 gpt-4-vision-preview。现在 GPT-4o (Omni) 已经发布,速度更快、更便宜、视觉能力更强。我们第一步就是给它换个更强的心脏。

修改位置:ufo/config/config.toml

不需要改代码,只需要改配置。但这是性价比最高的修改。

Ini, TOML

[Visual_Model]
# 原版可能是 gpt-4-vision-preview
# 修改为 gpt-4o,响应速度将提升 2 倍以上!
VISUAL_MODEL = "gpt-4o-2024-05-13" 

[API_KEY]
# 确保你的 Key 支持 GPT-4o
OPENAI_API_KEY = "sk-proj-xxxxxxxx..."

实测效果:

换用 GPT-4o 后,UFO 识别屏幕截图的速度会显著提升,而且对于复杂的 UI 布局(比如 Photoshop 面板)理解能力有明显增强。


🎭 Level 2: 注入灵魂 —— 定制 AI 人格

你是不是觉得 UFO 的回复太像机器人了?“Success involved clicking...”。太无聊了。我们来改改它的 Prompt,让它变成钢铁侠的 Jarvis 或者 二次元傲娇女仆

修改位置:ufo/prompter/templates/ (具体文件名视版本而定,通常是 host_agent.yamlapp_agent.yaml)

找到 system 字段,直接覆盖它的原始人设。

魔改方案:Jarvis 风格

YAML

system: |
  You are JARVIS, a highly advanced AI assistant controlling a Windows PC.
  Your tone should be concise, professional, and slightly British.
  Instead of saying "I will click...", say "Processing request, Sir. Initiating interaction with..."
  (保留原有的 JSON 格式要求,这部分不能删!)

魔改方案:傲娇风格

YAML

system: |
  你是一个虽然很不情愿但还是会帮忙的桌面助手。
  说话语气要带有傲娇属性(Tsundere)。
  比如:“哼,既然你诚心诚意地请求了,我就勉为其难帮你点一下这个按钮吧。”
  (同样保留 JSON 格式要求)

原理:

我们在第四篇讲过,prompter 会读取这些 YAML 文件构建 System Prompt。修改这里,就是修改 AI 的底层世界观。


🗣️ Level 3: 赋予声音 —— 增加 TTS 语音反馈

只能看文字日志太累了。我们希望 UFO 在操作的时候,能像真人一样开口说话:“正在为您打开微信,请稍候。”

我们将引入 Python 的离线语音库 pyttsx3

1. 安装依赖

Bash

pip install pyttsx3

2. 编写工具函数

ufo/utils 目录下新建一个 speech.py(或者直接加在 utils.py 里):

Python

import pyttsx3
import threading

# 初始化引擎
engine = pyttsx3.init()

def speak(text):
    """
    让 UFO 说话的函数
    使用线程防止语音播报阻塞鼠标操作
    """
    def _run():
        try:
            # 简单的清洗,去掉 JSON 里的符号
            clean_text = text.replace("Action:", "").strip()
            engine.say(clean_text)
            engine.runAndWait()
        except:
            pass
    
    # 开一个线程去说话,别卡住主程序
    t = threading.Thread(target=_run)
    t.start()

3. 植入源码

我们要找到 UFO 思考完毕、准备行动的那一刻。通常在 ufo/ufo_system.py 的主循环里,或者 agent 返回结果的地方。

打开 ufo/ufo_system.py,找到 run() 方法中的循环部分:

Python

# ... 在获取到 response 之后 ...

response_json = agent.message_history[-1]["content"] # 假设这里拿到了 GPT 的回复
thought = response_json.get("Thought", "") # 获取它的思考过程

# === 植入我们的魔改代码 ===
from ufo.utils import speak
print(f"🤖 UFO 正在思考: {thought}")
speak(f"正在执行操作:{thought}") 
# ========================

# ... 后面是原来的 execution 逻辑 ...

效果:

现在,当你下达命令“打开浏览器”时,你的电脑会传出声音:“正在执行操作:检测到 Chrome 图标,准备点击。”

这种听觉反馈会让你的 Agent 显得极具科技感!


🛑 进阶挑战:增加“紧急制动”热键

UFO 也是会发疯的(比如无限点击某个无关按钮)。原版代码通常只能 Ctrl+C 强退。我们可以利用 keyboard 库加一个全局热键。

修改位置:ufo/__main__.py 或入口文件

Python

import keyboard
import os

def kill_switch():
    print("\n🚨 紧急制动触发!UFO 正在强制着陆...")
    os._exit(0)

# 在 main 函数开始前注册热键
# 按下 F12 立即自杀
keyboard.add_hotkey('f12', kill_switch)

这样,当 UFO 开始乱点你的私人文件夹时,你可以优雅地按下 F12 让它瞬间安静,而不是手忙脚乱地去拔电源。


🎉 系列总结

至此,我们的**《Microsoft UFO 源码实战》**五部曲正式完结!

  1. 环境篇:我们搭建了地基,跑通了 Hello World。

  2. 视觉篇:我们看透了 Set-of-Marks 技术,明白了它怎么“看”屏幕。

  3. 动作篇:我们掌握了 Pywinauto,学会了模拟人类的鼠标点击。

  4. 大脑篇:我们拆解了 Prompt 结构,理解了 RAG 和记忆机制。

  5. 魔改篇:我们亲手修改了源码,打造了专属助手。

写在最后:

AI Agent 技术日新月异。Microsoft UFO 可能只是这个时代的“原始人”,但它所代表的 "VLM (Vision Language Model) + UI Automation" 的技术路线,绝对是未来操作系统交互的主流方向。

希望这个系列能成为你进入 AI Agent 开发世界的敲门砖。不要停止阅读源码,因为最好的文档,永远是代码本身。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天进步2015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

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

抵扣说明:

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

余额充值