SQLからLLMを利用できるDatabricksのai_generate_text()のセットアップと検討事項

[Set up and considerations for ai\_generate\_text\(\) \| Databricks on AWS](https://docs.databricks.com/large-language-models/ai-onboard.html) [2023/6/30時点]の翻訳です。

:::note warn
本書は抄訳であり内容の正確性を保証するものではありません。正確な内容に関しては原文を参照ください。
:::

:::note info
**プレビュー**
本機能は[パブリックプレビュー](https://docs.databricks.com/release-notes/release-types.html)です。
:::

本書では、`ai_generate_text()`関数を使う前に、何を検討すべきか、何をセットアップすべきか、特にどのように認証情報を取得し、セキュアに格納するのかについて説明します。また、機能の制限やコストパフォーマンスの検討についても説明します。

# `ai_generate_text()`とは？

`ai_generate_text()`関数は、SQLから直接大規模言語モデル(LLM)にアクセスすることができるビルトインのDatabricks SQL関数です。この関数は、現在OpenAIモデルとAzure OpenAIモデルへのアクセスをサポートしており、ユーザーはデータパイプラインや機械学習ワークロードにおけるビルディングブロックとして活用できます。構文やデザインパターンに関しては、[ai\_generate\_text function](https://docs.databricks.com/sql/language-manual/functions/ai_generate_text.html)の言語マニュアルコンテンツをご覧ください。

`ai_generate_text()`のユースケースには、翻訳、要約、推奨アクション、トピックやテーマの特定などが含まれます。

以下にDatabricksにおけるLLM活用のメリットを示します:

- オープンソースLLMやプロプライエタリLLMに対する統合アクセス、管理レイヤー。
- サーバレス、オートスケーリング、データ連携されたLLMのインフラストラクチャ。
- ご自身のビジネス要件やユースケースに合わせて、ポイントアンドクリックでLLMをカスタマイズできるシンプルさ。
- 高度なユーザー向けには、オープンソースLLMの迅速な開発、カスタマイズのためのツール。

# 要件

- AI Functionsパブリックプレビューへの登録。パブリックプレビューに登録するには、[AI Functions Public Preview enrollment form](https://docs.google.com/forms/d/e/1FAIpQLScVyh5eRioqGwuUVxj9JOiKBAo0-FWi7L3f4QWsKeyldqEw8w/viewform)を提出してください。
- AzureやAWSで利用できるDatabricks SQL ProあるいはServerless。
- この機能はデータがあなたのSQL環境から出て、サードパーティLLMモデルプロバイダーであるOpenAIやAzure OpenAIに送信されることの価値や用法の理解。
- OpenAIやAzure OpenAIにアクセスできること。
- GPT 3.5 Turboモデルがデプロイされていること。

# 認証情報の取得

`ai_generate_text()`関数を使うには、Azure OpenAIやOpenAIにアクセスできる必要があります。

以下のステップを通じてAzure OpenAI認証情報を取得します。認証情報では`resourceName`、`deploymentName`、`ai_generate_text()`のパラメーターを入力します。

1. Azure PortalのCognitive Servicesに移動し、Azure OpenAIを選択します。
1. 使用したいリソースを選択します。
1. Resource Managementで**Keys and Endpoint**を選択します。
1. キーとリソース名をコピーします。
1. Resource Managementで**Model Deployments**を選択します。
1. モデルデプロイメント名をコピーします。

OpenAIでは、OpenAIに移動してキーを作成するためにAPIキーを選択します。

:::note
**注意**
既存のキーの設定のキーをコピーすることはできません。
:::

以下のいずれかを行うことができます:

- 設定を作成した個人、あるいは、プリンシパルからキーを参照することができます。
- 新規のキーを作成し、作成に成功したキーをコピーすることができます。

# アクセストークンの格納

:::note warn
**重要！**
ノートブック、コード、gitリポジトリに平文としてトークンを**含めないでください**。
:::

APIトークンを保持するためにDatabricksシークレットを活用することができます。シークレットを作成するために[Secrets CLI](https://docs.databricks.com/archive/dev-tools/cli/secrets-cli.html)、[Secrets API 2\.0](https://docs.databricks.com/api/workspace/secrets)を活用することができます。以下の例のステップでは、Secrets CLIを使っています:

1. OpenAIキーを保持するシークレットスコープがない場合には作成します:

    `databricks secrets create-scope --scope openai`

1. OpenAIへの接続を許可するユーザーやグループに対してREAD権限以上を付与する必要があります。`openai-users`グループを作成して、そのグループに許可するユーザーを追加することをお勧めします。

    `databricks secrets put-acl --scope openai --principal openai-users --permission READ`

1. APIアクセストークンのシークレットを作成します。`<resource-name>-key`というフォーマットにすることをお勧めします:

    `databricks secrets put --scope openai --key demo-key --string-value yourkey123`

# 制限

- インタラクティブクラスターやジョブクラスターでは`ai_generate_text()`はサポートされていません。
- このプレビューでサポートされているモデルは、`openai/gpt-3.5-turbo`と`azure_openai/gpt-35-turbo`のみです。
- `openai/gpt-3.5-turbo`と`azure_openai/gpt-35-turbo`のトークン制限は4096です。

# コストパフォーマンスの検討

- OpenAIとOpenAIサービスにはサブスクリプションが必要であり、Databricksとは別の課金が発生します。
    - OpenAIとAzure OpenAIサービスのトークンコストは入力と出力の両方に適用されます。
    - 詳細は[OpenAI pricing page](https://openai.com/pricing)、[Azure OpenAI pricing page](https://azure.microsoft.com/pricing/details/cognitive-services/openai-service/)をご覧ください。
- 特定のクエリーでは、LLM APIの呼び出しは、関数が呼び出されるカラムにおいてシーケンシャルに行われます。
    - ほとんどのSQL関数と比較して、`ai_generate_text()`を用いたクエリーは遅くなる傾向があります。
- AI Functionsを呼び出すクエリーのレスポンスタイプは、プロンプトで指定されるタスクと、指定されリクエストされるトークンの数の両方に依存します。
- Azure OpenAIサービスはプレビュー時点では、少数の[Azureリージョン](https://learn.microsoft.com/azure/cognitive-services/openai/concepts/models#gpt-3-models)でのみ利用できます。

# その他のリソース

[ai\_generate\_text function](https://docs.databricks.com/sql/language-manual/functions/ai_generate_text.html)の構文やデザインパターンの言語マニュアルドキュメントをご覧ください。

ビジネスシナリオにおける`ai_generate_text()`の使い方の例については、[Analyze customer reviews with ai\_generate\_text\(\) and OpenAI](https://docs.databricks.com/large-language-models/ai-generate-text-example.html)をご覧ください。

### Databricksクイックスタートガイド

[Databricksクイックスタートガイド](https://www.amazon.co.jp/dp/B09V1YXFVQ/)


### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)