Officeアプリの作業を自動化するGPTエージェントがMicrosoft公式リポジトリに公開！

# 0. GPTがOffice製品連携して仕事してくれる？！
2024/02/10 Microsoftが公開した[UFO🛸](https://github.com/microsoft/UFO)というリポジトリについて紹介します。
![overview_n.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697865/579e54d2-7e6f-fff5-fece-6d86d6400042.png)

こちらはタイトルの通り、WindowsOS特化型のGPTシステムで、
- **Office製品(Word, PowerPoint, Outlook, Explorer等)**や**Adobe Acrobat**などよく使われるアプリに対応
- **複数のアプリをまたいで**複雑なタスクも一気通貫実行
    - 例：wordの内容をメールで〜宛に送る
    - 例：ネットで〜と検索して、出てきた記事の内容を要約し社内SNSに送る
- **GPT-Vision**を使うのでPCのスクショから作業を理解

といった特徴があります。筆者も「ChatGPTの回答は割といいんだけど、Officeアプリと連携してないから、結果をコピペする手間が必要→自動化まではできてないな」と思ってたので、遂に**全部自動化できるようになったか**！と息巻いてます。

本記事ではUFOのコンセプトや仕組みについて解説していきます。


# 1. UFOの仕組み
UI Focused agent(= UFO🛸)は[こちら](https://arxiv.org/pdf/2402.07939.pdf)で24/02/08に初版論文が提出されています。
![framework.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697865/ee5908a7-9c7c-b900-cc64-a1133bb747ae.png)

最近流行しているマルチ自律型エージェント[^1]を採用し、特に**AppAgent**と**ActAgent**の二つの役割を持ったエージェントが協業することでタスクを高精度にこなしていきます。
- **AppAgent**
    - タスクの管理する役割
    - ユーザリクエストに対して、サブタスクを定義しタスクの実行計画を立てる
    - どのアプリを次に操作するべきかActAgentに伝える
- **ActAgent**
    - 実際にアプリを操作してインタラクションする役割
    - 指定されたアプリ上でサブタスクの実行を試みる
    - 実行後、実行結果を保存しAppAgentに処理を返す

# 2. 具体的にできること
性能評価のため、筆者らは新たに**WindowsBench**という50問のユーザリクエスト例を定義しました。これら「具体的にUFOが実行できたタスク」のうち特筆すべき結果を以下にまとめます：

|リクエスト内容|成功したか？|ステップ数|
|パワポの発表用メモを全部削除して！|◎|8|
|Photoで写真の内容を要約して、これをOutlookで○○さんにメールして！|◎||
|○○について検索して|◎||


# 3. 新規性
### プロンプトの詳細
基本的にはシステムプロンプト、画像エンコード、ユーザリクエストの順番でプロンプトは構成されているが、システムプロンプトはAppAgent用とActionAgent用で分けて役割を変えている。


#### [AppAgent](https://github.com/microsoft/UFO/blob/main/ufo/prompts/base/app_selection.yaml)
![AppAgent出力仕様.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697865/6732042e-6260-ff28-d633-1cbbb868798c.png)

- 役割と命令概要(ガイドライン)
- **pywinautoで選択可能なアプリ操作の説明**
- セーフガード
- 出力して欲しい項目やフォーマット
- few shotの例(計8つ) 

#### [ActionAgent](https://github.com/microsoft/UFO/blob/main/ufo/prompts/base/action_selection.yaml)
![ActAgent出力仕様.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697865/fb11abde-ef4e-b9fd-09b9-ad23a021ed93.png)

- 役割と命令概要(ガイドライン)
- **スクショの仕様**
- **実行対象と実行可能な操作リスト＆それぞれのアプリ操作に必要な引数の説明**
- セーフガード
- 出力して欲しい項目やフォーマット
- few shotの例（計8つ）

### アノテーション付きスクリーンショット
UFOが参照する画像として、素のスクショ以外に「選択可能な次のアクション候補付近を四角で囲って、強調表示したスクショ」を利用している([該当実装](https://github.com/microsoft/UFO/blob/main/ufo/ui_control/screenshot.py))。

![Annotated.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697865/277dce27-796e-5be6-300f-68956855e94f.png)

上画像のオレンジ色の四角で囲まれた数字部分がpywinautoで検出された「アプリ上でコード実行可能な操作」に対応している。操作の種類が違うレイヤーに対しては別の色（画像左上の青四角部分など）が割り当てられている。

この四角はアプリに付属の機能などではなく、
1. スクショを画像データとして取得
2. コード実行可能な操作の一覧を取得
3. スクリーン上でそれぞれの操作アイコンが**どこの座標にあるか**を取得
4. 取得した座標を中心にpython上で四角形を上から描画

という手順で無理やり新規作成していることにも留意する。

# 4. 今後の展望
### 論文
まず論文の展望としては
- 対応操作の拡張
    - 現状pywinautoの範囲内でしか使えないが、Win32APIに対応することやGUIモデルを組み込むことを検討している
- 未対応アプリへの拡張
    - 実は今回は9のアプリにしか実験していない
    - 未知のアプリに適用しようとすると精度はかなり悪化する模様(vscode→×、adobe→△)
    - 実はwindows特化とは謳いながらExcelやTeamsは一切タスクとして検討されていない
        - 多分難しんだろうな...

### 所感
論文には特に言及なかったが、Teamsに関してはWindowsBenchの中に一切入っていないアプリであるにも関わらず、プロンプトのfew shot部分にteamsを使ったサンプルが入っていた。このことや、リポジトリがすでに更新始まっていることから、今後より多くのOffice製品に対応したコードに改変されていくことが期待できると個人的に思いました。

# 免責事項
記事の内容に不適切な点などありましたら、ご指摘いただけると幸いです。また、万一、読者様に何らかの不都合や損害が発生したとしても、著者や著者の所属組織は何らの責任を負うものではありません。

(2024/03/03現在追記中...)

[^1]: 自律エージェントとは、やって欲しいことを伝えると「タスク計画→小タスクを実行→成否を確認→次のタスクへ」といった流れでGPT自身がPDCAサイクルを回しながら、複雑なタスクをこなすシステムを指します。例えば[babyagi](https://github.com/yoheinakajima/babyagi)など。ただ最近は特定の役割を持った複数のエージェント同士に協業させるマルチエージェントシステムも流行し始めました。例えば[AutoGen](https://microsoft.github.io/autogen/)など。