diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag.md b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag.md new file mode 100644 index 0000000000..01b39ca0be --- /dev/null +++ b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag.md @@ -0,0 +1,379 @@ +--- +title: "108 : SELECT AI with RAGを試してみよう" +excerpt: "データベース内データを自然言語でクエリできるSELECT AIはRAG構成においても使用できます。このチュートリアルでは実際のデータを使って、ADBだけでRAG構成を組むことのできるSELECT AI with RAGを試します。" +order: "4_108" +layout: single +header: + teaser: "/ai-vector-search/ai-vector108-select-ai-with-rag/adb-diagram-third-party-vector-db-select-ai-rag.png" + overlay_image: "/ai-vector-search/ai-vector108-select-ai-with-rag/adb-diagram-third-party-vector-db-select-ai-rag.png" + overlay_filter: rgba(34, 66, 55, 0.7) +--- + + + +# はじめに +Autonomous DatabaseのSELECT AIがRAG(Retrieval Augmented Generation)をサポートするようになりました。自然言語でデータベース内のデータを問い合わせることができるSELECT AI機能にRAGを組み合わせることで、大規模言語モデル(LLM)の知識とエンタープライズデータベースの知識との間のギャップを埋めることが可能になります。これにより、より関連性の高い応答や最新の情報を含む応答が得られ、同時にハルシネーションのリスクも軽減されます。 + +SELECT AIについては[111: SELECT AIを試してみよう](https://oracle-japan.github.io/ocitutorials/adb/adb111-select-ai/)をご参照ください。 + + +本記事では架空の製品データをベクトルストアに格納し、LLMが学習していないデータに関する質問に対してRAG構成でうまく回答できることを確認します。 + + +**前提条件 :** ++ [101:Always Freeで23aiのADBインスタンスを作成してみよう](/ocitutorials/ai-vector-search/ai-vector101-always-free-adb/){:target="_blank"}の記事を参考に、Oracle Database 23aiの準備が完了していること。 + ++ OCI Generative AI Serviceを使用できること + - OCI GenAI Serviceをご利用いただけるChicago Regionはサブスクリプション済みであること。 + + - OCI アカウントのAPI署名キーの生成は完了であること +
以下の情報を取得してください。必要があれば、[API署名キーの生成方法](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm#two){:target="_blank"}をご参照ください。 + - `user` - キー・ペアが追加されるユーザーのOCID。 + - `fingerprint` - 追加されたキーのフィンガープリント。 + - `tenancy` - テナンシのOCID。 + - `region` - コンソールで現在選択されているリージョン。 + - `key_file` - ダウンロードした秘密キー・ファイルへのパス。この値は、秘密キー・ファイルを保存したファイル・システム上のパスに更新する必要があります。 + - `compartment_ocid` - 利用するコンパートメントのOCIDを取得してください。 + + + +**所要時間 :** 約90分 + +
+ + + +# 1. データの準備 +先ずはオブジェクト・ストレージを作成し、ベクトルストアに格納するデータを格納します。 + +1. OCIコンソールのホームページから、メニューを開きます。 +![alt text](image.png) + +2. **ストレージ>オブジェクト・ストレージとアーカイブ・ストレージ**をクリックします。 +![alt text](image-1.png) + +3. **バケットの作成**をクリックします。 +![alt text](image-10.png) + +4. バケット名を入力し(本チュートリアルではselect-ai-with-ragとしています)、**作成**ボタンをクリックします。 +![alt text](image-12.png) + +5. 作成した**select-ai-with-rag**をクリックします。 +![alt text](image-13.png) + +6. [こちら](/ocitutorials/ai-vector-search/ai-vector108-select-ai-with-rag/rocket.txt)から**rocket.txt**というテキストファイルをダウンロードします。右クリックで[名前を付けて保存]をクリックするとダウンロードできます。 + + このテキストには、架空の製品であるロケットエンジンOraBoosterの説明文章が格納されています。企業内のデータを想定し、テキストの内容としては、存在しない製品かつ完全な創作文章のため、LLMが学習しているはずのないデータということになります。 + +7. 画面下部のオブジェクトから、テキストファイルをアップロードします。**アップロード**ボタンをクリックします。 +![alt text](image-14.png) + +8. ダウンロードした**rocket.txt**をドラッグアンドドロップし、**アップロード**をクリックします。 +![alt text](image-15.png) + +9. アップロードしたrocket.txtの右側にある3つの点をクリックし、**オブジェクト詳細の表示**を選択します。 +![alt text](image-16.png) + +10. 作成したオブジェクトストレージのURIをコピーし、メモをしておきます。このURIは後程使用します。(例:https://objectstorage.ap-tokyo-1.oraclecloud.com/n/xxxxxxxxx/b/xxxxxxxxxx/o/) +![alt text](image-17.png) + +# 2. 環境準備 +## 2-1. ユーザーの作成と権限の付与 +次に、チュートリアルを行うユーザーの作成と権限の付与を行います。 + +[101: ADBインスタンスを作成してみよう](https://oracle-japan.github.io/ocitutorials/adb/adb101-provisioning/)の[3-3. データベース・ユーザーを作成してみよう(コマンドライン)](https://oracle-japan.github.io/ocitutorials/adb/adb101-provisioning/#3-3-%E3%83%87%E3%83%BC%E3%82%BF%E3%83%99%E3%83%BC%E3%82%B9%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%A6%E3%81%BF%E3%82%88%E3%81%86%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E3%83%A9%E3%82%A4%E3%83%B3)を参考に、Database ActionsのSQLワークシートからチュートリアルを行うユーザーを作成し、必要なロールを付与します。 + +以下のSQLを実行します。 + +```sql +-- vectorというユーザーを作成、必要なロールを付与 +GRANT DWROLE, UNLIMITED TABLESPACE TO vector IDENTIFIED BY Welcome12345#; +-- SELECT AI機能の利用に必要なDBMS_CLOUD_AIパッケージの実行権限を付与 +GRANT EXECUTE ON DBMS_CLOUD_AI TO vector; +``` + +これでユーザーの作成と、権限の付与が終わりました。 + +## 2-2. SQL Developerへの接続 + +先程まで使用していたDatabase Actions内のSQLではSELECT AI文を直接実行することをサポートしていないため、[DBMS_CLOUD_AIパッケージのGENERATEファンクション](https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/dbms-cloud-ai-package.html#GUID-7B438E87-0E9A-4318-BA01-3BE1A5851229)を使用する必要があります。 +そのため本チュートリアルでは、SQL Developerを使用して、データベースに接続したいと思います。SQL*Plusなどのその他のクライアント・ツールでも大丈夫です。 + +[104: クレデンシャル・ウォレットを利用して接続してみよう](https://oracle-japan.github.io/ocitutorials/adb/adb104-connect-using-wallet/)を参考に、作成したADBにSQL Developerから接続します。 + +# 3. SELECT AI with RAG使用の準備 + +## 3-1. OCI生成AIサービスのクレデンシャル作成 +DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、OCI生成AIサービスに接続するためのクレデンシャルを作成します。 +以下の通りにOCID等を置き換え、プロシージャを実行します。 + +OCI生成AIサービスを利用可能なOCIユーザのAPIキーの情報を設定します: +- **credential_name**:任意(本チュートリアルではOCI_GENAI_CREDとしています) +- **user_ocid**:先ほどメモを取った構成ファイルを参照し、ユーザーのOCIDを入力 +- **tenancy_ocid**:先ほどメモを取った構成ファイルを参照し、使用しているテナンシーのOCIDを入力 +- **private_key**:先程取得した秘密キーの内容をコピー&ペースト +- **fingerprint**:先ほどメモを取った構成ファイルを参照し、フィンガープリントを入力 + +```sql +BEGIN + DBMS_CLOUD.CREATE_CREDENTIAL( + credential_name => 'OCI_GENAI_CRED', + user_ocid => 'ocid1.user.oc1..axxxxxxxxxxxxxxxxq', + tenancy_ocid => 'ocid1.tenancy.oc1..aaxxxxxxxxxxxxa', + private_key => '-----BEGIN PRIVATE KEY----- + MIIEvAIBADANBgkqhkiGQEFA<中略>1D3iheu1ct50SB0aIQz9Ow== + -----END PRIVATE KEY-----', + fingerprint => 'xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx' + ); +END; +/ +``` +これでクレデンシャルを作成する事が出来ました。このクレデンシャルは、この後プロファイルを作成する際に繰り返し使用しますので、credential_nameをメモしておきます。 + +## 3-2. オブジェクトストレージのクレデンシャル作成 +DBMS_CLOUD.CREATE_CREDENTIALプロシージャを使用して、オブジェクトストレージに接続するためのクレデンシャルを作成します。 +以下の通りにOCID等を置き換え、プロシージャを実行します。 + +OCI生成AIサービスを利用可能なOCIユーザのAPIキーの情報を設定します: +- **credential_name**:任意(本チュートリアルではOBS_CREDとしています) +- **user_ocid**:先ほどメモを取った構成ファイルを参照し、ユーザーのOCIDを入力 +- **tenancy_ocid**:先ほどメモを取った構成ファイルを参照し、使用しているテナンシーのOCIDを入力 +- **private_key**:先程取得した秘密キーの内容をコピー&ペースト +- **fingerprint**:先ほどメモを取った構成ファイルを参照し、フィンガープリントを入力 + +```sql +BEGIN + DBMS_CLOUD.CREATE_CREDENTIAL( + credential_name => 'OBS_CRED', + user_ocid => 'ocid1.user.oc1..axxxxxxxxxxxxxxxxq', + tenancy_ocid => 'ocid1.tenancy.oc1..aaxxxxxxxxxxxxa', + private_key => '-----BEGIN PRIVATE KEY----- + MIIEvAIBADANBgkqhkiGQEFA<中略>1D3iheu1ct50SB0aIQz9Ow== + -----END PRIVATE KEY-----', + fingerprint => 'xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx' + ); +END; +/ +``` + +## 3-3. プロファイルの作成 +DBMS_CLOUD_AI.CREATE_PROFILEプロシージャを使用して、プロファイルを作成します。 + +- **プロファイル名**:OCIGENAI_ORACLE(任意) +- **provider**:oci(本チュートリアルではOCI生成AIサービスをAIプロバイダーとして使用) +- **credential_name**:OCI_GENAI_CRED(先ほど作成したクレデンシャル名を指定) +- **vector_index_name**:MY_INDEX(任意) +- **embedding_model**:cohere.embed-multilingual-v3.0(デフォルトだとembedding_modelはcohereのenglishモデルになってしまうので、multilingualを明示的に指定) +- **temperature**:0(任意) +- **comments**:true(任意) +- **oci_apiformat**:COHERE(OCIチャットモデルを使用し、Cohereのモデルを指定する場合はoci_apiformatとしてCOHEREと指定) +- **model**:cohere.command-r-plus(プロバイダーをOCIとし、モデルを指定しない場合は、llama-3が使用されます) + +```sql +BEGIN + DBMS_CLOUD_AI.CREATE_PROFILE( + profile_name =>'OCIGENAI_ORACLE', + attributes =>'{"provider": "oci", + "credential_name": "OCI_GENAI_CRED", + "vector_index_name": "MY_INDEX", + "embedding_model": "cohere.embed-multilingual-v3.0", + "temperature": 0, + "comments": true, + "oci_apiformat": "COHERE", + "model": "cohere.command-r-plus" + }'); +end; +/ +``` +## 3-4. ベクトル索引作成 +DBMS_CLOUD_AI.CREATE_VECTOR_INDEXプロシージャを使用して、ベクトル索引を作成します。 + +- **索引名**:MY_INDEX(プロファイル作成時に指定した索引名) +- **vector_db_provider**:oracle +- **location**:先程作成したオブジェクトストレージのURI +- **object_storage_credential_name**:OBS_CRED(先ほど作成したオブジェクトストレージのクレデンシャル) +- **profile_name**:OCIGENAI_ORACLE(先程作成したプロファイル名) +- **vector_dimension**:1024(Embedding Modelは、Cohere multilingualを使うので、dimensionは1024に設定) +- **vector_distance_metric**:cosine +- **chunk_overlap**:128 +- **chunk_size**:400(Embedding Modelは、Cohere multilingualを使うので、chunk_sizeはそのトークン数上限である512以下に設定) +- **refresh_rate**:1(ベクトル索引を更新する間隔。本チュートリアルでは1分毎に索引を更新するように設定します) + +```sql +BEGIN + DBMS_CLOUD_AI.CREATE_VECTOR_INDEX( + index_name => 'MY_INDEX', + attributes => '{"vector_db_provider": "oracle", + "location": "https://objectstorage.ap-tokyo-1.oraclecloud.com/n/xxxxxxxxx/b/xxxxxxxxxx/o/", + "object_storage_credential_name": "OBS_CRED", + "profile_name": "OCIGENAI_ORACLE", + "vector_dimension": 1024, + "vector_distance_metric": "cosine", + "chunk_overlap":128, + "chunk_size":400, + "refresh_rate":1 + }'); +END; +/ +``` + +## 3-5. プロファイルのセット + +DBMS_CLOUD_AI.SET_PROFILEプロシージャを使用して、セッションで使用するAIプロファイルとして、先程作成したOCIGENAI_ORACLEを指定します。 + +```sql +EXEC DBMS_CLOUD_AI.SET_PROFILE('OCIGENAI_ORACLE'); +``` +これで準備が終わりました。 + +# 4. SELECT AI with RAGを試してみる +早速SELECT AI with RAGを試してみたいと思います。 + +1. 先ずはnarrateオプションを付けて、「OraBoosterとは」と質問してみます。 + + ```sql + SELECT AI narrate OraBoosterとは; + + + RESPONSE + -------------------------------------------------------------------------------- + "OraBooster は、当社が開発した革命的なロケットエンジンです。このエンジンは、宇宙探査の未来を形作る先進的な推進技術の象徴となっています。 + + OraBooster の核心は、量子ダイナミックス・プラズマ・ブースターです。量子力学の原理を利用してプラズマを生成し、驚異的な速度で加速させます。これにより、従来の化学反応とは比べ物にならないほどの高い推力を実現し、遠方の惑星や星系への探査を可能にします。 + + さらに、エンジンの外殻には、ナノファイバー製の超軽量かつ超強度の素材が使用されています。この革新的な素材は、過酷な宇宙空間の環境に耐え、高速飛行時の激しい熱や衝撃からロケットを守ります。 + + また、ハイパーフォトン・ジャイロスコープを搭載しているため、ロケットの姿勢を非常に高い精度で制御し、目標物を確実に追跡することができます。これにより、長時間の宇宙飛行中でも安定した飛行を維持し、ミッションの成功を保障します。 + + 他にも、バイオニック・リアクション・レスポンダー・システムを搭載しており、人工知能と生体認識技術を組み合わせることで、ロケットの異常な振動や動きを検知し、自己修復機能を自動的に活性化します。 + + OraBooster は、その革新的な技術と未来志向の設計によって、宇宙探査の新たな可能性を開拓します。優れた性能と信頼性は、人類の夢を支える強力なツールとなるでしょう。 + + Sources: + - rocket.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/orasejapan/b/select-ai-with-rag/o/rocket.txt)" + ``` + +先程オブジェクトストレージにアップロードしたrocket.txtを基に、回答を生成してくれました。LLMが回答を生成するのに使用したソースも教えてくれます。 + +
+ +2. 次に、chatオプションを付けて「OraBoosterとは」と質問してみます。 + + chatオプションを付けると、RAGを使用せずに一般的なAIチャット(データベースへの問合せは行わず、LLMから直接レスポンスを生成する)として回答を生成します。 + + ```sql + SELECT AI chat OraBoosterとは; + + + RESPONSE + -------------------------------------------------------------------------------- + "OraBooster は、Oracle データベースのパフォーマンスを最適化し、管理を簡素化するために設計された包括的なソフトウェア スイートです。これは、データベース管理者 (DBA) と Oracle ユーザーがデータベースの効率を高め、全体的なパフォーマンスを向上させるのに役立つ一連のツールとモジュールを提供します。 + + OraBooster スイートには、通常、次の主要コンポーネントが含まれます。 + + 1. パフォーマンス最適化: OraBooster は、Oracle データベースのパフォーマンスを分析し、最適化するのに役立ちます。これには、クエリの最適化、索引の管理、リソース使用率の監視、ボトルネックの特定などのタスクが含まれます。パフォーマンス最適化モジュールには、データベースの効率を高めるための推奨事項と洞察を提供する分析ツールが含まれている場合があります。 + + 2. 自動化とメンテナンス: このスイートは、データベースのメンテナンス タスクの自動化を支援するように設計されています。これには、バックアップと復元、統計の管理、スペース管理、索引の再構築などの定期的なタスクのスケジュール設定と実行が含まれます。自動化モジュールにより、DBA の時間と労力が節約され、これらのタスクが確実に実行されます。 + + 3. 監視とアラート: OraBooster は、データベース アクティビティをリアルタイムで監視し、重要なパフォーマンス メトリックに関するアラートを提供します。これには、CPU 使用率、メモリ使用量、I/O アクティビティ、待機統計などの監視が含まれます。監視モジュールにより、DBA は潜在的な問題を迅速に特定して解決し、データベースの正常性を維持できます。 + + 4. 容量計画: このソフトウェアは、データベースの容量計画を支援し、将来の成長とリソース要件を予測するのに役立ちます。これには、データベースのサイズ、トランザクション量、ユーザー数の分析が含まれます。容量計画モジュールにより、組織は Oracle データベース インフラストラクチャを適切にスケーリングして管理できます。 + + 5. セキュリティとコンプライアンス: OraBooster は、Oracle データベースのセキュリティとコンプライアンスを強化する機能を提供する場合があります。これには、アクセス制御、監査、暗号化、データ マスキングなどのタスクが含まれます。セキュリティ モジュールにより、DBA は機密データを保護し、規制要件を遵守できます。 + + 6. レポートと分析: OraBooster は、データベースのパフォーマンス、使用状況、トレンドに関する詳細なレポートと分析を提供します。これらのレポートには、データベース管理、リソース割り当ての計画、パフォーマンスの問題の特定に役立つ洞察が含まれている場合があります。" + ``` + +今回はRAGを使用せずに回答の生成をしたので、ハルシーネーションを起こしてしまっています。RAGがハルシネーションの軽減に大いに役に立っている事が分かりました。 + +※ハルシネーションが起きるため、SELECT AI chatの結果は、上記の内容と異なる返答になる可能性があります。 + +
+ +3. 次に、ベクター索引の自動更新機能を試してみたいと思います。 + +新たな製品AetherFlowsのデータをオブジェクト・ストレージに追加する前に、RAGを使用して質問をしてみたいと思います。 + + ```sql + SELECT AI narrate AetherFlowsの電力消費量はどの程度ですか?; + + + RESPONSE + -------------------------------------------------------------------------------- + "この質問に関連する情報は見つかりませんでした。 + + Sources: + - rocket.txt (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/orasejapan/b/select-ai-with-rag/o/rocket.txt)" + ``` + +AetherFlowsという架空の製品についての情報はまだオブジェクトストレージに追加していないため「この質問に関連する情報は見つかりませんでした」という回答が生成されます。 + +
+ +4. 次に、AetherFlowsという架空の製品についての通話ログをオブジェクトストレージに追加します。 + +[こちら](/ocitutorials/ai-vector-search/ai-vector108-select-ai-with-rag/sample_calllog.csv)をクリックし、sample_calllogというCSVファイルをダウンロードします。 + +以下のような通話ログのデータが5件入っています。 + +| 通話ID | 日付 | 時間 | 発信者 | 受信者 | 通話内容 | +| ------ | ---------- | ------ | ------- | --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| 2001 | 2024/9/19 | 14:45 | 木村 | AetherFlows サポート | **木村:** 「AetherFlowsのフィルター交換頻度を教えてください。」
**AetherFlows:** 「フィルターは通常、6〜12ヶ月に一度交換を推奨しています。使用環境や空気の汚染度によって変動するため、システムのLEDインジケーターが交換時期をお知らせします。」
**木村:** 「オフィスで使っているのですが、交換頻度が早い気がします。何か原因があるのでしょうか?」
**AetherFlows:** 「おそらく空気中の粒子量が多いためです。必要に応じてフィルターの強化版にアップグレードすることも可能です。」 | + + +rocket.txtファイルをアップロードした時と同じように、作成したオブジェクトストレージにsample_calllog.csvをアップロードします。 + +ベクトル索引を作成する時に、refresh_rateで索引を自動更新する間隔を設定する事が出来ます。デフォルトは1440(分)で、24時間毎に索引が更新されます。先程ベクトル索引を作成した時に1と指定したので、1分間隔でベクトル索引が自動更新されます。 + +ベクトル索引が自動更新され、アップロードしたCSVファイルがベクターストアに格納されるまで1分待ちます。 + +
+ +5. CSVファイルをアップロードしてから1分以上経過したら、ベクトル索引が自動更新されているか確認してみます。 + +RAGを使用して、「AetherFlowsの電力消費量はどの程度ですか」と質問してみます。 + + ```sql + SELECT AI narrate AetherFlowsの電力消費量はどの程度ですか?; + + + RESPONSE + -------------------------------------------------------------------------------- + "AetherFlowsは省エネ設計を採用しており、1日24時間稼働しても電気代はおよそ200円程度です。自動オン/オフ機能を活用することで、電力をさらに節約できます。 + + Sources: + - sample_calllog.csv (https://objectstorage.ap-tokyo-1.oraclecloud.com/n/orasejapan/b/select-ai-with-rag/o/sample_calllog.csv)" + ``` + +アップロードしたCSVファイル内の情報を基に回答を生成してくれました。 + +
+ +6. 最後に、RAGを使用しないでLLMが学習済みの情報のみを使って回答を生成してもらいます。 + +chatオプションを付けて、「AetherFlowsの電力消費量はどの程度ですか」と質問してみます。 + + ```sql + SELECT AI chat AetherFlowsの電力消費量はどの程度ですか?; + + + RESPONSE + -------------------------------------------------------------------------------- + "AetherFlows の電力消費量は、使用方法や構成によって異なります。 AetherFlows は、データセンターやクラウド環境で一般的に使用されるサーバーやネットワーク機器と同じ種類のハードウェア上で実行されるソフトウェア フレームワークです。 + + AetherFlows の電力消費量は、次の要因によって主に影響されます。 + + 1. サーバー数: AetherFlows を実行しているサーバーの数が多いほど、電力消費量が増えます。 + + 2. サーバーの仕様: AetherFlows で使用されるサーバーのハードウェア仕様(CPU、メモリ、ストレージなど)によって電力消費量が異なります。高性能なサーバーは通常、より多くの電力を消費します。 + ``` + +LLMが一見それらしい回答を生成してくれましたが、AetherFlowsはソフトウェア フレームワークではないため、ハルシネーションがおきている事が分かります。 + +※ハルシネーションが起きるため、SELECT AI chatの結果は、上記の内容と異なる返答になる可能性があります。 + + +SELECT AI機能にRAGを組み合わせると、回答を生成するのに使用したソースを教えてくれるだけでなく、ハルシネーションを防ぐこともできました。以上で、**SELECT AI with RAGを試してみよう**は終了です。 +
+ +[ページトップへ戻る](#anchor0) \ No newline at end of file diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/adb-diagram-third-party-vector-db-select-ai-rag.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/adb-diagram-third-party-vector-db-select-ai-rag.png new file mode 100644 index 0000000000..f8841e7e0b Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/adb-diagram-third-party-vector-db-select-ai-rag.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-1.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-1.png new file mode 100644 index 0000000000..6caccb144c Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-1.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-10.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-10.png new file mode 100644 index 0000000000..6c9fe97941 Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-10.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-12.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-12.png new file mode 100644 index 0000000000..fd75d68495 Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-12.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-13.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-13.png new file mode 100644 index 0000000000..b23ddeeb5f Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-13.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-14.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-14.png new file mode 100644 index 0000000000..6d6c4052d6 Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-14.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-15.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-15.png new file mode 100644 index 0000000000..f039b75ce9 Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-15.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-16.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-16.png new file mode 100644 index 0000000000..a919f71269 Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-16.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-17.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-17.png new file mode 100644 index 0000000000..93117dbce1 Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image-17.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image.png b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image.png new file mode 100644 index 0000000000..9fdc7a9f5f Binary files /dev/null and b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/image.png differ diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/rocket.txt b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/rocket.txt new file mode 100644 index 0000000000..6b23e2079d --- /dev/null +++ b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/rocket.txt @@ -0,0 +1,10 @@ +当社が開発したロケットエンジンである OraBooster は、次世代の宇宙探査を支える先進的な推進技術の象徴です。その独自の設計は、高性能と革新性を融合させ、人類の宇宙進出を加速させるための革命的 +な一歩となります。 + +このエンジンの核となるのは、量子ダイナミックス・プラズマ・ブースターです。このブースターは、量子力学の原理に基づいてプラズマを生成し、超高速で加速させます。その結果、従来の化学反応よりもはるかに高い推力を発生し、遠く離れた惑星や星系への探査を可能にします。 + +さらに、エンジンの外殻にはナノファイバー製の超軽量かつ超強度の素材が使用されています。この素材は、宇宙空間の過酷な環境に耐え、高速での飛行中に生じる熱や衝撃からロケットを守ります。また、ハイパーフォトン・ジャイロスコープが搭載されており、極めて高い精度でロケットの姿勢を維持し、目標を追跡します。これにより、長時間にわたる宇宙飛行中でも安定した飛行軌道を維持し、ミッションの成功を確保します。 + +さらに、バイオニック・リアクション・レスポンダーが統合されています。このシステムは、人工知能と生体認識技術を組み合わせ、ロケットの異常な振動や動きを検知し、自己修復機能を活性化します。 + +総じて、この新開発のロケットエンジンは、革新的な技術と未来志向の設計によって、宇宙探査の新たな時代を切り開くことでしょう。その高い性能と信頼性は、人類の夢を実現するための力強い支援となることでしょう。 \ No newline at end of file diff --git a/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/sample_calllog.csv b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/sample_calllog.csv new file mode 100644 index 0000000000..7e78e40b54 --- /dev/null +++ b/tutorials/_ai-vector-search/ai-vector108-select-ai-with-rag/sample_calllog.csv @@ -0,0 +1,20 @@ +通話ID,日付,時間,発信者,受信者,通話内容 +2001,2024/9/19,14:45,木村,AetherFlows サポート,"木村: 「AetherFlowsのフィルター交換頻度を教えてください。」 +AetherFlows: 「フィルターは通常、6〜12ヶ月に一度交換を推奨しています。使用環境や空気の汚染度によって変動するため、システムのLEDインジケーターが交換時期をお知らせします。」 +木村: 「オフィスで使っているのですが、交換頻度が早い気がします。何か原因があるのでしょうか?」 +AetherFlows: 「おそらく空気中の粒子量が多いためです。必要に応じてフィルターの強化版にアップグレードすることも可能です。」" +2002,2024/9/19,15:30,田中,AetherFlows サポート,"田中: 「AetherFlowsの浄化性能は他社製品と比べてどうですか?」 +AetherFlows: 「AetherFlowsは4段階の浄化システムを採用しており、99.97%の微粒子を除去できます。また、特許取得済みのプラズマ技術により、ウイルスやバクテリアの99.9%も分解します。」 +田中: 「それはすごいですね。具体的にどのような環境で最適ですか?」 +AetherFlows: 「家庭はもちろん、オフィスや病院など、空気品質が重要な場所で特に効果を発揮します。」" +2003,2024/9/19,16:10,小林,AetherFlows サポート,"小林: 「AetherFlowsを大型の商業施設で使いたいと考えていますが、対応できますか?」 +AetherFlows: 「はい、大型施設向けのAetherFlows Proモデルがあり、1時間あたり最大5000立方メートルの空気を浄化できます。施設全体にわたる空気のクリーン化を実現します。」 +小林: 「それは便利ですね。設置にかかる時間や費用はどれくらいですか?」 +AetherFlows: 「通常、設置には1〜2日かかり、費用は規模によりますが、Proモデルは100万円〜です。」" +2004,2024/9/19,16:45,山下,AetherFlows サポート,"山下: 「AetherFlowsの電気代が気になるのですが、省エネ機能はありますか?」 +AetherFlows: 「AetherFlowsは省エネ設計を採用しており、1日24時間稼働しても電気代はおよそ200円程度です。また、自動オン/オフ機能を活用することで、さらに電力を節約できます。」 +山下: 「それなら長時間使っても安心ですね。」" +2005,2024/9/19,17:15,松田,AetherFlows サポート,"松田: 「保証期間について教えてください。」 +AetherFlows: 「AetherFlowsの保証期間は3年間です。消耗品を除く本体に関して、故障があれば無償修理を提供しています。」 +松田: 「延長保証プランはありますか?」 +AetherFlows: 「はい、延長保証は最大5年まで可能です。」"