External model connections
==========================

外部モデルは、Postgresインスタンスの外部でホストされるAPIベースのモデルです。
AIDBは、\ ``aidb.create_model()``
にモデルを登録し、プロバイダー名、構成オブジェクト、およびAPIキーなどの資格情報を必要に応じて提供することにより、それらに接続します。

!!!note
このページの例では、簡潔にするために\ ``credentials => '{"api_key": "..."}'::JSONB``
としてインラインで資格情報を渡します。 ``config``
自分自身は、ネストの深さで\ ``api_key`` または\ ``basic_auth``
キーを含めることはできません— ``aidb.create_model()``
はそれを拒否します—したがって、常に別の\ ``credentials``
引数を介して資格情報を渡します。シークレットをデータベースに保存しないようにするには、代わりに\ ``credentials_env``
を渡し、接続時に読み取る環境変数を名前付けます。 :ref:`環境変数からの資格情報 <環境変数からの資格情報>` 
を参照してください。

登録されると、外部モデルはデフォルトのローカルモデルとまったく同様に、AIDB
SQLファンクションまたはパイプラインステップで名前によって使用されます。

作成時にモデルの検証
--------------------

デフォルトでは、\ ``aidb.create_model()``
は、登録の一部として、小さなプローブ要求をプロバイダーに送信することにより、外部モデルを検証します。これにより、登録がコミットされる前に、エンドポイントが到達可能であり、構成と資格情報が正しいことが確認され、無効なAPIキーや間違ったURLなどの問題が、最初に使用するときではなくすぐに表面化します。プローブが失敗した場合、エラーが報告され、モデルは登録されません。

.. code:: sql

   - - Validated by default: sends a test request to the provider now.
   SELECT aidb.create_model(
       my_openai_embedder,
       openai_embeddings,
       config      => aidb.embeddings_config(model => text-embedding-3-small),
       credentials => {"api_key": "sk-..."}::JSONB
   );

``validate => false``
を渡してプローブをスキップします。たとえば、エンドポイントまたは資格情報がまだ利用できない場合、またはスクリプトによるセットアップ中の要求を回避します。

.. code:: sql

   SELECT aidb.create_model(
       my_openai_embedder,
       openai_embeddings,
       config      => aidb.embeddings_config(model => text-embedding-3-small),
       credentials => {"api_key": "sk-..."}::JSONB,
       validate    => false
   );

!!!note
検証は実際の要求をプロバイダーに送信するため、作成時にPostgresホストからのネットワークアクセスが必要で、少額の使用コストが発生する場合があります。

:ref:`aidb.validate_model() <Pipelines API reference>` を使用して、モデルを後で検証したり、既存のモデルを再チェックしたりできます。

OpenAI互換エンドポイント
------------------------

AIDBは、OpenAI
APIを実装する埋め込みまたはチャット/補完サービスをサポートしています。これには、OpenAI自分自身、
`Ollama <https://ollama.com>`_ のようなセルフホストサーバー、およびその他の準拠エンドポイントが含まれます。

エンベディング
^^^^^^^^^^^^^^

``aidb.embeddings_config()`` とともに\ ``openai_embeddings``
プロバイダーを使用します。 ``url``
パラメーターをオーバーライドして、要求をOpenAI互換サーバーにリダイレクトします。

