Configuring AIDB
================

AIDBを使用するには、\ ``shared_preload_libraries``
に追加し、データベースに拡張機能を作成し、ユーザーアクセスを管理し、インストールを確認します。このページでは、プロキシ設定と、後で調整できるAIDB構成パラメーターGUCについても説明します。

shared_preload_librariesの構成
------------------------------

1. ``postgresql.conf`` ファイルで、 ``aidb``
   を\ ``shared_preload_libraries`` パラメーターに追加します。

.. code:: ini

      shared_preload_libraries = aidb

!!!note `shared_preload_libraries` に既に他の拡張機能がリストされている場合、コンマ区切りを使用して`aidb` を追加します。順序は関係ありません。 .. ::
   1. Postgresを再起動します。

拡張機能を作成します
--------------------

1. データベースにAIDB拡張機能を作成します。

.. code:: sql

      CREATE EXTENSION aidb CASCADE;

``CASCADE`` オプションは、必要な\ ``vector``
拡張機能がまだ存在していない場合は、自動的にインストールします。

!!!注PGDユーザーEDB
Postgres分散PGDを実行している場合、拡張機能を作成した後に次を実行して、レプリケーションセットにAIDBカタログテーブルを登録します。

.. code:: sql

      SELECT aidb.bdr_setup();

.. ::
   1. S3互換オブジェクトストアやローカルファイルシステムボリュームなどの外部データソースを使用する予定がある場合は、Postgres File SystemPGFS拡張機能もインストールします。

.. code:: sql

      CREATE EXTENSION pgfs;

詳細については、 :ref:`PGFS documentation </pg_extensions/pgfs/>` を参照してください。

aidb_usersロールを使用してユーザーアクセスを管理する
----------------------------------------------------

AIDB拡張機能を作成すると、Postgresは\ ``aidb_users``
という名前のロールを自動的に作成します。このロールのユーザーメンバーシップを付与して、AIDBのSQLファンクションへのアクセスを付与します。後で拡張機能を削除しても、このロールは削除されません。

``aidb_users``
は、AIDB機能のアクセス管理を簡素化するように設計されています。

- **目的** ユーザーに\ ``aidb_users``
  ロールを付与すると、すべてのAIDB機能にアクセスできるため、拡張機能の機能を使用できます。

- **セキュリティ** ``aidb_users`` ロール
  **はAIDBの内部テーブルへのアクセスを付与しない**
  ため、拡張機能のパブリックAPIのみがそれを保持しているユーザーに公開されます。

- **バックグラウンドワーカー**
  バックグラウンドワーカーが使用される場合、バックグラウンドワーカーは、定義したユーザーとして、またはユーザーが指定したロールとして実行されます。そのユーザーがそのロールにアクセスできる場合。

ユーザーにAIDB機能を使用させるには、\ ``aidb_users``
ロールを付与します。

.. code:: sql

   GRANT aidb_users TO your_user;

たとえば、最初に特権またはロールメンバーシップのない\ ``alice``
という名前のロールを作成します。

.. code:: sql

   CREATE ROLE alice
     LOGIN
     PASSWORD change_me;   -- replace with a real password

次に、 ``alice`` を\ ``aidb_users`` ロールに追加します。

.. code:: sql

   GRANT aidb_users TO alice;

``alice`` は、\ ``aidb_users`` が持っている特権、たとえば、\ ``aidb``
スキーマのルーチンに対する\ ``EXECUTE`` を継承するようになりました。

``aidb_users``
のメンバーシップは、自分のデータへのアクセスを付与しません。 ``alice``
``aidb_users`` ではない
に、AIDBが読み取りまたは書き込みをするテーブルで必要な特権を付与します。この例では、通常はパイプラインで使用されるソーステーブルである3つの任意のテーブルへのアクセスを付与します。

.. code:: sql

   GRANT SELECT, INSERT, UPDATE, DELETE
     ON public.documents,
        public.email_text,
        public.chats
     TO alice;

``alice`` も\ ``public`` スキーマにオブジェクトを作成する必要がある場合

.. code:: sql

   GRANT CREATE ON SCHEMA public TO alice;

!!!note パイプラインデザイナーを介してAIDBを使用する
ハイブリッドマネージャーのパイプラインデザイナーを介してAIDBにアクセスする場合、パイプライン操作は別のロール\ ``visual_pipeline_user``
の下で実行されます。これは、 ``aidb_users``
のメンバーシップを付与する必要があります。その設定については、
`VPU and permissions <https://www.enterprisedb.com/docs/edb-postgres-ai/latest/hybrid-manager/ai-factory/pipeline-designer/vpu-and-permissions#configuring-vpu-permissions>`_ を参照してください。

