Skip to content

Commit

Permalink
Vector Searchチュートリアルの修正
Browse files Browse the repository at this point in the history
  • Loading branch information
r-deguchi committed Jan 9, 2025
1 parent 83a48b7 commit ae7491c
Show file tree
Hide file tree
Showing 6 changed files with 97 additions and 42 deletions.
18 changes: 11 additions & 7 deletions tutorials/_ai-vector-search/ai-vector101-always-free-adb.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,13 +39,17 @@ Always FreeのADBでは、2024年5月にリリースとなった**Oracle Databas
# 1. リージョンの確認

Always Free Autonomous Database上でのOracle Database 23aiは、
<br>現時点では、以下の4リージョンのみでご利用いただけます:
- Tokyo
- Ashburn
- Phoenix
- Paris
- London

<br>2025/01時点では、以下のリージョンでご利用いただけます:
- フェニックス(PHX)
- アッシュバーン(IAD)
- ロンドン(LHR)
- パリ(CDG)
- シドニー(SYD)
- ムンバイ(BOM)
- シンガポール(SIN)
- 東京(NRT)

最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/autonomous-database-serverless/doc/autonomous-always-free.html#:~:text=Oracle%20Database%2023ai%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9FAlways%20Free%20Autonomous%20Database%E3%81%AE%E3%83%8E%E3%83%BC%E3%83%88%3A){:target="_blank"}をご参照ください。
お使いのテナンシーの**ホーム・リージョン**が上記のリージョンのいずれか、
<br>かつ、**ホーム・リージョン**でADBのインスタンスを作成する必要があります。

Expand Down
26 changes: 20 additions & 6 deletions tutorials/_ai-vector-search/ai-vector104-file-to-embedding.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,19 @@ header:

※インスタンス作成方法については。[101 : Always Freeで23aiのADBインスタンスを作成してみよう](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector101-always-free-adb/)をご参照ください。

- OCI GenAIのサービスをご利用いただけるChicagoのRegionはサブスクリプション済みであること。
- AI Vector Searchの基本的な操作を学習済みであること
<br>[103 : Oracle AI Vector Searchの基本操作を試してみよう](/ocitutorials/ai-vector-search/ai-vector103-basics/)を参照ください。

- OCI GenAI Serviceをご利用いただけるリージョンはサブスクリプション済みであること。

※2025/01時点で、利用可能なリージョンは以下です。
- サンパウロ(GRU)
- フランクフルト(FRA)
- 大阪(KIX)
- ロンドン(LHR)
- シカゴ(ORD)

最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/pretrained-models.htm){:target="_blank"}をご参照ください。本チュートリアルで使用するテキスト生成モデル、エンベッディングモデルについては、将来的にモデルの廃止が行われることがあるため、廃止日や置換モデルのリリース情報を[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/deprecating.htm){:target="_blank"}から確認のうえ、最新のモデルを使用することを推奨します。以降のチュートリアルでは、エンベッディングモデルにcohere.embed-multilingual-v3.0、テキスト生成モデルにcohere.command-r-plus-08-2024を使用します。これらが最新になっているか上記リンクよりご確認ください。また大阪リージョンの利用が前提となっているため、それ以外のリージョンの場合は適宜サービス・エンドポイントを修正してください。

<br>

