Vertex AI Agent Builder を試してみた

# Vertex AI Agent Builderとは?

Vertex AI Builderとは、AIエージェントとアプリケーションを作成可能なAIエージェントとアプリケーション構築を行うものです。

> エンタープライズ向け生成 AI エクスペリエンスの構築とデプロイ
自然言語またはコード ファーストのアプローチを使用して、AI エージェントとアプリケーションを作成します。さまざまなオプションを使用して、エージェントやアプリをエンタープライズ データに簡単にグラウンディングできます。Vertex AI Agent Builder は、デベロッパーが AI エージェントとアプリケーションを構築するために必要なすべてのサーフェスとツールを収集します。

**Vertex AI エージェント**と**Vertex AI Search**から構成され、生成AIアプリケーションを作成可能

> Vertex AI Agent Builder を使用すると、ML のスキルがまだ十分ではないデベロッパーでも、Google の基盤モデル、検索技術、会話型 AI テクノロジーの力を活用して、エンタープライズ グレードの生成 AI アプリケーションを作成できます。
> Vertex AI Agent Builder は、次の機能で構成されています。
> > Vertex AI エージェント
> > Vertex AI Search

## Vertex AI エージェントとは?

LLM上に構築された新しい**自然言語理解プラットフォーム**です。
[doc](https://cloud.google.com/dialogflow/vertex/docs?hl=ja)

> Vertex AI エージェントは、大規模言語モデル（LLM）上に構築された新しい自然言語理解プラットフォームです。 これにより、会話型のユーザー インターフェースを簡単に設計し、モバイルアプリ、ウェブ アプリケーション、デバイス、bot、インタラクティブ音声レスポンス システムなどに容易に統合できます。 Vertex AI エージェントを使用すると、プロダクトを操作する新しい形の方法をユーザーに提供できます。

## Vertex AI Searchとは?

Vertex AI Searchは、大規模言語モデルを活用した**フルマネージドプラットフォーム**です。
[doc](https://cloud.google.com/generative-ai-app-builder/docs/enterprise-search-introduction?hl=ja)

できることは、
1. アプリを検索
    1. 一般的な検索
    1. メディア検索
    1. 医療検索
1. レコメンデーションアプリ
    1. メディアレコメンデーション
    1. 汎用レコメンデーション

です。

> Vertex AI Search は、大規模言語モデルを活用したフルマネージド プラットフォームです。公開または限定公開のウェブサイトやモバイルアプリに AI 対応の検索とレコメンデーション エクスペリエンスを構築できます。

> アプリを検索
Vertex AI Search を使用すると、独自のデータに基づいて Google 品質の検索アプリをすばやく構築し、ウェブページやアプリに検索バーを埋め込むことができます。

> 作成できる検索アプリの種類は次のとおりです。

>> 一般的な検索。一般的な検索を、独自のデータを含むウェブサイトまたはデータストアに適用して、ユーザーに表示するコンテンツに対して Google 品質の検索エクスペリエンスを提供します。

>> メディア検索。これは、映画、動画、音楽などのメディア コンテンツ用に特別に設計された検索機能です。メディア検索を使用すると、視聴者やリスナーは視聴または視聴したいメディア コンテンツを効率的に見つけることができます。

>> 医療検索。これは、FHIR データストアに保存されている医療レコードをクエリできる検索機能です。臨床データを含む FHIR リソースは、Cloud Healthcare API FHIR ストアからインポートできます。FHIR リソースによって参照される非構造化データ（画像、PDF ファイル、RTF ファイルなど）を検索することもできます。

> レコメンデーション アプリ
ユーザーが閲覧中のコンテンツに類似したコンテンツを提案できる最新のレコメンデーション アプリを、独自のデータ上に手軽に構築できます。

> 作成できるレコメンデーション アプリには、次の 2 種類があります。

>> メディア レコメンデーション。動画、ニュース、音楽などのメディア コンテンツのおすすめを取得します。メディア レコメンデーションを使用すると、最適化目標によってカスタマイズされた Google の高精度な検索結果により、オーディエンスは、次に視聴するコンテンツや読むコンテンツなど、よりパーソナライズされたコンテンツを見つけることができます。

>> 汎用レコメンデーション（プレビュー）メディア以外のコンテンツのおすすめを取得します。

## 料金
| 商品 | 価格 |
| ---- | ----|
| Vertex AI agent | $12 クエリ 1,000 件あたり |
| Vertex AI Search | $2 クエリ 1,000 件あたり |

## エージェント アプリを作成する
### Dialog flowの設定とクリーンアップ [url](https://cloud.google.com/dialogflow/cx/docs/quick/setup?hl=ja)

[会話型エージェントのフロー](https://cloud.google.com/dialogflow/cx/docs/basics?hl=ja) についてまず知る必要があります。

[エージェントのエディション](https://cloud.google.com/dialogflow/docs/editions?hl=ja) により多少スペックに差が存在します。

1. **コンソール**に移動する
1. **課金**を有効にする
1. **Dialogflow API** を有効化する
1. Google Cloud CLI をインストールして初期化する [url](https://cloud.google.com/sdk/docs/install?hl=ja)

### アプリケーションの作成

1. [新しいアプリを作成] または [新しいアプリ] をクリックします。
1. [エージェント] を選択します。
1. アプリ名に「シャツのオーダー アシスタント」と入力します。
1. リージョンを選択します。
1. [作成] をクリックします。

下記のような画面が作成されます。

![スクリーンショット 2025-01-24 21.36.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579576/ca35f66d-3b1f-3708-8011-92ee93c5a5ce.png)

### オーダーエージェントを作成する
1. エージェントを作成
1. 名前を入力します: Order
1. 目標を設定

    > You are a shirt store ordering agent. Help customers purchase shirts.
Help the customer choose a size and color.
The shirts come in small, medium, and large.
The shirts can be red, green, or blue.

1. 指示を入力

    > `- If the customer has not provided a size, ask them to choose a size.`
    > `- If the customer has not provided a color, ask them to choose a color.`
    > `- Once the customer has selected a size and color for the shirt,
  repeat the selection to the customer, and ask them to confirm the selection.`
    > `- Once the customer has confirmed their selection,
  let them know that the shirt is now ordered.`
    > `- Do not provide prices or collect payment.`
    > `- Do not collect the customer's name or address."`
    
1. 保存する

### 情報エージェントを作成する
1. [作成] をクリックします。
1. 名前を入力します: Information。
1. 次の目標を入力します。

    > You provide information about a shirt store.
The store is open between 8 AM and 6 PM every day.
The store is located at 1007 Mountain Drive, Gotham City, NJ.
1. 次の指示を入力します。

    > `- If the customer asks for the store location, provide them with the address.`
`- If the customer asks for the store hours, provide them with the hours.`

### デフォルトのエージェントを更新する
1. 目標を追加します。
    > You are an agent for a shirt store.
Your name is "Samantha".
Your job is to direct customers to other agents based on the customer's questions.

1. 指示を追加します。
    > `- If the customer hasn't been greeted yet, greet the customer,
  introduce yourself, and ask the user how you can help.`
`- If the customer wants information about the store,
  route them to ${AGENT: Information}`
`- If the customer wants to purchase a shirt,
  route them to ${AGENT: Order}`

1. 保存します。

![スクリーンショット 2025-01-24 21.57.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579576/c13526e8-ebc8-76c6-be05-101c6125f59e.png)

### 例を示す
1. **Send a message to see how your agent responds** を開きます。
1. gemini-proを選択
1. デフォルトを選択
1. helloを送信
    ![スクリーンショット 2025-01-24 22.01.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579576/12e81cfd-6782-77ba-fc27-5922e2835ab0.png)
1. 会話をsampleとして保存する
1. Orderも同様にsampleとして保存する
    ![スクリーンショット 2025-01-24 22.10.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3579576/1f678961-78f6-8e4c-5350-a05a74f3f411.png)

## APIによるインタラクション

前述のエージェント アプリを作成するで利用したエージェントで引き続き作業を行います。

### IDを収集する
- プロジェクトIDは、コンソールの上部に表示されます
    - vertexaibuilderpractice1
- 場所
    - asia-northeast1
- エージェントアプリID
    - `71e2bffe-114f-4972-9a41-196b31f06637`

### detectIntent を呼び出す
"I want buy t-shirt"というtextを送ると、
"We have a wide variety of shirts. What size and color would you like?"
というメッセージが返ってきているのが確認できる。
また、このSesion Idを入れて再度requsetを送ることで会話することが可能です。
```
taketo@MacBook-Pro-4 group_party_app % curl -X POST \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "x-goog-user-project: vertexaibuilderpractice1" \
     -H "Content-Type: application/json; charset=utf-8" \
     -d @request.json \
     "https://asia-northeast1-dialogflow.googleapis.com/v3/projects/vertexaibuilderpractice1/locations/asia-northeast1/agents/71e2bffe-114f-4972-9a41-196b31f06637/sessions/test-session-000:detectIntent"
{
  "responseId": "90730045-9e8d-4696-84d5-d4642e6c30d8",
  "queryResult": {
    "text": "I want buy t-shirt",
    "languageCode": "en",
    "responseMessages": [
      {
        "text": {
          "text": [
            "We have a wide variety of shirts. What size and color would you like?"
          ]
        }
      }
    ],
    "intentDetectionConfidence": 1,
    "diagnosticInfo": {
      "Response Id": "90730045-9e8d-4696-84d5-d4642e6c30d8",
      "Session Id": "test-session-000"
    },
    "match": {
      "matchType": "PLAYBOOK",
      "confidence": 1
    },
    "advancedSettings": {
      "loggingSettings": {}
    }
  },
  "responseType": "FINAL"
}
taketo@MacBook-Pro-4 group_party_app % 
```

# Googleが作成済みのAgentに関して

## Travel のビルド済みエージェント
https://cloud.google.com/dialogflow/vertex/docs/concept/prebuilt-agent/travel?hl=ja

### 可能な処理
- 場所の検索とホテル予約が可能です。
- おすすめの旅行の提案が可能です。

### 使用方法
- ビルド済みエージェントをインポート
- 付属のツールを外部サービスで構成します。
  - 場所の検索
  - ホテルの検索
  - ホテルの予約
  - ユーザー プロファイルの取得 

# まとめ
Vertex AI Agent Builderを利用して、簡単なエージェントを作成した。
簡単なエージェントとGoogle Cloud上で対話を行った。
簡単なエージェントとAPIから対話を行った。