HeatWave Chatのチュートリアル

# 資料紹介
HeatWave GenAIはHeatWaveに組み込まれた機能で、自然言語クエリを使用してHeatWave環境と通信できます。大規模言語モデル(LLM)を使用して自然言語通信を可能にし、エンタープライズ固有の独自コンテンツを保存するために使用できる組み込みのベクター・ストアを提供します。
HeatWave Chatは、テキスト生成とベクター検索を拡張して、1 回のセッションでトピックに関する複数のフォローアップの質問をできるようにするチャットボットです。ベクター・ストアによって取り込まれたドキュメントから知識を引き出すこともできます。
この資料では、ベクター・ストア機能を使用し、HeatWave Chatを使用して、ユーザー・ガイドなどの資料を参照して、関連のクエリに応答するAI搭載のヘルプ チャットを作成する方法を説明します。
# HeatWave環境の準備
ここでHeatWaveプロビジョンの詳細手順を紹介しません。以下の点をご注意ください。
- HeatWaveのバージョンは「9.0.0 革新」以上である必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/234809b4-3c37-8e24-b889-4139bd04dac9.png)
- プロビジョンの後、HeatWaveレイクハウスを有効にします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/5f03ba8e-956c-65d9-47d3-5f7050728bb0.png)
- HeatWaveクラスタを有効化する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/7a73d7a0-fde5-7a6a-142d-7be1827ffa8c.png)

# Object Storageへファイルのアップロード
- [HeatWave user guide PDF (A4) - 1.7Mb](https://downloads.mysql.com/docs/heatwave-en.a4.pdf)から英語のドキュメントをダウンロードします。
- [Oracle Analytics Cloud](https://docs.oracle.com/cloud/help/ja/analytics-cloud/ACUBI/ACUBI.pdf)でのデータのビジュアル化およびレポートの作成から日本語のドキュメントをダウンロードします。
- Object Storageのバケットを作成をします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/3b55dbc5-df3e-5525-63bc-2600d330ae19.png)

- 作成したバケットを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/952a8143-736f-77c9-a3b4-a2aff415ebcf.png)
- ダウンロードしたドキュメントをObject Storageのバケットにアップロードします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/5f918372-549b-e96d-fde4-41de18391c1b.png)

# ベクターストアの設定

- データベースに接続します。
- 以下のコマンドで、データベースを作成します。
```
create database quickstart_db;
use quickstart_db;
```

- 以下のコマンドを実行して、タスク管理に使用するスキーマを作成します。
```
select mysql_task_management_ensure_schema();
```
- 以下のコマンドを実行して、ベクター・テーブルを作成し、ソース・ドキュメントを読み込みます。これにより、指定されたテーブルにベクトル埋め込みをロードするタスクがバックグラウンドで作成されます。
```
call sys.vector_store_load('oci://<BucketName>@<TencyName>/<FolderName>/<DocumentName>', '{"table_name": “<VectorTableName>"}');
```

- 以下コマンドを実行して、タスクの進行状況を追跡します。
```
select id, name, message, progress, status, scheduled_time,estimated_completion_time, estimated_remaining_time, progress_bar 
FROM mysql_task_management.task_status 
WHERE id=<TaskID>\G;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/28d7c622-5fcd-7d97-2656-75dde05e8a3f.png)
- 以下のコマンドを実行して、ベクトル埋め込みテーブルにロードされていることを確認します。
```
select count(*) from <VectorTableName>;
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/03ed0475-326c-21d8-195e-f366ecf087f8.png)
- 使用できるLLMは2つあります。次のいずれかのステートメントを使用して、LLMをロードします。
```
CALL sys.ML_MODEL_LOAD("mistral-7b-instruct-v1", NULL);
```
```
CALL sys.ML_MODEL_LOAD("llama2-7b-v1", NULL);
```
# HeatWave Chatの使用
HeatWave Chatは、SQL　APIとグラフィカル・インターフェイスを2つインターフェイス公開します。まず、SQL APIを使用します。
- 以前のチャット履歴と状態をクリアしたい場合は、以下のコマンドを実行して、セッションをリセットします。
```
set @chat_options=NULL;
```
- HeatWave チャットを使用して質問します。
```
call sys.heatwave_chat("What is HeatWave AutoML?");
```
heatwave_chatメソッドは、デフォルトでLLMを自動的にロードし、利用可能なベクトル・ストアでコンテキスト検索を実行します。出力は次のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/ba2f40ac-71f5-abb4-4820-d7cb30364339.png)
- 追加の質問をします。
```
call sys. heatwave_chat("How to set it up?");
```
出力は次のようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/74161803-5ae3-fbd2-75ca-7f33805321b2.png)
- sys.heatwave_chat を使用するとすぐに応答が返されますが、検索条件を変更するために使用できるオプションはありません。
sys.ML_GENERATE メソッドには、使用できるオプションがいくつかあります。例として、生成される max_tokens の数のオプションを提供しました。オプションの詳細については、[ここ](https://dev.mysql.com/doc/heatwave/en/mys-hwgenai-ml-generate.html)をご参照ください。
```
set @chat_options=NULL;
set @query=“Oracle Analytics Cloudレポートを作成する手順を日本語で教えて下さい”;
select sys.ML_GENERATE(@query, JSON_OBJECT('max_tokens', 2048));
```
出力はこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/b91f0bd2-4630-32d5-3444-41d1acb715de.png)
- sys.ML_RAG メソッドは、他の 2 つのメソッドよりも多くの情報を提供します。RAG によって生成される出力は、次の 2 つの部分で構成されます。テキスト セクションには、クエリに対する応答として LLM によって生成されたテキストベースのコンテンツが含まれます。 引用セクションには、コンテキストとして参照されたセグメントとドキュメントが表示されます。
```
CALL sys.ML_RAG(“Oracle Analytics Cloudレポートを作成する手順を日本語で教えて下さい", @output,  NULL);
SELECT JSON_PRETTY(@output) \G;
```
出力はこのようになります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/852fec0c-04c4-cb22-9554-1da3c1715cdb.png)

- 続いて、 MySQL ShellやVisual Studio Codeと統合されたグラフィカル・インターフェイスでHeatWave Chatを使用します。「Open Lakehouse Navigator」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/8b916feb-852f-e2d8-d242-f49af1308215.png)

- Object Storageからファイルを選択します。Vector Store Tableの名前を入力します。スキーマとファイルのフォーマットを選択します。Load Taskを開始します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/d662d532-db7c-ef45-122e-ecd8a3dd53af.png)
- ファイルがLakehouseにロードされたことを確認します。ここでLakehose中のファイルをロードあるいは削除できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/24cc8b17-4673-6862-cd3b-036551dfbf8f.png)
- HeatWave チャットを使用して質問します。右側で、会話の履歴と参考テーブルやドキュメントがリストされます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/0102b958-2024-7ea6-669f-eff78c1b883a.png)
- また、Translationで日本語を指定して、日本語の回答をいただけます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/ab7fcf6e-e128-bb43-8693-76df33e14844.png)
- 生成されたPromptを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851448/4bca1116-3a94-f330-0607-1f7712a38034.png)