Amazon Kendra使いがVertex AI Search and Conversationやってみた

普段AWSばかりですが、他社の動向も知っておきたいと思って、Vertex AI Search and Conversationを試しました。

先入観としては、Amazon KendraのAzure版だと思って始めました。うまく行けばRAGの情報源にしてKendraと比較がしたいと目論んでおります。
Google Cloudに詳しい方のツッコミお待ちしております（笑）

Kendraについてはここを見るとわかった気になれます。

https://aws.amazon.com/jp/builders-flash/202302/kendra-search-system/

「Azure AI Searchをやってみた」はこちら

https://qiita.com/moritalous/items/0a99999891b8250efd76


## Vertex AI Search and Conversationを作ってみた。

ポチポチします。

1. コンソールで`検索と会話`を開く。（日本語はこれが正式名称ですか？）
    `新しいアプリ`をクリック

    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913(1280x720).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/741865ba-97d2-53bc-e15b-73d43630c65d.png)

1. 検索を選択
    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/0658197d-b7b1-3107-4efd-c3aa81002c5c.png)

1. 汎用を選択。`Enterprise edition features`と`Advanced LLM features`はオフにしました。
    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913 (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/b6628693-ef5e-28d0-69da-335a1cab3fd2.png)

1. アプリ名と会社名を入力して、`続行`
    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913 (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/fac686a7-7277-1408-e2ac-64f373fbf0bd.png)

1. `CREATE DATA STORE`をクリック

    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913 (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/38b837a8-76ac-e75e-29cb-a9e2fa294ba9.png)

1. Cloud Storageを選択

    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913 (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/bd446ff0-3b2a-c7df-b4ba-7745d54dfa5e.png)

1. フォルダーを選択。この画面でフォルダーを作成することも可能
    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913(1280x720) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/d7d4b5bf-df53-a2f2-5074-2e7266c28484.png)

1. `Document chunking`を有効にし、`Include ancestor headings in chunks`にチェック
    データストア名を入力し、`作成`をクリック
    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913 (10).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/70a2aef8-b5d4-0c12-6743-0703bc43a6b7.png)

1. `作成`をクリック

    ![console.cloud.google.com_gen-app-builder_engines_hl=ja&project=develop-414913 (11).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/7bb47444-4d27-dd06-638b-0bb663fd695c.png)

1. しばらくするとドキュメントが登録されます。

    ![console.cloud.google.com_gen-app-builder_locations_global_engines_app_1712235562885_data_documents_hl=ja&project=develop-414913(1280x720).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ed3ede92-7f25-ced7-7856-698193ba510e.png)

## Vertex AI Search and Conversationを使ってみた。

プレビューメニューから検索ができます。

![console.cloud.google.com_gen-app-builder_locations_global_engines_app_1712235562885_data_documents_hl=ja&project=develop-414913(1280x720) (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/60a5a27f-35db-b1d8-6520-9e72d783ae9c.png)

自前で検索サイトを作った気分。すてき

## LangChainのRetrieverをやってみた。

LangChainのドキュメントを参考に実施します。

https://python.langchain.com/docs/integrations/retrievers/google_vertex_ai_search

まずは[こちら](https://cloud.google.com/sdk/docs/install)を参考にgcloud CLIをインストールします。
Ubuntu環境の場合はこんな感じ。

```shell
sudo apt-get update
sudo apt-get install apt-transport-https ca-certificates gnupg curl
curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee -a /etc/apt/sources.list.d/google-cloud-sdk.list
sudo apt-get update && sudo apt-get install google-cloud-cli
```

インストールができたら次のコマンドでログインします。

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

Pythonのライブラリーをインストールします。

```shell
pip install -U google-cloud-discoveryengine
```

```python
from langchain_community.retrievers.google_vertex_ai_search import (
    GoogleVertexAISearchRetriever,
)

PROJECT_ID = "*****"  # Set to your Project ID
LOCATION_ID = "global"  # Set to your data store location
SEARCH_ENGINE_ID = "app_*****"  # Set to your search app ID
DATA_STORE_ID = "datastore_*****"  # Set to your data store ID

retriever = GoogleVertexAISearchRetriever(
    project_id=PROJECT_ID,
    location_id=LOCATION_ID,
    data_store_id=DATA_STORE_ID,
    query_expansion_condition=0,
)

query = "DXとはなんですか？"

result = retriever.get_relevant_documents(query)
for doc in result:
    print(doc)
```

実行するとエラー

> FailedPrecondition: 400 Cannot use enterprise edition features (website search, multi-modal search, extractive answers/segments, etc.) in a standard edition search engine. Please follow https://cloud.google.com/generative-ai-app-builder/docs/enterprise-edition#toggle-enterprise to enable Enterprise edition. Data store: datastore_*****

エンタープライズ機能が有効じゃないとLangChainで使えないのでしょうか？
エンタープライズ機能を有効にして再チャレンジ。

![console.cloud.google.com_gen-app-builder_locations_global_engines_app_1712235562885_data_documents_hl=ja&project=develop-414913(1280x720) (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/accab8da-b0db-397e-9717-b7e0f6570e24.png)

それでも同じエラー。。
うまくいかない。。