ローカルRESTプロバイダOllamaを使用したテキスト文字列から埋込みへの変換

ローカル・ホストのRESTエンドポイント・プロバイダOllamaを使用して、オープン埋込みモデルにアクセスし、テキストから埋込みへの変換を実行します。

Ollamaは、Linux、WindowsまたはmacOSシステムで、オープン埋込みモデルおよびLLMをローカルおよびプライベートで実行できる、無料でオープン・ソースのコマンドライン・インタフェース・ツールです。サービスとしてのOllamaには、SQLおよびPL/SQLコマンドを使用してアクセスできます。

埋込みモデル(all-minilm、mxbai-embed-large、nomic-embed-textなど)をコールして、データをベクトル化できます。索引付けするデータとユーザーの入力問合せの両方に同じ埋込みモデルを使用する必要があります。この例では、ユーザーの入力問合せをその場でベクトル化する方法を確認できます。

ここでは、ユースケースに応じて、DBMS_VECTORまたはDBMS_VECTOR_CHAINパッケージのチェーン可能ユーティリティ関数UTL_TO_EMBEDDINGをコールできます(単数形の「embedding」であることに注意してください)。この例では、DBMS_VECTOR.UTL_TO_EMBEDDING APIを使用します。UTL_TO_EMBEDDINGは、(配列ではなく) VECTOR型を直接返します。

警告:

データベースの特定の機能により、たとえば、REST APIへのアクセスを容易にするJSON仕様を使用して、第三者によって個別に提供されるサービスにアクセスできる場合があります。

お客様によるこれらの機能の使用は、お客様自身の責任においてのみ行われ、お客様は、当該第三者サービスの使用に関連するあらゆる条件を遵守する責任を負います。第三者のサービスに関するその他の条件にかかわらず、お客様は、かかるデータベース機能の使用によって、そのリスクを受諾し、当該アクセスにより生じた一切の損害について、Oracleの責任または法的責任を明示的に除外することになります。