プロキシ設定
------------

ご使用の環境がプロキシを介してアウトバウンドHTTPトラフィックをルーティングする場合、
Postgres環境ファイルで\ ``HTTP_PROXY`` および\ ``HTTPS_PROXY``
環境変数を設定します。コミュニティPostgresを使用するUbuntuでは、このファイルは\ ``/etc/postgresql/<version>/main/environment``
にあります。

.. code:: bash

   echo "HTTP_PROXY = http://<your-proxy-settings>/" | sudo tee -a /etc/postgresql/16/main/environment
   echo "HTTPS_PROXY = http://<your-proxy-settings>/" | sudo tee -a /etc/postgresql/16/main/environment

次に、 Postgresを再起動して変更を有効にします。

.. code:: bash

   sudo systemctl restart postgresql@16-main

``<your-proxy-settings>`` をプロキシアドレスに置き換え、\ ``16``
をPostgresバージョンに置き換えます。環境ファイルの正確な場所については、Postgresディストリビューションのドキュメントを参照してください。

!!!注
AIDBのエアギャップサポートは制限されています。ビルトインCPUモデルランタイムCandleおよびllama.cppは、モデルファイルがローカルで利用できるようになると、完全にオフラインで実行されますが、リモートモデルプロバイダーを呼び出すパイプラインステップまたはエージェントツールは、そのプロバイダーへのアウトバウンドネットワークアクセスが必要です。

構成パラメーター
----------------

AIDBは、 ``aidb.*``
名前空間でPostgres構成パラメーターGUCのセットを公開します。
``postgresql.conf`` で設定し、\ ``SET``
とセッションごとに、または\ ``-c``
と接続ごとに設定します。以下のパラメーターのほとんどは\ ``USERSET``
です。ロールは自分のセッションでそれらを変更できます。異なるコンテキストを持つパラメーターは個別に呼び出されます。

スレッド制限
^^^^^^^^^^^^

.. csv-table::
  :header: Parameter,Type,Default,Range,Description
  :widths: 12,8,10,8,16
  :align: left
  :class: longtable

  `aidb.max_threads`,integer,`0`,0–1024,ローカルモデルの推論Candleおよびllama.cppに使用されるCPUスレッドの最大数。 `0`は、デフォルトの使用可能なCPUの半分を使用します。 `SUSET`.
  `aidb.max_io_threads`,integer,`0`,0–1024,AIDBの非同期I/OランタイムリモートモデルHTTP呼び出し、およびボリューム/オブジェクトストアI/Oの最大スレッド数。 `0`は、 `TOKIO_WORKER_THREADS`環境変数、またはTokio独自のデフォルトCPUごとに1つが設定されていない場合は、それにフォールバックします。 `SUSET`.

どちらもライブで適用されます。セッションローカル\ ``SET``
は、そのバックエンドでのみすぐに有効になります。 ``ALTER SYSTEM``
または\ ``postgresql.conf`` での設定は、\ ``pg_reload_conf()``
または\ ``SIGHUP``
の後に有効になり、すべてのバックエンドとバックグラウンドワーカーに伝播します。再起動は必要ありません。

promoteb.max_threads
^^^^^^^^^^^^^^^^^^^^

.. code:: sql

   SET aidb.max_threads = 4;

quietb.max_io_threads
^^^^^^^^^^^^^^^^^^^^^

.. code:: sql

   SET aidb.max_io_threads = 4;

これら2つのパラメーターが制御するもの、相互作用、およびそれらを下げる場合については、
:ref:`スレッド制限 <スレッド制限>` を参照してください。

モデルのダウンロード
^^^^^^^^^^^^^^^^^^^^

次のパラメーターは、
AIDBがHuggingFaceからローカルモデルファイルをダウンロードする方法を制御します該当するプロバイダーについては :ref:`Local models <Local models>` を参照してください。

.. csv-table::
  :header: Parameter,Type,Default,Range,Description
  :widths: 12,8,10,8,16
  :align: left
  :class: longtable

  `aidb.download_log_level`,string,`notice`,—,ルーチンのダウンロード進行状況メッセージたとえば、ダウンロードの開始/完了、バイト進行状況ハートビート、アダプターのロードラインなどの出力チャネルを制御します。有効な値 `notice`、`log`、`off`。以下を参照してください。
  `aidb.download_max_attempts`,integer,`30`,1–500,AIDBが異常終了するまでのファイルごとの最大合計ダウンロード試行初期要求と再試行。再試行動作については、  :ref:`ローカルモデルのダウンロード<ローカルモデルのダウンロード>` を参照してください。

