Google Bard API （Vertex AI）をPower Automateから使用するためには

# はじめに
Power AutomateからChatGPTを利用する方法は、記事で目にしますが、
これから**Google Bard**の検証をしてみよう！と思いますので、
備忘録として　**「Google Bard API(Vertex AI)」** を、**Power Automate** から実施する方法を残していきたいと思います。

:::note info
2023.08.10時点の記事です。
カスタムコネクタは検索したところ、見当たらない・・・。
見落としがあったら申し訳ないです。
:::

:::note warn
Cloud SDKが必要になります。
:::

## Google Bardについて
> Google Bardは、Googleが提供する自然言語生成（NLG）プラットフォームです。自然言語を理解し、論理的な文章や回答を生成することができます。人工知能を使用してテキストを生成したり、FAQ文書を自動生成するなどの目的に使用できます。Google Bard APIを使用するには、Googleアカウントが必要です。

By Bing Chat


# Google Cloud Platformでプロジェクトを作成する
## <1> Google Cloud Platformの設定
### 1. Google Cloud Platformにアクセス
https://cloud.google.com/?hl=ja

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/45648660-a1d9-5256-9e51-6bfe2daca4dc.png)

この画面で赤枠「ログイン」か「試用開始」で利用環境を用意してください。

:::note alert
課金の管理は自己責任で願いします。
:::

## 2. プロジェクトを新しく作成する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/ef6ba65e-e87e-f447-daea-4c6099afd7f2.png)

①の部分をクリックして、「プロジェクトの選択」画面が出ます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/68488880-0b50-ccda-699d-802f06fd211f.png)

**「新しいプロジェクト」から、必要情報を入力してプロジェクトを作成しましょう！**
デプロイはすぐに完了します。

## 3. 「Vertex AI」を有効にする
1. **「APIとサービス」のダッシュボード**にアクセスします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/dfec227f-b65c-ded3-4093-5a6d5a2cc365.png)

1. 次に **「+ APIとサービスの有効化」** をクリックしましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/e1a3c9c7-fda4-e643-8077-02089913d017.png)

1. **APIライブラリ** に移ります。ここで **「Vertex AI」** と入力し、クリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/d7dbf2a9-579a-41a7-7aa8-2369822f5ca4.png)

    - **「推奨 APIの有効化」** をします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/6206d573-7ecb-327a-25da-6780fba72236.png)

#### 設定が終わり次第、Vertex AIのページに転移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/dd3b5717-04c9-bf15-aff8-d539783a535b.png)


:::note info
別の画面に立ち戻ってしまった場合は、
コマンドパレットから「Vertex AI」と入力し、クリックすると、
Vertex AIのページに移ることが出来ます。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/09e66a51-9e62-6ae3-8647-2fb4837922b4.png)

## 4. Generative AI Studio > 言語 > 会話を開始をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/3664d7f6-2660-97c6-6ad5-1ceebff764f4.png)

**Vertex AI**のページは宝石箱のように機能が山盛りです！
ここを探索するだけでもワクワクします！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/6809656a-cd61-5530-6756-f21d3639e043.png)

**このメニューがChatGPTのように使えるText CHATが実施できる画面になります。**
Generative Studioは見どころ満載のページなので、後で探索したいところです👀✨


## 5. APIで利用するチャットのパラメーターを設定する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/5a82e4a6-8144-881d-11c0-dd0680b1c799.png)


## 6. Power Automateに設定する値を取得する
### プロンプトを試せるページに転移します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/7cc448ee-21cd-1919-8002-469e1739127f.png)

 - コンテキストや例を最初に設定できることが特徴的です。
 - APIで対話するうえでもJSONの形式が異なることがここから想像できます。

モデルの詳細はこちらからどうぞ！

https://cloud.google.com/vertex-ai/docs/generative-ai/learn/models?_ga=2.267734158.-1642835057.1691406148&_gac=1.174529184.1691680611.36c5255618c31054bb904182f4539d8c

サクっとまずはAPIの検証がしたいので右上の **「コードを表示」** をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/c8a545c4-3dd4-d450-4f58-b4d2d6e1d6c9.png)

#### CURLを選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/922a0bea-5eb1-791f-e822-c0601b9291f5.png)

こちらで手順も紹介されています。

1. Google Cloud SDKをインストールする
1. コマンドを実行し、Google アカウントを使用して認証します。
1. Enter the following to request a model response < **これが実際に設定する値になります**

コンテキストやパラメーターを調整したうえで、試したい場合は、あらかじめ画面で設定したうえで開くと良いです。
ここにCURLの値をボカしながら書きます。

```shell
API_ENDPOINT="MY API ENDPOINT"
PROJECT_ID="PROJECT ID"
MODEL_ID="chat-bison@001"

curl \
-X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
"https://${API_ENDPOINT}/v1/projects/${PROJECT_ID}/locations/us-central1/publishers/google/models/${MODEL_ID}:predict" -d \
$'{
    "instances": [
        {
            "context": "",
            "examples": [],
            "messages": []
        }
    ],
    "parameters": {
        "temperature": 0.2,
        "maxOutputTokens": 256,
        "topP": 0.8,
        "topK": 40
    }
}'
```

### 設定値のPoint
この画面から、**HTTP要求の設定値が判明します**。