.. code:: sql

   - - OpenAI
   SELECT aidb.create_model(
       my_openai_embedder,
       openai_embeddings,
       config      => aidb.embeddings_config(
           model => text-embedding-3-small,
           url   => https://api.openai.com/v1
       ),
       credentials => {"api_key": "sk-..."}::JSONB
   );

   - - Local Ollama server
   SELECT aidb.create_model(
       my_ollama_embedder,
       openai_embeddings,
       config => aidb.embeddings_config(
           model => llama3.2,
           url   => http://llama.local:11434/v1/embeddings
       )
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,APIが想定するモデル識別子。
  `api_key`,TEXT,NULL,認証用のAPIキー。
  `url`,TEXT,NULL,APIエンドポイントURL。デフォルトではOpenAIのエンドポイントです。
  `basic_auth`,TEXT,NULL,基本的な認証資格情報 `user:password` 。
  `max_concurrent_requests`,INTEGER,NULL,エンドポイントへの最大同時要求。
  `max_batch_size`,INTEGER,NULL,バッチ要求ごとの入力の最大数。
  `input_type`,TEXT,NULL,エンコードの入力タイプヒントプロバイダー固有。
  `input_type_query`,TEXT,NULL,クエリエンコーディングの入力タイプヒントプロバイダー固有。
  `is_hcp_model`,BOOLEAN,NULL,HCPで実行されているモデルを参照する場合、`true`に設定します。

チャット完了
^^^^^^^^^^^^

``aidb.completions_config()`` とともに\ ``openai_completions``
プロバイダーを使用します。 ``url``
パラメーターは同じように機能します。OpenAIの場合は省略するか、他の準拠サーバーの場合はオーバーライドします。

.. code:: sql

   SELECT aidb.create_model(
       my_openai_llm,
       openai_completions,
       config      => aidb.completions_config(
           model       => gpt-4o,
           temperature => 0.2
       ),
       credentials => {"api_key": "sk-..."}::JSONB
   );

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,モデル識別子。
  `api_key`,TEXT,NULL,認証用のAPIキー。
  `url`,TEXT,NULL,APIエンドポイントURL。デフォルトではOpenAIのエンドポイントです。
  `basic_auth`,TEXT,NULL,基本的な認証資格情報 `user:password` 。
  `temperature`,DOUBLE PRECISION,NULL,サンプリング温度。
  `top_p`,DOUBLE PRECISION,NULL,nucleusサンプリングしきい値。
  `seed`,BIGINT,NULL,再現可能な出力のランダムシード。
  `system_prompt`,TEXT,NULL,すべての要求の前に追加されるデフォルトのシステムプロンプト。
  `max_tokens`,JSONB,NULL,最大トークン構成`aidb.max_tokens_config()`から。
  `thinking`,BOOLEAN,NULL,拡張推論を有効にしますサポートされているモデルのみ。
  `max_concurrent_requests`,INTEGER,NULL,エンドポイントへの最大同時要求。
  `extra_args`,JSONB,NULL,追加のプロバイダー固有の引数。
  `is_hcp_model`,BOOLEAN,NULL,HCPで実行されているモデルを参照する場合、`true`に設定します。

!!!note pgvectorインデックスを使用する場合、 
`pgvector limits indexed vectors to 2000 dimensions <https://github.com/pgvector/pgvector?tab=readme-ov-file#what-if-i-want-to-index-vectors-with-more-than-2000-dimensions>`_ 
に注意してください。選択したモデルがより多くのディメンションを生成する場合、パイプラインステップで\ ``aidb.vector_index_disabled_config()``
を使用し、インデックスを手動で管理します。

OpenAI Responses API
--------------------

AIDBには、OpenAIモデル用の2つのプロバイダーがあります。どちらも同じモデル識別子\ ``gpt-4o``
、\ ``gpt-5.x``
などで動作するため、どのモデルが必要かではなく、やっていることに基づいてそれらを選択してください。

.. csv-table::
  :header: Provider,API,Best for,Tool calling
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `openai_completions`,Chat Completions (`/v1/chat/completions`),"Simple, one-off text generation — `aidb.generate_text()`, summarization, pipeline steps.",Rejects `tools`/`tool_choice`/`response_format` in `aidb.generate_text()`'s `inference_config`.
  `openai_responses`,Responses API (`/v1/responses`),"Agentic workloads — multi-step reasoning, reliable tool calling, structured output.",Native — emits the API's real `tools`/`tool_choice` request fields and parses real tool-call responses back.

どちらのプロバイダーも :ref:`Managing agents <Managing agents>` エージェントをバッキングすることもできます。AIDBは常にエージェントツール呼び出し機能を提供しますが、
*方法* はプロバイダーによって異なります。 ``openai_responses``
によってサポートされ、ツール呼び出しは、本物のレスポンスAPIツール呼び出しとして有線で送られます。
``openai_completions``
またはほぼその他のプロバイダーに支えられて、AIDBはプロンプトテキストで使用可能なツールを説明し、モデルのプレーンテキストの応答からツールコールバックを解析します。モデル自身のツール呼び出し動作ではなく、シミュレーション。
``openai_responses``
は、エージェントにとってより信頼できる選択です。ツール呼び出しではなく、テキスト出力が必要な場合に\ ``openai_completions``
を使用します。

.. code:: sql

   SELECT aidb.create_model(
       my_gpt,
       openai_responses,
       config      => aidb.openai_responses_config(model => gpt-5.1),
       credentials => {"api_key": "sk-..."}::JSONB
   );

Azure AI Foundry
^^^^^^^^^^^^^^^^

Azure AI Foundryの統合されたResponses
APIサーフェスでホストされるモデルに\ ``openai_responses_azure``
を使用します。これは、直接OpenAIと同じワイヤー形状ですが、普遍的なデフォルトがないため\ ``url``
が必要です。リソースのエンドポイントに向けます。

.. code:: sql

   SELECT aidb.create_model(
       my_gpt_azure,
       openai_responses_azure,
       config      => aidb.openai_responses_config(
           model => gpt-5.1,
           url   => https://<resource>.openai.azure.com/openai/v1/responses
       ),
       credentials => {"api_key": "..."}::JSONB
   );

完全なパラメーターリストについては :ref:`promoteb.openai_responses_config <promoteb.openai_responses_config>` を参照し、各プロバイダーで\ ``tools``
、\ ``tool_choice`` 、および\ ``response_format``
を使用する場合は :ref:`ツール呼び出しと構造化出力 <ツール呼び出しと構造化出力>` を参照してください。

Anthropic Messages API
----------------------

``anthropic_messages``
プロバイダーは、AnthropicのネイティブメッセージAPI ``/v1/messages``
に接続します。

.. code:: sql

   SELECT aidb.create_model(
       my_claude,
       anthropic_messages,
       config      => aidb.anthropic_messages_config(model => claude-opus-4-6),
       credentials => {"api_key": "sk-ant-..."}::JSONB
   );

Azure AI FoundryとAWS Bedrock
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

残りの2つのバリアントは、同じ構成ヘルパーとワイヤーボディを共有し、認証とエンドポイントのみが異なります。

- ``anthropic_messages_azure`` — Azure AI FoundryのネイティブAnthropic
  Messages APIサーフェス。 ``url``
  が必要ですリソースのメッセージエンドポイント。

- ``anthropic_messages_bedrock`` — AWS BedrockのInvokeModel API、Bedrock
  APIキーAWS SigV4ではなくベアラートークンで認証されます。 ``url``
  は必須で、リージョンの\ ``bedrock-runtime``
  ベースエンドポイントである必要があります。AIDBはモデルIDをパスに自動的に追加します。

.. code:: sql

   - - Azure AI Foundry
   SELECT aidb.create_model(
       my_claude_azure,
       anthropic_messages_azure,
       config      => aidb.anthropic_messages_config(
           model => claude-opus-4-6,
           url   => https://<resource>.services.ai.azure.com/anthropic/v1/messages
       ),
       credentials => {"api_key": "..."}::JSONB
   );

   - - AWS Bedrock
   SELECT aidb.create_model(
       my_claude_bedrock,
       anthropic_messages_bedrock,
       config      => aidb.anthropic_messages_config(
           model => anthropic.claude-opus-4-6-v1:0,
           url   => https://bedrock-runtime.us-east-1.amazonaws.com
       ),
       credentials => {"api_key": "..."}::JSONB
   );

!!!note AnthropicのMessages
APIには、ネイティブの構造化出力フィールドがありません。
``response_format``
を使用すると、AIDBはそれを内部で合成ツールの強制呼び出しに変換します。機能的に同等ですが、これは、
``response_format`` を同じ呼び出しで\ ``tools`` /``tool_choice``
と組み合わせることはできないことを意味します。

``anthropic_messages``
は、クロード専用に構築されたAIDBの唯一のプロバイダーです。\ ``openai_completions``
と同等の古い\ ``anthropic_completions``
はありません。ベンダーごとのプロバイダーではなく、単一のユニファイドゲートウェイを介してクロードまたはOpenAI、または他のベンダーに到達したい場合は、以下の :ref:`OpenRouter <OpenRouter>` を参照してください。トレードオフは上記の\ ``openai_completions``
と同じです —
OpenRouterモデルは、エージェントをバッキングするときにネイティブではなく、シミュレートされたプロンプト挿入されたツール呼び出しを取得します。

完全なパラメーターリストについては、 :ref:`helpb.anthropic_messages_config <helpb.anthropic_messages_config>` を参照してください。

NVIDIA NIM
----------

AIDBは、 `build.nvidia.com <https://build.nvidia.com>`_ でホストされるNVIDIA
NIMマイクロサービスと、独自の環境で実行されているNIMインスタンスをサポートしています。

テキスト生成NIM補完
^^^^^^^^^^^^^^^^^^^

``aidb.completions_config()`` とともに\ ``nim_completions``
プロバイダーを使用します。NIMの補完エンドポイントはOpenAI互換であるため、\ ``openai_completions``
が使用するのと同じ構成ヘルパーです。完全なパラメーターリストについては、上記の :ref:`チャット完了 <チャット完了>` を参照してください。

.. code:: sql

   SELECT aidb.create_model(
       my_nim_llm,
       nim_completions,
       config      => aidb.completions_config(
           model => meta/llama-3.3-70b-instruct
       ),
       credentials => {"api_key": "nvapi-..."}::JSONB
   );

独自の環境で実行されているNIMインスタンスを使用するには、NIMエンドポイントをポイントして\ ``url``
から\ ``aidb.completions_config()`` に渡します。

登録後、\ ``aidb.generate_text()`` でモデルを実行します。

.. code:: sql

   SELECT aidb.generate_text(my_nim_llm, Tell me a short, one sentence story);

   __OUTPUT__
                                          generate_text
   - ---------------------------------------------------------------------------------
    As the clock struck midnight, a single tear fell from the porcelain dolls eye.
   (1 row)

マルチモーダルエンベディングNIM CLIP
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

共同テキストと画像の埋め込みには、 ``aidb.nim_clip_config()``
とともに\ ``nim_clip`` プロバイダーを使用します。

.. code:: sql

   SELECT aidb.create_model(
       my_nim_clip,
       nim_clip,
       config      => aidb.nim_clip_config(
           model => nvidia/nvclip
       ),
       credentials => {"api_key": "nvapi-..."}::JSONB
   );

``aidb.nim_clip_config()`` パラメーター

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `api_key`,TEXT,NULL,NIM認証用のAPIキー。
  `model`,TEXT,NULL,NIM CLIPモデル識別子。
  `url`,TEXT,NULL,NIMエンドポイントURLのオーバーライド。
  `basic_auth`,TEXT,NULL,基本的な認証資格情報。
  `is_hcp_model`,BOOLEAN,NULL,モデルがHCPで実行されている場合、`true`に設定します。

OCR NIM OCR
^^^^^^^^^^^

``nim_paddle_ocr`` プロバイダーを\ ``aidb.nim_ocr_config()``
とともに使用して、画像からテキストを抽出します。

.. code:: sql

   SELECT aidb.create_model(
       my_nim_ocr,
       nim_paddle_ocr,
       config      => aidb.nim_ocr_config(),
       credentials => {"api_key": "nvapi-..."}::JSONB
   );

``aidb.nim_ocr_config()`` パラメーター

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `api_key`,TEXT,NULL,NIM認証用のAPIキー。
  `model`,TEXT,NULL,NIM OCRモデル識別子。
  `url`,TEXT,NULL,NIMエンドポイントURLのオーバーライド。
  `basic_auth`,TEXT,NULL,基本的な認証資格情報。
  `is_hcp_model`,BOOLEAN,NULL,モデルがHCPで実行されている場合、`true`に設定します。

リランキングNIMリランキング
^^^^^^^^^^^^^^^^^^^^^^^^^^^

``nim_reranking`` プロバイダーを\ ``aidb.nim_reranking_config()``
とともに使用して、関連性によって検索結果を再スコアします。
``aidb.rerank_text()`` での使用については、
:ref:`Text reranking <Text reranking>` を参照してください。

.. code:: sql

   SELECT aidb.create_model(
       my_reranker,
       nim_reranking,
       config      => aidb.nim_reranking_config(
           model => nvidia/nv-rerankqa-mistral-4b-v3
       ),
       credentials => {"api_key": "nvapi-..."}::JSONB
   );

``aidb.nim_reranking_config()`` パラメーター

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `api_key`,TEXT,NULL,NIM認証用のAPIキー。
  `model`,TEXT,NULL,NIMリランキングモデル識別子。
  `url`,TEXT,NULL,NIMエンドポイントURLのオーバーライド。
  `basic_auth`,TEXT,NULL,基本的な認証資格情報。
  `is_hcp_model`,BOOLEAN,NULL,モデルがHCPで実行されている場合、`true`に設定します。

NIM APIキーを取得するには、
`build.nvidia.com <https://build.nvidia.com>`_ でアカウントを作成し、モデルを選択して、モデルのページからキーを生成します。

Google Gemini
-------------

``aidb.gemini_config()`` で\ ``gemini`` プロバイダーを使用します。
``api_key`` は\ ``aidb.gemini_config()``
の最初のパラメーターであり、デフォルトありませんが、 ``NULL``
として渡し、代わりに\ ``create_model()`` の\ ``credentials``
引数を介して実際のキーを提供します。 ``config`` には\ ``api_key``
フィールドを含めることはできません。

.. code:: sql

   SELECT aidb.create_model(
       my_gemini,
       gemini,
       config      => aidb.gemini_config(
           api_key => NULL,
           model   => gemini-2.0-flash
       ),
       credentials => {"api_key": "AIza..."}::JSONB
   );

``aidb.gemini_config()`` パラメーター

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `api_key`,TEXT,Required,デフォルトはありませんが、 `NULL`を渡し、代わりに`create_model()`の`credentials`引数を介して本当のキーを提供します。 `config`に`api_key`を含めることはできません。
  `model`,TEXT,NULL,Geminiモデル識別子たとえば `gemini-2.0-flash` 。
  `url`,TEXT,NULL,APIエンドポイントURLオーバーライド。
  `max_concurrent_requests`,INTEGER,NULL,APIへの最大同時要求。
  `thinking_budget`,INTEGER,NULL,拡張思考トークンの予算Gemini 2.xモデルのみ。

OpenRouter
----------

`OpenRouter <https://openrouter.ai>`_ は、複数のプロバイダーの200以上のモデルに統合APIゲートウェイを提供します。
AIDBは、OpenRouterを介したチャット補完と埋め込みの両方をサポートしています。

.. _チャット完了-1:

チャット完了
^^^^^^^^^^^^

.. code:: sql

   SELECT aidb.create_model(
       my_or_chat,
       openrouter_chat,
       config      => aidb.openrouter_chat_config(anthropic/claude-3-5-haiku),
       credentials => {"api_key": "sk-or-..."}::JSONB
   );

``aidb.openrouter_chat_config()`` パラメーター

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,OpenRouterモデル識別子。
  `api_key`,TEXT,NULL,OpenRouter APIキー。
  `url`,TEXT,NULL,APIエンドポイントURLオーバーライド。
  `max_concurrent_requests`,INTEGER,NULL,最大同時要求。
  `max_tokens`,JSONB,NULL,最大トークン構成`aidb.max_tokens_config()`から。

.. _エンベディング-1:

エンベディング
^^^^^^^^^^^^^^

.. code:: sql

   SELECT aidb.create_model(
       my_or_embedder,
       openrouter_embeddings,
       config      => aidb.openrouter_embeddings_config(mistral/mistral-embed),
       credentials => {"api_key": "sk-or-..."}::JSONB
   );

``aidb.openrouter_embeddings_config()`` パラメーター

.. csv-table::
  :header: Parameter,Type,Default,Description
  :widths: 15,12,12,20
  :align: left
  :class: longtable

  `model`,TEXT,Required,OpenRouterエンベディングモデル識別子。
  `api_key`,TEXT,NULL,OpenRouter APIキー。
  `url`,TEXT,NULL,APIエンドポイントURLオーバーライド。
  `max_concurrent_requests`,INTEGER,NULL,最大同時要求。
  `max_batch_size`,INTEGER,NULL,バッチ要求ごとの最大入力。

すべての構成ヘルパー機能の完全なパラメーターの詳細については、
:ref:`Models reference <Models reference>` を参照してください。