helpb.download_log_level
^^^^^^^^^^^^^^^^^^^^^^^^

ルーチンのダウンロード進行状況メッセージの送信先を制御します。警告とエラーは影響を受けません。

.. csv-table::
  :header: Value,Behavior
  :widths: 20,25
  :align: left
  :class: longtable

  `notice`,`NOTICE`レベルでメッセージをクライアントに送信します。 `psql`のインタラクティブセッションに役立ちます。
  `log`,メッセージをサーバーログのみに送信します`log_min_messages`の対象。これは、クライアント出力がコールドおよびウォームキャッシュにわたって安定する必要があるバッチジョブとテストに使用します。
  `off`,ルーチンの進行状況メッセージを完全に抑制します。

例

.. code:: sql

   SET aidb.download_log_level = log;

quietb.download_max_attempts
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ファイルごとのダウンロード試行の合計数を制限します。ダウンローダーは、連続した試行で進行状況がゼロの場合、早期に中断するため、このパラメーターは主に過剰な再試行ループに対する安全上限です。

CIまたはスクリプト化されたバッチジョブでのフェイルファスト動作の場合、これを\ ``3``
または\ ``5``
などに下げます。損失の多いリンク上の非常に大きなファイルの場合にのみこの値を上げます。

例

.. code:: sql

   SET aidb.download_max_attempts = 5;

llama.cppネイティブログ
^^^^^^^^^^^^^^^^^^^^^^^

.. csv-table::
  :header: Parameter,Type,Default,Range,Description
  :widths: 12,8,10,8,16
  :align: left
  :class: longtable

  `aidb.enable_llamacpp_logs`,boolean,`false`,—,llama.cpp自身の診断出力GGUFメタデータ、テンソルシェイプ、およびバックエンド/モデルの初期化をサーバーログに書き込むかどうかを制御します。 `SUSET`.拡張機能の初期化時に1回読み取ります。以下を参照してください。

agentb.enable_llamacpp_logs
^^^^^^^^^^^^^^^^^^^^^^^^^^^

デフォルトでオフ
llama.cppのネイティブロギングは冗長であるため、モデルロードごとに数百行ため、必要な場合を除き、抑制されます。これは、AIDB自分自身のダウンロード進行状況メッセージを制御する上記の\ ``aidb.download_log_level``
とは別です。 2つは独立しています。

このページの他のパラメーターとは異なり、 ``aidb.enable_llamacpp_logs``
は\ ``SUSET`` スーパーユーザー、またはパラメーターで\ ``SET``
が付与されたロールは変更できます。拡張機能の初期化時に1回読み取られます。
``SET`` 、\ ``ALTER SYSTEM`` で設定するか、\ ``postgresql.conf``
の編集とリロード\ ``pg_reload_conf()``
は、Postgresが再起動されるまで有効になりません。

.. code:: ini

   aidb.enable_llamacpp_logs = true

.. code:: bash

   sudo systemctl restart postgresql@16-main

``llamacpp_generate`` および\ ``llamacpp_embeddings``
モデルにのみ適用されます。Candleベースのモデル\ ``bert_local``
、\ ``clip_local`` 、\ ``t5_local`` 、\ ``llama_instruct_local``
には影響しません。これを使用する場合については、
:ref:`Local models — Troubleshooting <Local models>` を参照してください。

ネットワーク下り
^^^^^^^^^^^^^^^^

次のパラメーターは、
AIDBからのアウトバウンドHTTPトラフィック、モデルプロバイダーAPIの呼び出しとHuggingFaceからのモデルファイルのダウンロードの両方を制限します。設定しない場合、制限は適用されず、AIDBは任意のホストに到達できます。

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

  `aidb.egress_allowlist`,string,unset,AIDBが到達できるホストおよび/またはCIDRレンジのコンマ区切りリスト。設定すると、リストにない宛先への送信要求は、接続が確立される前に拒否されます。 `SUSET`.
  `edb.egress_allowlist`,string,unset,拡張機能ごとの`aidb.egress_allowlist`が設定されていない場合に、すべてのEDB拡張機能で使用される共有フォールバックホワイトリスト。 AIDBと他のEDB拡張機能PGFSなどが同じネットワークポリシーを共有する場合に役立ちます。 `SUSET`.

エントリーフォーマット
^^^^^^^^^^^^^^^^^^^^^^