|項目|値
|---|---
|方法|POST
|URI|https://**API_ENDPOINT**/v1/projects/**PROJECT_ID**/locations/us-central1/publishers/google/models/**MODEL_ID**:predict

#### ヘッダー
|Column1|Column2
|---|---
|Content-Type|application/json
|Authorization|Bearer `gcloud auth print-access-token`

この`gcloud auth print-access-token`を取得するためには、
**Cloud SDK**のダウンロードが必要になります。

#### 本文
`messages`の部分のみ追記しましたが以下の通りです。

```json
{
  "instances": [
    {
      "context": "",
      "examples": [],
      "messages": [
        {
          "author": "user",
          "content": "ここがプロンプトに該当します！"
        }
      ]
    }
  ],
  "parameters": {
    "temperature": 0.2,
    "maxOutputTokens": 256,
    "topP": 0.8,
    "topK": 40
  }
}
```
`ChatGPT`と比較するとJSONに格納されている値が多いことがポイントですね。

さて、ここから
 - Googleの認証
 - `gcloud auth print-access-token`を取得

#### この二つが必要なので見ていきましょう！

## <2> Cloud SDK
### 1. Cloud SDKのダウンロード

細かい説明は省きます。
一緒にドキュメントを見ながら頑張りましょう！

まずは**Cloud SDKのダウンロード**です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/b8183de7-50f3-dc69-5f13-74b2a51b2208.png)

インストーラーをダウンロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/4fb78e68-e60f-f8aa-a953-ae1952b19b76.png)

インストール後に、下記の設定が必要になります。

- Google ユーザー アカウントを使用してログイン認証
- Google Cloud プロジェクトのリストからプロジェクトを選択

### Google Cloud SDK Shellの操作

まずは下記のコマンドでGoogleアカウントの認証を実施します。

```shell
$ gcloud auth application-default login
```

実行すると認証画面に移るので、Googleアカウントを選択しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/8de97553-e534-8127-b162-042010a94722.png)

次に **Google Cloud プロジェクトの選択** を求められます（初回のみ）
数が多くなければ選択式になります。
こちらにて、**Bard API もとい Vertex AIのプロジェクトを設定します。**

その後、下記のコマンドを実施しましょう。
```shell
$ gcloud auth print-access-token
```

こちらが、Power Automateに必要な`gcloud auth print-access-token`です。

#### 役者が揃いました！
では、いよいよPower Automateにて使ってみましょう！

# Power Automateで実装
## 早速フローへ
#### 検証目的なので`インスタントフロー`で実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/3c746a95-a90a-d7a7-573b-185fd8ae995f.png)

#### 1. 変数を初期化する プロンプトの設定
ユーザーの質問です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/1df46bdc-1907-24a4-2692-fcfb3a59b20d.png)

#### 2. 変数を初期化する API_ENDPOINT
Vertex AIのコード画面からそのまま転写しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/3327e7ac-de3a-013a-30cd-1e43dd079d35.png)

#### 3. 変数を初期化する PROJECT_ID
同上
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/1e89df35-0e97-dde2-c02f-b25649d9c938.png)

#### 4. 変数を初期化する MODEL ID
同上
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/64a074fd-b330-3010-f3c4-f79c79a0d4e0.png)

#### 5. 変数を初期化する gcloud auth print-access-token
上記と同じように変数にて、`gcloud auth print-access-token`を格納します。
言わずもがな絶対に漏らしてはいけない情報です。

#### 6. HTTP
ここでAPIを実行するアクションが入ります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/9d51127b-05b1-b17f-7b76-3e67fad38e01.png)


##### ここで一回テストをしてみましょう！
戻り値のJSONは下記の様になりました！

```json
{
  "predictions": [
    {
      "citationMetadata": [
        {
          "citations": []
        }
      ],
      "candidates": [
        {
          "author": "1",
          "content": "日本で二番目に大きい湖は、琵琶湖です。"
        }
      ],
      "safetyAttributes": [
        {
          "scores": [
            0.1
          ],
          "categories": [
            "Death, Harm & Tragedy"
          ],
          "blocked": false
        }
      ]
    }
  ],
  "metadata": {
    "tokenMetadata": {
      "inputTokenCount": {
        "totalTokens": 9,
        "totalBillableCharacters": 13
      },
      "outputTokenCount": {
        "totalTokens": 14,
        "totalBillableCharacters": 19
      }
    }
  }
}
```

**思いっきり間違っていて苦笑いですが、戻り値の形式がわかりました。**
使いやすいように`JSON の解析`アクションを挟みましょう！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/dfe25236-49ad-de04-dddc-1136a0e7970d.png)

[サンプルから生成]にて、先ほどの戻り値からスキーマを設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/fd668963-f043-1910-dbbb-25275d2e68c1.png)

解析をすると、JSONの中身がほとんど`Array 配列`ですね・・・。

仮に一番最初の回答の部分だけもらう場合の数式は下記のとおりです。

```yaml
body('JSON_の解析')?['predictions'][0]?['candidates'][0]?['content']
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2734332/0dcfb7a7-e5ab-4500-e07f-e21a901c6831.png)

#### めちゃめちゃ間違っていますがPower Automateは上手くできました！
さてさて、AI時代のいろいろなモデルが出て来る事は面白いことこの上ないですね！

これで**Power Platformで遊ぶ準備ができた・・・**、フフフフフ。
ということでいろいろチャレンジしたいと思います。

##### よいPower Lifeを！See you next time♬