引言

你是否想在没有互联网的情况下,用 AI 直接操作 WPS 的 Word(.docx)和 Excel(.xls)文件?今天我们来实现一个本地部署的方案,使用 deepseek r1 模型和 OmniParser V2,通过 WPS 的图形界面(GUI)完成文件操作。别担心,即使你是编程小白,这篇文章会用简单语言一步步带你完成。

什么是我们要做的?

我们希望 AI 能像人一样“看”到 WPS 界面,然后根据指令(如“保存文件”)自动点击按钮或输入文字。整个过程不需要联网,全部在本地运行。关键工具包括:

  • deepseek r1 模型:一个本地运行的 AI,能理解任务并生成操作指令。
  • OmniParser V2:一个工具,用于解析 WPS 界面的截图,识别按钮和文本框。
  • 辅助工具:截图工具 mss 和自动化工具 pyautogui。

令人惊讶的发现

你可能以为 OmniParser V2 是用来直接读取 .docx 或 .xls 文件内容,但其实它主要解析 GUI 截图。这意味着我们需要通过 WPS 的界面操作文件,而不是直接修改文件内容。这有点像让 AI“看”屏幕,然后“动手”操作。

准备工作

首先,确保你的电脑有 Python 环境。以下是需要的库:

  • Transformers 和 PyTorch(用于加载 deepseek r1 模型)
  • OmniParser V2(从 GitHub 克隆并安装)
  • mss(截图)和 pyautogui(自动化)

安装方法:

pip install transformers torch omniparser mss pyautogui pillow

然后,从 Hugging Face 下载 deepseek r1 模型(推荐 1.5B 版本,适合普通电脑)。

步骤详解

我们分几步实现这个功能:

1. 部署 deepseek r1 模型

这是 AI 的“大脑”,负责理解任务并生成操作。代码如下:

from transformers import AutoModelForCausalLM, AutoTokenizer

model_name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name)

运行后,模型会加载到本地,准备好生成指令。

2. 截图 WPS 窗口

打开 WPS,加载你要操作的 .docx 或 .xls 文件。确保窗口位置固定(比如最大化),然后用 mss 截图:

import mss
from PIL import Image

with mss.mss() as sct:
    monitor = sct.monitors[1]  # 假设 WPS 在第二个显示器,调整为你的情况
    screenshot = sct.grab(monitor)
    screenshot_image = Image.frombytes('RGB', (monitor['width'], monitor['height']), screenshot.bgra, 'raw', 'BGRX')
    screenshot_image.save('screen.png')

这会把 WPS 界面保存为 screen.png。

3. 解析 GUI 元素

用 OmniParser V2 分析截图,识别界面上的按钮和文本框:

from omniparser import OmniParser

parser = OmniParser()
parsed_results = parser.parse("screen.png")

parsed_results 是一个列表,包含每个 GUI 元素的描述(如“保存按钮”)和位置(如坐标范围)。

4. 生成操作指令

把任务和 GUI 信息输入 deepseek r1 模型,让它决定下一步操作。比如,任务是“保存文件”,输入可能是:

task = "Save the file"
gui_description = str(parsed_results)
input_text = f"Task: {task}. GUI description: {gui_description}"
inputs = tokenizer(input_text, return_tokens=True)
outputs = model.generate(**inputs, max_new_tokens=100)
generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)

模型可能会输出类似“点击描述为‘保存’的元素”。

5. 执行操作

解析模型的输出,提取操作(如点击或输入),然后用 pyautogui 执行。例如:

import pyautogui
import time

actions = []
for line in generated_text.splitlines():
    if "click on element with description" in line:
        description = line.split("'")[1]
        for element in parsed_results:
            if element['description'] == description:
                x = (element['x1'] + element['x2']) // 2
                y = (element['y1'] + element['y2']) // 2
                actions.append(("click", x, y))
                break
    elif "type" in line:
        text = line.split("'")[1]
        actions.append(("type", text))

for action in actions:
    if action[0] == "click":
        pyautogui.click(action[1], action[2])
        time.sleep(1)  # 等待应用响应
    elif action[0] == "type":
        pyautogui.typewrite(action[1])
        time.sleep(1)

这里我们加了 1 秒延迟,确保操作顺序正确。

小白注意事项
  • 窗口位置:确保 WPS 窗口固定位置,否则坐标会错乱。可以最大化窗口,减少变化。
  • 模型输出:如果模型输出不正确,可以调整输入提示,比如告诉它“请按以下格式输出:点击描述为‘XXX’的元素”。
  • 性能:deepseek r1 模型较大,建议用 1.5B 版本,电脑内存至少 8GB。
潜在问题与解决
  • 坐标不准:如果点击错地方,检查 WPS 窗口是否移动,重新固定位置。
  • 解析错误:OmniParser 可能识别不出某些元素,尝试调整截图清晰度或更新解析器。
  • 任务复杂:如“保存为新文件”,可能需要模型生成多步操作,确保每步都有延迟

总结

通过以上步骤,你可以用本地 AI 和 OmniParser V2,通过 WPS 的 GUI 操作 .docx 和 .xls 文件,无需联网。适合小白操作,但记得先测试简单任务(如点击“文件”菜单),逐步复杂化。

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