コンマ区切りの各エントリは、次のいずれかです。

.. csv-table::
  :header: Form,Matches
  :widths: 15,25
  :align: left
  :class: longtable

  `host.example.com`,Exact hostname match (case-insensitive).
  `.example.com`,Any subdomain of `example.com` (doesn't match `example.com` itself).
  `203.0.113.10`,Exact IPv4 or IPv6 literal in the destination URL.
  `203.0.113.0/24`,IPv4 CIDR range; matches IP literals in that range. Doesn't match hostnames.
  `2001:db8::/32`,IPv6 CIDR range.

エントリの周囲の空白は無視されます。
CIDRエントリはIPリテラルに対してのみチェックされます。ホスト名はマッチングのために解決されません。

解決順序
^^^^^^^^

アウトバウンド要求ごとに、AIDBは最初に\ ``aidb.egress_allowlist``
をチェックします。設定されていない場合、AIDBは\ ``edb.egress_allowlist``
にフォールバックします。どちらも設定されていない場合、チェックは適用されません。リダイレクトたとえば、CDNホストへのHuggingFaceリダイレクトなどは、同じ許可リストに対して再チェックされます。リストにないホストへのリダイレクトは拒否されます。

例
^^

OpenAIおよびHuggingFaceとそのCDNへの直接呼び出しのみを許可します。

.. code:: ini

   aidb.egress_allowlist = api.openai.com, huggingface.co, .huggingface.co, cdn-lfs.huggingface.co

要求が拒否されると、AIDBはアクティブなパラメーターを名前付けるエラーを発生させて、オペレーターがリストを調整できるようにします。

!!!note PGFSは、\ ``pgfs.egress_allowlist``
の下で同じ許可リストメカニズムを実装し、PGFSからクラウドオブジェクトストアエンドポイントS3、Google
Cloud Storage、Azure Blobへのトラフィックに適用されます。
``edb.egress_allowlist``
は、両方の拡張機能の共有フォールバックです。1つのリストをAIDBとPGFSに一緒に適用するように設定するか、それぞれが異なるポリシーが必要な場合に拡張ごとのパラメーターを使用します。
:ref:`PGFS — Network egress </pg_extensions/pgfs/configuring#network-egress>`  を参照してください。

AIDBパイプラインが外部ストレージから読み取る場合、両方の許可リストが関連します。AIDBはモデルプロバイダーとHuggingFaceトラフィックを制御し、PGFSはオブジェクトストアへの接続を制御します。
AIDBとPGFSがどのように連携するかについては、
:ref:`Configuring external storage <Configuring external storage>` を参照してください。

.. ::
   ### 資格情報環境変数

``aidb.create_model(credentials_env => ...)``
および\ ``aidb.import_mcp_tools(headers_env => ...)``
は、資格情報をデータベースに保存する代わりに、呼び出し者が名前付けたPostgresバックエンドプロセス環境変数を読み取ります。次のパラメーターは、この方法で参照できる変数名を制限します。

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

  `aidb.env_var_allowed_prefix`,string,`AIDB_`,`credentials_env`/`headers_env`を介して読み取られた環境変数名の必須接頭辞。制限を無効にするには、空の文字列に設定します。スーパーユーザーのみが変更できます。 `SUSET`.

呼び出し元制御のプロバイダーまたはMCPサーバーURLと組み合わせると、無制限の変数名は、悪意のある構成にPostgresプロセスの環境に存在する無関係のシークレットを読み取らせる可能性があります。このパラメータは、展開ごとにオーバーライド可能なままで、デフォルトでそれを閉じます。
``credentials_env`` については :ref:`環境変数からの資格情報 <環境変数からの資格情報>` を、 ``headers_env``
については :ref:`MCP tools <MCP tools>` を参照してください。

インストールの検証
------------------

psqlで\ ``\dx`` を実行し、出力で\ ``aidb`` 、\ ``vector`` 、\ ``pgfs``
インストールされている場合を探すことにより、拡張機能がインストールされていることを確認します。

::

   aidb=# \dx
   __OUTPUT__
                                        List of installed extensions
          Name            | Version |   Schema   |                        Description
   - ----------------------+---------+------------+------------------------------------------------------------
    aidb                  | 7.6.0   | aidb       | aidb: makes it easy to build AI applications with postgres
    pgfs                  | 3.3.0   | pgfs       | pgfs: enables access to filesystem-like storage locations
    vector                | 0.8.0   | public     | vector data type and ivfflat and hnsw access methods