Expand Down Expand Up @@ -362,11 +374,13 @@ SQL*Plusの出力をよりわかりやすいように、SQL*Plusの環境設定
PL/SQLプロシージャが正常に完了しました。
```

OCI GenAIサービスを利用するためのパラメータを設定します。
OCI GenAIサービスを利用するためのパラメータを設定します。今回はOCI Generative AI Serviceのembed-multilingual-v3.0というモデルを利用します。

※urlには大阪リージョンのエンドポイントを指定していますが、サブスクライブしているリージョンによってここからの手順では適宜修正してください。最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/pretrained-models.htm){:target="_blank"}をご参照ください。例えばロンドンの場合は、urlには*https://inference.generativeai.uk-london-1.oci.oraclecloud.com*と指定します。

```sql
var embed_genai_params clob;
exec :embed_genai_params := '{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}';
exec :embed_genai_params := '{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}';
```

上記の設定を検証してみます。
Expand Down Expand Up @@ -425,7 +439,7 @@ OCI GenAIサービスを利用するためのパラメータを設定します
documentation_tab dt,
dbms_vector_chain.utl_to_embeddings(
dbms_vector_chain.utl_to_chunks(dbms_vector_chain.utl_to_text(dt.data), json('{"max": "400", "overlap": "20", "language": "JAPANESE", "normalize": "all"}')),
json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
) t,
JSON_TABLE(
t.column_value,
Expand Down Expand Up @@ -736,7 +750,7 @@ object_uriには前に手順でメモをしたURIパスを入力します。
documentation_tab dt,
dbms_vector_chain.utl_to_embeddings(
dbms_vector_chain.utl_to_chunks(dbms_vector_chain.utl_to_text(dt.data), json('{"max": "400", "overlap": "20", "language": "JAPANESE", "normalize": "all"}')),
json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
) t,
JSON_TABLE(
t.column_value,
Expand Down Expand Up @@ -768,7 +782,7 @@ object_uriには前に手順でメモをしたURIパスを入力します。
FROM doc_chunks
ORDER BY vector_distance(embed_vector , (SELECT to_vector(et.embed_vector) embed_vector
FROM
dbms_vector_chain.utl_to_embeddings('コーポレート・ガバナンスに関する基本的な考え方', JSON('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')) t,
dbms_vector_chain.utl_to_embeddings('コーポレート・ガバナンスに関する基本的な考え方', JSON('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')) t,
JSON_TABLE (t.column_value, '$[*]'
COLUMNS (
embed_id NUMBER PATH '$.embed_id',
Expand Down
38 changes: 26 additions & 12 deletions tutorials/_ai-vector-search/ai-vector105-multi-vector-search.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,30 @@ header:

**前提条件 :**

* Oracle Database 23ai Freeをインストールする済みであること
<br>※インストール方法については、[102 : 仮想マシンへOracle Database 23ai Freeをインストールしてみよう](/ocitutorials/ai-vector-search/ai-vector102-23aifree-install){:target="_blank"} を参照ください。

* AI Vector Searchの基本的な操作を学習済みであること
<br>[103 ~](/ocitutorials/ai-vector-search/ai-vector103-basics/){:target="_blank"}を参照ください。

* OCI Generative AI Serviceを使用できること
- OCI GenAI Serviceをご利用いただけるChicago Regionはサブスクリプション済みであること。

- OCI アカウントのAPI署名キーの生成は完了であること
- 使用するOracle Databaseの環境があること
- 23ai freeで実行する場合、Oracle Database 23ai Freeをインストールする済みであること

※インストール方法については、[102 : 仮想マシンへOracle Database 23ai Freeをインストールしてみよう](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector102-23aifree-install/) を参照ください。

- ADB23aiで実行する場合、Autonomous Database 23aiのインスタンスを構築済みであること。本記事では無償で使えるAlways Freeを使います。

※インスタンス作成方法については。[101 : Always Freeで23aiのADBインスタンスを作成してみよう](https://oracle-japan.github.io/ocitutorials/ai-vector-search/ai-vector101-always-free-adb/)をご参照ください。

- AI Vector Searchの基本的な操作を学習済みであること
<br>[103 : Oracle AI Vector Searchの基本操作を試してみよう](/ocitutorials/ai-vector-search/ai-vector103-basics/)を参照ください。

- OCI GenAI Serviceをご利用いただけるリージョンはサブスクリプション済みであること。

※2025/01時点で、利用可能なリージョンは以下です。
- サンパウロ(GRU)
- フランクフルト(FRA)
- 大阪(KIX)
- ロンドン(LHR)
- シカゴ(ORD)

最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/pretrained-models.htm){:target="_blank"}をご参照ください。本チュートリアルで使用するテキスト生成モデル、エンベッディングモデルについては、将来的にモデルの廃止が行われることがあるため、廃止日や置換モデルのリリース情報を[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/deprecating.htm){:target="_blank"}から確認のうえ、最新のモデルを使用することを推奨します。以降のチュートリアルでは、エンベッディングモデルにcohere.embed-multilingual-v3.0、テキスト生成モデルにcohere.command-r-plus-08-2024を使用します。これらが最新になっているか上記リンクよりご確認ください。また大阪リージョンの利用が前提となっているため、それ以外のリージョンの場合は適宜サービス・エンドポイントを修正してください。

- OCI アカウントのAPI署名キーの生成は完了であること
<br>以下の情報を取得してください。必要があれば、[API署名キーの生成方法](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/apisigningkey.htm#two){:target="_blank"}をご参照ください。
- `user` - キー・ペアが追加されるユーザーのOCID。
- `fingerprint` - 追加されたキーのフィンガープリント。
Expand Down Expand Up @@ -255,7 +269,7 @@ from
json('{"max": "35", "overlap": "0", "language": "JAPANESE", "normalize": "all"}')) t, JSON_TABLE(t.column_value, '$[*]' COLUMNS (chunk_id NUMBER PATH '$.chunk_id', chunk_data VARCHAR2(4000) PATH '$.chunk_data')) et;

UPDATE doc_chunks
SET embed_vector = dbms_vector_chain.utl_to_embedding(embed_data, json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
SET embed_vector = dbms_vector_chain.utl_to_embedding(embed_data, json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')
);

COMMIT;
Expand All @@ -266,7 +280,7 @@ COMMIT;
```sql
INSERT INTO doc_queries (query, embedding)
select et.embed_data query, to_vector(et.embed_vector) embedding
from dbms_vector_chain.utl_to_embeddings('彼は新しいプロジェクトの提案で成功を収めました。', json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.us-chicago-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')) t, JSON_TABLE(t.column_value, '$[*]' COLUMNS (embed_data VARCHAR2(4000) PATH '$.embed_data', embed_vector CLOB PATH '$.embed_vector')) et;
from dbms_vector_chain.utl_to_embeddings('彼は新しいプロジェクトの提案で成功を収めました。', json('{"provider": "ocigenai", "credential_name": "OCI_CRED", "url": "https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com/20231130/actions/embedText", "model": "cohere.embed-multilingual-v3.0"}')) t, JSON_TABLE(t.column_value, '$[*]' COLUMNS (embed_data VARCHAR2(4000) PATH '$.embed_data', embed_vector CLOB PATH '$.embed_vector')) et;

COMMIT;
```
Expand Down
31 changes: 22 additions & 9 deletions tutorials/_ai-vector-search/ai-vector106-23ai-langchain-rag.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,21 @@ header:

構成に利用するサービスは以下の通りです。

- テキスト生成モデル:OCI Generative AI(Command R Plus)
- ドキュメントデータのベクトル化に利用するモデル : Oracle Cloud Generative AI Service(embed-multilingual-v3.0)
- テキスト生成モデル:OCI Generative AI(cohere.command-r-plus-08-2024)

※2025/01時点で、利用可能なリージョンは以下です。
- サンパウロ(GRU)
- フランクフルト(FRA)
- 大阪(KIX)
- ロンドン(LHR)
- シカゴ(ORD)

最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/pretrained-models.htm){:target="_blank"}をご参照ください。
- ドキュメントデータのベクトル化に利用するモデル : Oracle Cloud Generative AI Service(cohere.embed-multilingual-v3.0)
- ベクトルデータベース: Oracle Database 23ai Free(OCI Computeにインストール)、Base Database Service、Autonomous Database(Always Free)

本チュートリアルで使用するテキスト生成モデル、エンベッディングモデルについては、将来的にモデルの廃止が行われることがあるため、廃止日や置換モデルのリリース情報を[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/deprecating.htm){:target="_blank"}から確認のうえ、最新のモデルを使用することを推奨します。本チュートリアルでは、エンベッディングモデルにcohere.embed-multilingual-v3.0、テキスト生成モデルにcohere.command-r-plus-08-2024を使用します。これらが最新になっているか上記リンクよりご確認ください。

※LangChainって何?という方は[こちらの記事](https://qiita.com/ksonoda/items/ba6d7b913fc744db3d79#langchain) をご参照ください。

また、本チュートリアルではAI Vector Searchの以下のチュートリアルを実施済みであることが前提となっています。
Expand Down Expand Up @@ -385,10 +396,12 @@ from langchain_community.embeddings import OCIGenAIEmbeddings

利用する埋め込みモデルを定義します。今回はOCI Generative AI Serviceのembed-multilingual-v3.0というモデルを利用します。

※service_endpointには大阪リージョンのエンドポイントを指定していますが、サブスクライブしているリージョンによって適宜修正してください。最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/pretrained-models.htm){:target="_blank"}をご参照ください。例えばロンドンの場合は、service_endpointには*https://inference.generativeai.uk-london-1.oci.oraclecloud.com*と指定します。

```python
embeddings = OCIGenAIEmbeddings(
model_id="cohere.embed-multilingual-v3.0",
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
service_endpoint="https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com",
# compartment_idはご自身が利用されているコンパートメントのOCIDを指定してください
compartment_id="ocid1.compartment.oc1..aaaaaaaxxxxxxx",
)
Expand Down Expand Up @@ -664,15 +677,15 @@ template = """contextに従って回答してください:
prompt = ChatPromptTemplate.from_template(template)
```
次にテキスト生成モデルを指定します。まずはGenerative AI Serviceの command-r-plusです
次にテキスト生成モデルを指定します。まずはGenerative AI Serviceのcommand-r-plus-08-2024です
```python
from langchain_community.chat_models.oci_generative_ai import ChatOCIGenAI
llm = ChatOCIGenAI(
# model_id="cohere.command-r-16k",
model_id="cohere.command-r-plus",
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
# model_id="cohere.command-r-08-2024",
model_id="cohere.command-r-plus-08-2024",
service_endpoint="https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com",
compartment_id="ocid1.compartment.oc1..xxxxxxxxxxxxxxxxxxx",
model_kwargs={"temperature": 0.7, "max_tokens": 500},
)
Expand Down Expand Up @@ -744,7 +757,7 @@ OraBooster の製品は、オンラインや一部の小売店で購入するこ
## 番外編:RAGを実装する(Cohere社 Command-R-Plusのパターン)
その他のモデルとしてCohere社のCommand-R-Plusを使ったパターンです。llm定義の部分をcohereに挿げ替えるだけで、その他のコードは全く同じです。LangChainを使うメリットですね。
その他のモデルとしてCohere社のCommand-R-Plus-08-2024を使ったパターンです。llm定義の部分をcohereに挿げ替えるだけで、その他のコードは全く同じです。LangChainを使うメリットですね。
```python
from langchain.schema.output_parser import StrOutputParser
Expand All @@ -765,7 +778,7 @@ os.environ["COHERE_API_KEY"] = getpass.getpass("Cochere API Key:")
from langchain_cohere import ChatCohere
llm_cohere = ChatCohere(model="command-r-plus")
llm_cohere = ChatCohere(model="command-r-plus-08-2024")
ベクトル検索を実行するベクトルデータベースを定義します。もちろんここでは事前に定義したvector_store_dotを指定します。
Expand Down
10 changes: 6 additions & 4 deletions tutorials/_ai-vector-search/ai-vector107-rag-chat-history.md
Original file line number Diff line number Diff line change
Expand Up @@ -131,14 +131,16 @@ print(docs)

区切ったチャンクテキストを埋め込みモデル(OCI Generative AI Serviceのembed-multilingual-v3.0)でベクトルに変換し、ベクトル・データベースにロードします。

※service_endpointには大阪リージョンのエンドポイントを指定していますが、サブスクライブしているリージョンによって適宜修正してください。最新のリージョン一覧は[こちら](https://docs.oracle.com/ja-jp/iaas/Content/generative-ai/pretrained-models.htm){:target="_blank"}をご参照ください。例えばロンドンの場合は、service_endpointには*https://inference.generativeai.uk-london-1.oci.oraclecloud.com*と指定します。

```python
from langchain_community.vectorstores.oraclevs import OracleVS
from langchain_community.vectorstores.utils import DistanceStrategy
from langchain_community.embeddings import OCIGenAIEmbeddings

embeddings = OCIGenAIEmbeddings(
model_id="cohere.embed-multilingual-v3.0",
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
service_endpoint="https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com",
compartment_id="<compartmentのOCID>",
)

Expand Down Expand Up @@ -249,9 +251,9 @@ postgres=> select * from message_store;
from langchain_community.chat_models.oci_generative_ai import ChatOCIGenAI

llm = ChatOCIGenAI(
#model_id="cohere.command-r-16k",
model_id="cohere.command-r-plus",
service_endpoint="https://inference.generativeai.us-chicago-1.oci.oraclecloud.com",
#model_id="cohere.command-r-08-2024",
model_id="cohere.command-r-plus-08-2024",
service_endpoint="https://inference.generativeai.ap-osaka-1.oci.oraclecloud.com",
compartment_id="<compartmentのOCID>",
model_kwargs={"temperature": 0.7, "max_tokens": 500},
)
Expand Down
Loading

0 comments on commit ae7491c

Please sign in to comment.