SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

sp_invoke_external_rest_endpoint で text-embedding-3-large のモデルを使用する

leave a comment

SQL Database で T-SQL で Vector データ型用の埋め込みを作成する際には、sp_invoke_external_rest_endpoint で Azure Open AI の 埋め込みのモデル を使用して、ベクトルデータを作成するという方法があります。

SQL Database の Vector データ型 の次元の最大数は「1998」となっており、これを変更することはできません。

Azure Open AI の埋め込みのモデルとしては、次のモデルを使用することができます。

  • text-embedding-ada-002
  • text-embedding-3-small
  • text-embedding-3-large

ada / embedding-3-small であれば、1536 の次元となるため、Vector データ型にはそのまま登録することができるのですが、text-embedding-3-large については、単純に呼び出しただけでは 3072 の次元となるため、Vector データ型に登録することができません。

新しい埋め込みモデルと API の更新 / Vector embeddings で OpenAI としての情報が公開されていますが、Embedding の API の呼び出し時 に「dimensions」というパラメーターを使用することで、次元数を調整することが可能となっています。

これは、Azure OpenAI でも同様となっており 埋め込み の API を呼び出す際に使用することができます。

T-SQL からの呼び出しの例としては次のようになります。

以下の例では Vector データ型の上限である 1998 で設定をしていますが、small と同じ 1536 を設定し、small と 1536 まで減らした large で精度を比較するということも可能です。

declare @url nvarchar(4000) = N'https://xxxxxx.openai.azure.com/openai/deployments/text-embedding-3-large/embeddings?api-version=2023-05-15';
declare @payload nvarchar(max) =(SELECT TOP 1 definition AS input, 1998 AS dimensions FROM sys.all_sql_modules  FOR JSON PATH,WITHOUT_ARRAY_WRAPPER )

declare @ret int, @response nvarchar(max);
exec @ret = sp_invoke_external_rest_endpoint
    @url = @url,
    @method = 'POST',
    @credential=[https://xxxxxx.openai.azure.com],
    @payload = @payload,
    @timeout = 230,
    @response = @response output;
select @ret as ReturnCode, CAST(json_query(@response, '$.result.data[0].embedding') AS vector(1998)), @response as Response;

GO

 

前述のとおり、dimensions を指定しなかった場合、text-embedding-3-large で取得される次元数は 3072 となるため、これを vector データ型に格納しようとすると次のようなエラーが発生します。

Given Vector size is not supported. Maximum allowed size ‘1998’.

 

しかし、リクエストの Body に dimensions を含めることで指定した次元数で埋め込みを生成できるため、Vector データ型の最大の長さである 1998 に収まる長さでデータの生成ができるようになり、text-embedding-3-large のモデルを sp_invoke_external_rest_endpoint で使用することができるようになります。

Share

Written by Masayuki.Ozawa

12月 22nd, 2024 at 10:58 pm

Leave a Reply