埋め込みの作成
エンベディングは、テキストを意味的な内容を捉えた数値ベクトルに変換し、AIモデルが意味的に類似したコンテンツを比較・検索できるようにします。 埋め込みを活用して、独自のナレッジベースから関連するコンテキストをモデルに提供することで、チャットの自動補完応答を改善する方法について解説したチュートリアルについては、「 ベクトル埋め込みとRAGを活用したチャットの自動補完の改善 」をご覧ください。 利用可能なパラメータの完全な一覧については、「 OpenAI 埋め込みの作成 」を参照してください。
開始前に
-
IBM Cloud の従量課金型またはサブスクリプション型のアカウントを作成します。 体験版アカウントご利用いただけません。 詳細情報やアカウントのアップグレードについては、 アカウントの種類 をご覧ください。
-
Red Hat AI Inference プロジェクト を作成します。
-
Red Hat AI Inference サービスにおいて、「Writer」ロール以上の権限を持っていることを確認してください。 詳細については、「 IAM アクセスの管理 」を参照してください。
-
APIエンドポイントを取得してください。 すべての API リクエストは、以下の基本形式「 URL 」を使用します:
https://us-east.rhai.ibm.com/v1/projects/<project_id>/inference<project_id>を、ご自身のプロジェクト ID に置き換えてください。 それを見つけるには、 Red Hat AI Inference projects にアクセスし、自分のプロジェクトを開いてください。
モデルが埋め込みをサポートしているかどうかを確認するには、 モデルの一覧を表示するか、 ID を使用してモデルを取得し、 supports_embeddings が true に設定されていることを確認してください。
入力形式と制限
Embeddings API では、 input パラメータに対して以下の入力形式をサポートしています:
- ストリング
- 埋め込みベクトルに変換する単一のテキスト文字列。
- 文字列のアレイ
- テキスト文字列の配列で、各文字列が個別の埋め込みベクトルに変換される。
- 数値の配列
- トークンを表す整数の配列で、これは埋め込みベクトルに変換されます。
- 数値の配列の配列
- トークン配列の配列であり、各トークン配列は個別の埋め込みベクトルに変換されます。
エンベディング用の入力を送信する際は、以下の制限および動作が適用されます:
- トークンの入力制限
- 各埋め込みモデルは、コンテキストウィンドウのサイズに基づいて、最大入力トークン数を定義します。
- 配列入力の評価
- 複数の入力からなる配列を送信する場合、入力トークンの制限は各テキストごとに個別に適用されます。
- 制限値を超える
- 配列内のテキスト入力のうち、どれか1つでもモデルのトークン制限を超えた場合、APIはリクエスト全体を拒否し、
HTTP 400 Bad Requestエラーを返します。
出力寸法
埋め込みリクエストの出力は、高次元ベクトルです。 出力ベクトルの以下の特徴について考えてみましょう:
- 表現の質
- 出力ベクトルのサイズが大きいほど、より詳細な情報を表現でき、よりきめ細かな意味内容を捉えることができます。 しかし、ベクトルが大きくなると、保存や検索に多くのメモリが必要となり、リソースの使用量が増加する可能性があります。
- ベクトルのサイズの設定
- 出力ベクトルのサイズは、モデルによって異なります。 embeddings API では、出力ベクトルのサイズを設定するための
dimensionsパラメータがサポートされていますが、このパラメータが使用されるのは、選択したモデルが次元サイズの設定に対応している場合のみです。
埋め込みの作成
埋め込みAPIを使用して、1つまたは複数のテキスト入力をベクトル表現に変換します。 以下の例では、 cURL または OpenAI Python クライアントを使用して、API で埋め込みを作成する方法を示しています。
curl https://us-east.rhai.ibm.com/v1/projects/<project_id>/inference/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer <bearer_token>" \
-d '{
"model": "granite-embedding-278m-multilingual",
"input": [
"Manage your projects from the IBM Cloud console.",
"Use the API to automate workflows and integrate AI into your applications.",
"IBM Cloud offers a range of AI and machine learning services for enterprise applications."
]
}'
from openai import OpenAI
client = OpenAI(
api_key="<bearer_token>",
base_url="https://us-east.rhai.ibm.com/v1/projects/<project_id>/inference",
)
response = client.embeddings.create(
model="granite-embedding-278m-multilingual",
input=[
"Manage your projects from the IBM Cloud console.",
"Use the API to automate workflows and integrate AI into your applications.",
"IBM Cloud offers a range of AI and machine learning services for enterprise applications."
]
)
print(response.data[0].embedding)