15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Power Virtual AgentsとPower Automateを使ってOpen AIと対話してみよう

Last updated at Posted at 2023-01-30

はじめに

ChatGPTがのインパクトにより、Open AIのAPIを利用したテクニックも数々上げられています。
今はプレビュー段階ですので、「今後どのくらい使えるのか?」という点は未知数ですが、OpenAIを活用して
仕事の景色も変わってくることが予想されます。

今回はPower Platformの中で、Power Virtual AgentsPower Automateを使って
OpenAIと対話するBotをPowerPlatformを活用し、ローコードで作っていきたいと思います。

OpenAI APIの使い方

Google Apps Scriptを中心に、既に多くの活用事例を紹介されています。
私は、その内容をPowerAutomateで表現するとこうなるという紹介をさせていただきます。

流れ

  1. OpenAIのアカウントを作る
  2. APIキーの発行

こちらについては、AutoWorkerを運営しているヤマタケさんのBlogが大変参考になります。
この通りやれば作れるので詳細は深堀しません。

OpenAI APIのページでクリックしていけばたどり着きます。

image.png

このsecret Keyは絶対に公開してはいけません!

1. Power Automateのフローを作成する

Power Virtual Agents(以下PVA)にPower Automateのフローは組み込みが可能です。
Question to Answerのサイクルを回すために、AIの力を借ります。

PVAの設計時に 予めフローが用意されていた方が 作成の効率が良かった経験から、
まずPower Automateのフローを紹介します。

フローの種類は 自動化したクラウド フローです。
トリガーは Power Virtual Agentsがフローを呼び出すとき(V2) です。

image.png

フローの全体像

image.png

とても簡素ですね。シンプルなんです。

流れを書くと

  1. Power Virtual Agentsからチャットのコトバをテキストで受け取る
  2. APIの認証のために使用する秘密鍵を定数として保持する
  3. AIのMODELをテキストで設定する
  4. temperature - 意味:0から2の範囲を取り、出力する単語のランダム性を指定します。
  5. TOKENS - 出力される単語の数
  6. HTTP要求を送信する - POST Method
  7. 戻り値を取得し、加工したうえでPower Virtual Agentsに返す(改行コードなど余計であるため)
  • Point Power AppsやVirtual Agentsからデータを受け取る画面
    個人的に躓くポイントですが、赤線が受け取る文字列を格納する値の名前と解釈しています。
    受け取る値を増やすこともできますが、このシーンでは不要ですね。

image.png

後述のステップはこちら

image.png

HTTP要求に含めるパラメーターを定数として宣言しています。

入力する文字列は下記の通り - SECRET KEYは秘密鍵なので割愛

PARAM 意味
MODEL NAME AIのモデル名です
MODEL TEMP 出力する単語のランダム性
MODEL TOKENS 生成する文章の最大単語数

私はFlow作成時にGoogle Apps Scriptで書かれている方々の設定値を参考にしましたが
Referenceを見ると豊富ですね!AIモデルの数が豊富って素敵✨

All Englishですが翻訳機能を使ったりして目を通しておくことをおすすめします。
AIの種類や設定値も多様なんだ!って感動でした。

HTTP要求

image.png

URI

https://api.openai.com/v1/completions

ヘッダー

項目
Content-Type application/json
Authorization Bearer 秘密鍵

オーソドックスなパターンです。

Body

項目 データ型
model モデル名 文字列
prompt 質問の文章 文字列
temperature ランダム性 数値
max_tokens 単語数 数値

ポイントはデータ型を気を付けましょう。
ダブルクオーテーションで囲むところと、囲まないところ が混在するので注意です!

戻り値

HTTP要求から戻るBodyのスキーマです。

スキーマ
{
    "type": "object",
    "properties": {
        "id": {
            "type": "string"
        },
        "object": {
            "type": "string"
        },
        "created": {
            "type": "integer"
        },
        "model": {
            "type": "string"
        },
        "choices": {
            "type": "array",
            "items": {
                "type": "object",
                "properties": {
                    "text": {
                        "type": "string"
                    },
                    "index": {
                        "type": "integer"
                    },
                    "logprobs": {},
                    "finish_reason": {
                        "type": "string"
                    }
                },
                "required": [
                    "text",
                    "index",
                    "logprobs",
                    "finish_reason"
                ]
            }
        },
        "usage": {
            "type": "object",
            "properties": {
                "prompt_tokens": {
                    "type": "integer"
                },
                "completion_tokens": {
                    "type": "integer"
                },
                "total_tokens": {
                    "type": "integer"
                }
            }
        }
    }
}

この中で返ってくる質問への答えはchoicesです。
なんとArrayなんですね。複数回答が返ってくるのか・・・と驚きですが、
検証として、最初の要素のテキストを取得します。

同時に、改行コードなど余計なモノが入っているのでtrim関数を挟みます。

@{trim(body('HTTP')?['choices'][0]?['text'])}

これでFlowは完成です。


2. Power Virtual Agentsを作成する

さて、ここでBotをたてます。
運用向けのビルドでサクっとプロビジョニングします。

image.png

  • 参考 PVAの画面

トリガーフレーズに対する反応が予め揃っていますね。
今回初めて触りましたが、あっ!これはいるよね! と思う内容は網羅されています。

image.png

挨拶などは確かに一から設定することがとても手間ですのでありがたい・・

さて、Power Automateとのコラボレーションに移ります。

image.png
image.png

  1. トリガーフレーズ OpenAIで問い合わせが開始
  2. Botから「What do you want to hear?」が返ってくる
  3. 聞きたい質問を返す
  4. 変数questionに質問が全部格納され、Power Automateのフローが起動する
  5. Power Automateから文字列が返り、変数answerに返す
  6. answerをそのまま返答として返す

慣れればどうにでもなりそうですね。
他の対話の中でも、リダイレクトという形でOpenAIの話題に持っていくことが出来るので、繰り返し内容確認が出来そう!

注目ポイント Power Virtual Agents!

画像は実際の挙動です。

なんとTeamsに入っています!わからないことスグ確認できるじゃん!!凄すぎる👀✨

他にもリーチできる範囲は大きい!

image.png

いやあAIの波は改めて凄い・・・。私の仕事も無くなるかも・・・。
それまでに楽しみながら勉強したいと思います!

それでは皆様、良いPower Lifeを!!

15
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?