Ollamaを使用してローカル埋込みモデルをコールし、ユーザーの入力テキスト文字列「hello」を問合せベクトルに変換するには:
  1. ローカル・ユーザーとしてOracle Databaseに接続します。
    1. SQL*PlusにSYSユーザーとしてログインし、SYSDBAとして接続します。
      conn sys/password as sysdba
      CREATE TABLESPACE tbs1
      DATAFILE 'tbs5.dbf' SIZE 20G AUTOEXTEND ON
      EXTENT MANAGEMENT LOCAL
      SEGMENT SPACE MANAGEMENT AUTO;
      SET ECHO ON
      SET FEEDBACK 1
      SET NUMWIDTH 10
      SET LINESIZE 80
      SET TRIMSPOOL ON
      SET TAB OFF
      SET PAGESIZE 10000
      SET LONG 10000
    2. ローカル・ユーザー(docuser)を作成し、必要な権限を付与します。
      DROP USER docuser cascade;
      CREATE USER docuser identified by docuser DEFAULT TABLESPACE tbs1 quota unlimited on tbs1;
      GRANT DB_DEVELOPER_ROLE, create credential to docuser;
    3. ローカル・ユーザー(docuser)として接続します:
      CONN docuser/password
  2. Ollamaをインストールし、埋込みモデルをローカルで実行します。
    1. https://ollama.com/downloadからOllamaアプリケーションをダウンロードして実行します。

      Ollamaは、バックグラウンドで実行されるサービスとしてインストールすることも、手動インストールによるスタンドアロン・バイナリとしてインストールすることもできます。インストール固有のステップの詳細は、Ollamaドキュメントのクイック・スタートを参照してください。

      次の点に注意してください:

      • Ollamaサーバーは、モデルをダウンロードできるようにインターネットに接続できる必要があります。インターネットへのアクセスにプロキシ・サーバーが必要な場合は、Ollamaサーバーを実行する前に、必ず適切な環境変数を設定してください。たとえば、Linux用に設定するには:

        -- set a proxy if you require one
        
        export https_proxy=<proxy-hostname>:<proxy-port>
        export http_proxy=<proxy-hostname>:<proxy-port>
        export no_proxy=localhost,127.0.0.1,.example.com
        export ftp_proxy=<proxy-hostname>:<proxy-port>
      • Ollamaとデータベースを異なるマシンで実行している場合は、データベースのマシンで、ローカル・ホストではなくOllamaを実行しているホスト名またはIPアドレスを参照するようにURLを変更する必要があります。

      • ポートを経由できるように、Ollamaを実行しているマシンでファイアウォール設定を変更する必要がある場合があります。

    2. 手動インストールからスタンドアロン・バイナリとしてOllamaを実行している場合は、サーバーを起動します:
      ollama serve
    3. ollama pull <embedding_model_name>コマンドを使用してモデルを実行します。

      たとえば、all-minilmモデルを呼び出すには:

      ollama pull all-minilm

      この手順の詳細は、OllamaのReadmeを参照してください。

    4. cURLコマンドを使用して、Ollamaがローカルで実行されていることを確認します。

      次に例を示します。

      -- get embeddings 
      
      curl http://localhost:11434/api/embeddings -d '{
        "model" : "all-minilm", 
        "prompt": "What is Oracle AI Vector Search?"}'
  3. HTTPプロキシ・サーバーを設定します(構成されている場合)
    EXEC UTL_HTTP.SET_PROXY('<proxy-hostname>:<proxy-port>');
  4. DBMS_NETWORK_ACL_ADMINプロシージャを使用して、ホストへの接続を許可するための接続権限をdocuserに付与します。

    この例では、*を使用して任意のホストを許可します。ただし、接続するホストを明示的に指定できます。

    BEGIN
      DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
        host => '*',
        ace => xs$ace_type(privilege_list => xs$name_list('connect'),
                           principal_name => 'docuser',
                           principal_type => xs_acl.ptype_db));
    END;
    /
  5. UTL_TO_EMBEDDINGをコールします。

    Ollamaサービスには、埋込みを生成するためのREST APIエンドポイントがあります。JSONオブジェクトにURLおよびその他の構成パラメータを指定します。

    var embed_ollama_params clob;
    exec :embed_ollama_params := '{
         "provider": "ollama",
         "host"    : "local",
         "url"     : "http://localhost:11434/api/embeddings", 
         "model"   : "all-minilm"
    }';
    
    select dbms_vector.utl_to_embedding('hello', json(:embed_ollama_params)) ollama_output from dual;

    必要に応じて、urlおよびmodelを独自の値に置き換えることができます。

    ノート:

    サポートされているすべてのRESTエンドポイントURLの完全なリストは、「サポートされているサードパーティ・プロバイダの操作およびエンドポイント」を参照してください。

    生成された埋込み出力からの抜粋を次に示します:

    OLLAMA_OUTPUT
    --------------------------------------------------------------------------------
    [-2.31221581E+000,-3.26045007E-001,2.48111725E-001,-1.65610778E+000,1.10871601E+
    000,-1.78519666E-001,-2.44365096E+000,-3.32534742E+000,-1.3771069E+000,1.8842382
    4E+000,1.26494539E+000,-2.05359578E+000,-1.78593469E+000,-3.16150457E-001,-5.362
    42545E-001,6.42113638E+000,-2.36518741E+000,2.21405053E+000,6.52316332E-001,-7.8
    1692028E-001,2.32031775E+000,5.31627655E-001,-5.02781868E-001,7.03743398E-001,5.
    48391223E-001,-3.16579014E-001,5.28999329E+000,1.63369191E+000,1.34206653E-001,9
    .54429448E-001,-1.94197679E+000,2.39797616E+000,3.5270077E-001,-1.6536833E+000,-
    5.74707508E-001,1.60994816E+000,3.80332375E+000,-6.30351126E-001,-1.5865227E+000
    ,-2.48650503E+000,-1.42142653E+000,-2.79453158E+000,1.76355612E+000,-2.48690337E
    -001,1.5521245E+000,-1.95240334E-001,1.42441893E+000,-3.57098508E+000,4.02083158
    E+000,-2.38530707E+000,2.34579134E+000,-2.79158998E+000,-5.92314243E-001,-9.7153
    
    OLLAMA_OUTPUT
    --------------------------------------------------------------------------------
    9557E-001,1.6514441E-002,1.03710043E+000,1.96799666E-001,-2.18394065E+000,-2.786
    71598E+000,-1.1549623E+000,1.92903787E-001,7.72498465E+000,-1.63462329E+000,3.33
    839393E+000,-7.17389703E-001,-3.99817854E-001,7.7395606E-001,6.43829286E-001,1.8
    5182285E+000,2.95272923E+000,-8.72635692E-002,1.77895337E-001,-1.19716954E+000,9
    .43063736E-001,1.51703429E+000,-7.93301344E-001,1.92319798E+000,3.33290434E+000,
    -1.29852867E+000,2.02961493E+000,-4.35824203E+000,1.30186975E+000,-1.0979414E+00
    0,-7.07521975E-001,-4.50183332E-001,3.77224755E+000,-2.49138021E+000,-1.12575901
    E+000,1.15370192E-001,1.66767395E+000,3.52229095E+000,-3.78049397E+000,-6.171851
    75E-001,1.71992481E+000,2.33226371E+000,-3.35983014E+000,-3.78417182E+000,3.8380
    127E+000,2.59293962E+000,-1.33574629E+000,-1.76218402E+000,3.53816301E-001,-1.80
    47899E+000,9.85167921E-001,1.93026745E+000,2.15959966E-001,9.94020045E-001,6.189