UiPath Autopilotを試す（Studio）

# はじめに
7月に正式にリリースされたStudioに搭載されたAutopilotについて試してみます。
Studio Webでは先行して使えていたAutopilotでしたが、デスクトップ版のStudioのAutopilotは現時点でどの程度使えるのでしょうか。

なお、AppsのAutopilotについては以下で解説しています。あわせてご覧ください。

https://qiita.com/shuy/items/49dd01be167cc7de31b3


# 前提
Studio（StudioX）　2024.10.1　※Enterpriseライセンス


# Studioで使えるAutopilot
公式ガイドによると、StudioのAutopilotは以下の機能があります。
* テキストからワークフローを生成する
* テキストからコード化されたワークフローを生成する
* テキストから式を生成する
* アクティビティとシーケンスの要約

https://docs.uipath.com/ja/autopilot/other/latest/user-guide/autopilot-for-developers


## テキストからワークフローを生成する
自然言語で書かれたプロンプトからワークフロー（ひな形）を生成する機能です。StudioXやStudioWebでも同様の機能があります。

「Ctrl + Shift + T」で追加アクティビティの検索ウィンドウを出し、そこにプロンプトを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/2e0f4d04-fdad-6798-46b2-d1f8e3b27dc1.png)

Autopilotによってワークフローが自動生成された後、各アクティビティのプロパティを個別に設定します。
生成されたワークフローは、プロパティが事前に設定されたものや、設定されていないものがあります。
ものによっては空のシーケンスだけ生成する場合もあり、その場合はシーケンスの中身を自力で実装する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/f9ee28ae-af8e-760b-ed48-78257e853ce4.png)

繰り返し処理や条件分岐処理を含む以下のプロンプトを試してます。
`受信したOutlookメールの件名が「重要」で始まる場合のみ、内容をExcelに転記する。メールは複数件あり、1件ずつ繰り返して処理する`

狙い通り、繰り返し処理や分岐処理はAutopilotが理解してくれて、問題なく生成できました。
本来、分岐条件に指定したキーワードは「重要」でしたが、日本語ではなく「Important」になってしまったり、なぜかExcelではなくPowerPointに保存してしまったりしていますが、個人的には許容範囲内だと思います（恐らく、今後のバージョンアップで精度は向上するはずです）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/824b5425-1a4b-8949-e95c-1a9108694f7b.png)

どのアクティビティを使ったらよいか全く見当がつかない人には便利な機能だと思いますが、現時点では自動生成した後の修正箇所も多いので、ある程度UiPathに慣れた人ならわざわざ使う必要はないのかなと個人的には思います。今後のバージョンアップで精度が向上したら、よく使う機能になるかもしれません。


## テキストからコード化されたワークフローを生成する
自然言語で書かれたプロンプトからソースコードを生成する機能です。Studioのみの機能です。

コードを挿入した箇所にカーソルを合わせ、右クリック（コンテキストメニュー）から「コードを生成」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/3f4d60e6-ad70-0c22-55c4-4c9565a740bd.png)

基本的にAutopilotのプロンプトの入力フォームは改行できない仕様ですが、これは改行させてくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/45577abb-6509-01ef-7d81-ff3c0b47d54e.png)

生成されたコードは冗長的な個所などが目立ちますが、特に違和感のあるコードはなく、自然なコードが出来上がっていると思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/77d6aded-32f8-b8ed-5994-26e683b8ddd6.png)


## テキストから式を生成する
式エディタにおいて自然言語で書かれたプロンプトから式（.NET）を生成する機能です。StudioX、StuidoWeb、Appsでも同様の機能があります。

各アクティビティから式エディタを開き、プロンプトを入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/fd862c14-2adf-9e2a-bc0e-ab88d9c039b3.png)

例えば、以下のプロンプトを実行してみます。
`今日が偶数月であればTrue、奇数月で10日以上ならTrue`

結果は完璧でした。
`(DateTime.Now.Month Mod 2 = 0) Or (DateTime.Now.Month Mod 2 <> 0 And DateTime.Now.Day >= 10)`

次は少々意地悪なプロンプトにしてみます。
`変数numを半角スペースで分割し、最初の要素を取りだす`
※変数numは整数型（Int）なので、分割（String.Splitメソッド）できません。

結果は、変数numを文字列型（String）に変換してから分割してくれました。
`num.ToString().Split(" "c).FirstOrDefault()`

数値を半角スペースで分割しても意味がないので、「変数numは整数型なので指示には従えません」と返してくれると助かりますが、対話型UIではないので、とりあえずプロンプトを忠実に実行しようとしてくれます。

普段からプログラムを書く人であっても、ド忘れしてしまったり、複雑な式を書こうとすると時間がかかってしまうことはあるので、この機能は便利な機能だと思います。
どこまで複雑な式に対応できるかどうかは、まだまだ検証が足りませんが、Autopilotのバージョンが上がる度に精度も向上すると思われるので期待したいです。


## アクティビティとシーケンスの要約
アクティビティの名前を変更する機能です。StudioWebでも同様の機能があります（StudioXでは未実装です）。

デフォルトアクティビティ名のままにしているのは保守性（可読性）の観点で良くありません。多くの方はアクティビティ名を処理の内容に合わせ変更していると思いますが、この機能ではアクティビティの中身に応じた名前をAIが考えてくれます。

ただし、現時点では日本語で出力されませんし、そもそもアクティビティ名をつける作業が手間だと思ったことがないので、正直な感想ですが個人的には使うことはないと思います。

![要約1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/89445/03b99bd5-08b2-cee3-c9d4-908463017adc.png)


# おわりに
GAされたばかりということを前提に考えると、現時点ではそれなりに有効な機能だと思いました。業務実用性の観点では、「式の生成」機能は即戦力になるかと思います。
一方、マイナスの部分は、全体的にプロンプトが改行できない点や、対話型UIではない点になるかと思います。この点はAppsも同様です。
特に対話型UIではないので、期待する結果を一発で得られなかった場合は、生成されたものを削除して、やり直すなど手間がかかってしまいます。これらは今後のアップデートで改善されることを期待したいと思います。