+
33
-

回答

这是一个非常经典且强大的 AI Agent 应用场景。将截图、历史步骤和当前目标结合起来,让 Gemini 进行“观察-思考-行动”的循环,是实现复杂任务自动化的关键。

这完全可行,其核心思想就是创建一个“观察-思考-行动”(Observe-Think-Act)的循环。您的 C# 程序将作为这个循环的执行者(Orchestrator)。

下面,我将为您详细分解实现这个任务的架构、关键代码和最佳实践。

架构设计:观察-思考-行动循环

观察 (Observe): C# 程序负责截取当前整个屏幕或特定应用窗口的图像。

思考 (Think): C# 程序将截图数据、任务的最终目标、以及一个记录了所有已执行操作的历史列表,一同发送给 Gemini 1.5 Pro(这个任务必须使用支持图像输入的多模态模型)。

行动 (Act): Gemini API 会分析这些信息,并返回一个结构化的 JSON 对象,其中包含下一个具体的操作指令(例如,点击坐标 (x,y) 或者输入文本)。C# 程序解析这个 JSON,并使用 UI 自动化库(如 FlaUI)来执行该操作。

这个循环会一直持续,直到 Gemini 返回一个特殊的“任务完成”指令。

1. 定义详细的 JSON 操作指令

首先,我们需要和 Gemini “约定”好一个详细的 JSON 通信格式。这个格式越清晰,Gemini 的输出就越可靠。我们可以在 C# 中创建一个对应的类来方便地进行序列化和反序列化。

C# ActionCommand 类:

public class ActionCommand
{
    // 操作类型:click, double_click, right_click, type, key_combo, finish
    public string Action { get; set; }

    // 操作的X坐标 (对于点击类操作)
    public int? X { get; set; }

    // 操作的Y坐标 (对于点击类操作)
    // 为什么用坐标?因为模型直接从图片中识别位置比识别控件ID更直观
    public int? Y { get; set; }

    // 要输入的文本 (对于 type 操作)
    public string Text { get; set; }

    // 键盘组合键,例如 ["CONTROL", "S"] (对于 key_combo 操作)
    public List<string> Keys { get; set; }

    // 模型对当前操作的思考或解释,便于调试
    public string Commentary { get; set; }
}

2. 构建强大的提示词 (Prompt Engineering)

这是整个系统的“灵魂”。一个好的提示词能够清晰地指导 Gemini 如何行动。

提示词模板:

你是一个专业的 Windows 操作系统自动化助手。你的任务是根据用户的总体目标,逐步完成任务。

我会为你提供三部分信息:
1.  **[总体目标]**: 任务的最终目的是什么。
2.  **[历史步骤]**: 已经执行过的操作列表,用于给你上下文。
3.  **[当前屏幕截图]**: 当前电脑屏幕的实时画面。

你的工作是:
- 分析屏幕截图,结合总体目标和历史步骤。
- 决定出【下一个】最合理、最精确的【单步操作】。
- 必须以严格的 JSON 格式返回你的决定,不要包含任何额外的解释或 markdown 标记。

JSON 格式定义如下:
{
  "action": "操作类型", // 必须是 'click', 'double_click', 'right_click', 'type', 'key_combo', 'finish' 中的一个
  "x": X坐标, // 对于点击操作,提供精确的整数X坐标
  "y": Y坐标, // 对于点击操作,提供精确的整数Y坐标
  "text": "要输入的文本", // 仅用于 'type' 操作
  "keys": ["键1", "键2"], // 仅用于 'key_combo' 操作,有效键包括 'CONTROL', 'ALT', 'SHIFT', 'WIN', 'ENTER', 'ESC', 以及单个字母或数字
  "commentary": "你为什么做出这个决定的简短说明"
}

重要规则:
- 每一次只返回一个操作。
- 如果你认为总体目标已经全部完成,请将 action 设置为 'finish'。
- 在进行 'type' 操作前,请确保已经 'click' 了一个输入框。

---
现在,请根据以下信息执行任务:

**[总体目标]**:
{overall_goal}

**[历史步骤]**:
{history_steps}

**[当前屏幕截图]**:
[这里将附上图片数据]

3. C# 实现自动化主控程序

下面是一个结合了截图、调用 Gemini API 和 FlaUI 执行操作的示例代码框架。

所需 NuGet 包:

Google.Cloud.AIPlatform.V1

FlaUI.UIA3

System.Drawing.Common (用于截图)

System.Text.Json (内置)

using FlaUI.Core;
using FlaUI.Core.Input;
using FlaUI.UIA3;
using Google.Cloud.AIPlatform.V1;
using Google.Protobuf.WellKnownTypes;
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows.Forms; // 需要引用 System.Windows.Forms.dll

public class GeminiAgentOrchestrator
{
    private readonly PredictionServiceClient _client;
    private readonly string _endpoint;
    private readonly List<string> _history = new List<string>();

    public GeminiAgentOrchestrator(string projectId, string location, string model = "gemini-1.5-pro-001")
    {
        _endpoint = $"projects/{projectId}/locations/{location}/publishers/google/models/{model}";
        _client = new PredictionServiceClientBuilder
        {
            Endpoint = $"{location}-aiplatform.googleapis.com"
        }.Build();
    }

    public async Task RunTask(string overallGoal)
    {
        while (true)
        {
            // 1. 观察 (Observe) - 截取屏幕
            Console.WriteLine("					

网友回复

我知道答案,我要回答