OpenAI 埋め込み
このドキュメントでは、TiDB Cloudの自動埋め込みで OpenAI 埋め込みモデルを使用して、テキスト クエリによるセマンティック検索を実行する方法について説明します。
注記:
自動埋め込みは、AWS でホストされているTiDB Cloud Starter クラスターでのみ使用できます。
利用可能なモデル
ご自身のOpenAI APIキー(BYOK)をお持ちいただく場合、すべてのOpenAIモデルはopenai/プレフィックスでご利用いただけます。例:
テキスト埋め込み 3 小
- 名前:
openai/text-embedding-3-small - 寸法: 512-1536 (デフォルト: 1536)
- 距離計量:コサイン、L2
- 価格: OpenAIによる請求
- TiDB Cloudがホスト: ❌
- 鍵をご持参ください: ✅
テキスト埋め込み 3 大きい
- 名前:
openai/text-embedding-3-large - 寸法: 256-3072 (デフォルト: 3072)
- 距離計量:コサイン、L2
- 価格: OpenAIによる請求
- TiDB Cloudがホスト: ❌
- 鍵をご持参ください: ✅
利用可能なモデルの完全なリストについては、 OpenAIドキュメント参照してください。
使用例
この例では、OpenAI 埋め込みモデルを使用してベクター テーブルを作成し、ドキュメントを挿入し、類似性検索を実行する方法を示します。
自動埋め込み生成用の AI SDK またはネイティブ SQL関数を使用して、OpenAI Embeddings API を TiDB と統合できます。
ステップ1: データベースに接続する
from pytidb import TiDBClient
tidb_client = TiDBClient.connect(
host="{gateway-region}.prod.aws.tidbcloud.com",
port=4000,
username="{prefix}.root",
password="{password}",
database="{database}",
ensure_db=True,
)
mysql -h {gateway-region}.prod.aws.tidbcloud.com \
-P 4000 \
-u {prefix}.root \
-p{password} \
-D {database}
ステップ2: APIキーを設定する
OpenAI APIプラットフォームで API キーを作成し、埋め込みサービスを使用するには独自のキー (BYOK) を使用します。
TiDB クライアントを使用して、OpenAI 埋め込みプロバイダーの API キーを設定します。
tidb_client.configure_embedding_provider(
provider="openai",
api_key="{your-openai-api-key}",
)
SQL を使用して OpenAI 埋め込みプロバイダーの API キーを設定します。
SET @@GLOBAL.TIDB_EXP_EMBED_OPENAI_API_KEY = "{your-openai-api-key}";
ステップ3: ベクターテーブルを作成する
openai/text-embedding-3-smallモデルを使用して 1536 次元のベクトルを生成するベクトル フィールドを持つテーブルを作成します。
from pytidb.schema import TableModel, Field
from pytidb.embeddings import EmbeddingFunction
from pytidb.datatype import TEXT
class Document(TableModel):
__tablename__ = "sample_documents"
id: int = Field(primary_key=True)
content: str = Field(sa_type=TEXT)
embedding: list[float] = EmbeddingFunction(
model_name="openai/text-embedding-3-small"
).VectorField(source_field="content")
table = tidb_client.create_table(schema=Document, if_exists="overwrite")
CREATE TABLE sample_documents (
`id` INT PRIMARY KEY,
`content` TEXT,
`embedding` VECTOR(1536) GENERATED ALWAYS AS (EMBED_TEXT(
"openai/text-embedding-3-small",
`content`
)) STORED
);
ステップ4: テーブルにデータを挿入する
table.insert()またはtable.bulk_insert() API を使用してデータを追加します。
documents = [
Document(id=1, content="Java: Object-oriented language for cross-platform development."),
Document(id=2, content="Java coffee: Bold Indonesian beans with low acidity."),
Document(id=3, content="Java island: Densely populated, home to Jakarta."),
Document(id=4, content="Java's syntax is used in Android apps."),
Document(id=5, content="Dark roast Java beans enhance espresso blends."),
]
table.bulk_insert(documents)
INSERT INTOステートメントを使用してデータを挿入します。
INSERT INTO sample_documents (id, content)
VALUES
(1, "Java: Object-oriented language for cross-platform development."),
(2, "Java coffee: Bold Indonesian beans with low acidity."),
(3, "Java island: Densely populated, home to Jakarta."),
(4, "Java's syntax is used in Android apps."),
(5, "Dark roast Java beans enhance espresso blends.");
ステップ5: 類似文書を検索する
table.search() API を使用してベクトル検索を実行します。
results = table.search("How to start learning Java programming?") \
.limit(2) \
.to_list()
print(results)
VEC_EMBED_COSINE_DISTANCE関数を使用して、コサイン距離によるベクトル検索を実行します。
SELECT
`id`,
`content`,
VEC_EMBED_COSINE_DISTANCE(embedding, "How to start learning Java programming?") AS _distance
FROM sample_documents
ORDER BY _distance ASC
LIMIT 2;
結果:
+------+----------------------------------------------------------------+
| id | content |
+------+----------------------------------------------------------------+
| 1 | Java: Object-oriented language for cross-platform development. |
| 4 | Java's syntax is used in Android apps. |
+------+----------------------------------------------------------------+
Azure OpenAI を使用する
AzureでOpenAI埋め込みモデルを使用するには、グローバル変数TIDB_EXP_EMBED_OPENAI_API_BASE AzureリソースのURLに設定します。例:
SET @@GLOBAL.TIDB_EXP_EMBED_OPENAI_API_KEY = 'your-openai-api-key-here';
SET @@GLOBAL.TIDB_EXP_EMBED_OPENAI_API_BASE = 'https://<your-resource-name>.openai.azure.com/openai/v1';
CREATE TABLE sample (
`id` INT,
`content` TEXT,
`embedding` VECTOR(3072) GENERATED ALWAYS AS (EMBED_TEXT(
"openai/text-embedding-3-large",
`content`
)) STORED
);
INSERT INTO sample
(`id`, `content`)
VALUES
(1, "Java: Object-oriented language for cross-platform development."),
(2, "Java coffee: Bold Indonesian beans with low acidity."),
(3, "Java island: Densely populated, home to Jakarta."),
(4, "Java's syntax is used in Android apps."),
(5, "Dark roast Java beans enhance espresso blends.");
SELECT `id`, `content` FROM sample
ORDER BY
VEC_EMBED_COSINE_DISTANCE(
embedding,
"How to start learning Java programming?"
)
LIMIT 2;
リソース URL がhttps://<your-resource-name>.cognitiveservices.azure.com/と表示される場合でも、OpenAI 互換のリクエストおよびレスポンス形式を維持するには、API ベースとしてhttps://<your-resource-name>.openai.azure.com/openai/v1使用する必要があります。
Azure OpenAI から OpenAI に直接切り替えるには、 TIDB_EXP_EMBED_OPENAI_API_BASE空の文字列に設定します。
SET @@GLOBAL.TIDB_EXP_EMBED_OPENAI_API_BASE = '';
注記:
- セキュリティ上の理由から、API ベースは Azure OpenAI URL または OpenAI URL のみに設定できます。任意のベース URL は許可されません。
- OpenAI 互換の別の埋め込みサービスを利用する場合は、 TiDB Cloudサポートお問い合わせください。
オプション
OpenAI埋め込みオプションすべて、 EMBED_TEXT()関数のadditional_json_optionsパラメータを介してサポートされます。
例: text-embedding-3-large に代替ディメンションを使用する
CREATE TABLE sample (
`id` INT,
`content` TEXT,
`embedding` VECTOR(1024) GENERATED ALWAYS AS (EMBED_TEXT(
"openai/text-embedding-3-large",
`content`,
'{"dimensions": 1024}'
)) STORED
);
利用可能なすべてのオプションについては、 OpenAIドキュメント参照してください。