Delegation
==========

エージェントは、ツールを直接呼び出す代わりに、またはそれとともに、要求の一部を別のエージェントに引き渡すことができます。
:ref:`Managing agents <Managing agents>` を行うときに、\ ``delegates``
に他のエージェントの名前をリストします。

.. code:: sql

   SELECT aidb.create_agent(
       name         => sql_specialist,
       instructions => You answer questions about the orders and customers tables precisely.,
       model        => my_gpt,
       tools        => ARRAY[run_sql_query]
   );

   SELECT aidb.create_agent(
       name         => help_desk,
       instructions => You help users with general questions, delegating data questions to the SQL specialist.,
       model        => my_gpt,
       delegates    => ARRAY[sql_specialist]
   );

   SELECT * FROM aidb.agent_converse(help_desk, How many orders came in last week?);

モデルにデリゲートを提示する
----------------------------

構成された各デリゲートは、デリゲートエージェントにちなんで名前付けられた通常のファンクション呼び出しツールになり、2つの引数、\ ``prompt``
必須-ハンドオフの要求と\ ``conversation_id``
オプショナル-以下の :ref:`デリゲートの会話を継続する <デリゲートの会話を継続する>` を参照してください。デリゲート自分自身の\ ``instructions``
はそのツールの説明になるため、委任モデルはそれらを「このデリゲートの目的」と見なします。委任されることが予想される場合は、その2つの目的を念頭に置いてエージェントの指示を作成します。

デリゲート名はエージェント自分自身の\ ``tools``
のいずれかと衝突してはならず、 ``tools`` と同様に、\ ``create_agent``
/``update_agent``
時間に現在登録されているエージェントであることが検証されます。

デリゲートの会話を継続する
--------------------------

デリゲートを呼び出すと、\ ``answer`` および\ ``conversation_id``
を含むオブジェクトが返されます。モデルは、その\ ``conversation_id``
を同じまたは将来の\ ``agent_converse``
実行での後のデリゲート呼び出しに戻して、毎回新しく開始するのではなく、独自の以前の履歴でその特定のデリゲートの会話を続行できます。それを省略すると一般的な場合、呼び出しのたびにデリゲートとの新しい会話が開始されます。

ハンドオフを介した動作の伝播
----------------------------

- **読み取り専用モードが伝播します。**
  委任の実行が :ref:`読み取り専用モード <読み取り専用モード>` の場合、デリゲート自分のサブ呼び出しも強制読み取り専用です。読み取り専用エージェントは委任を使用して、別のエージェントをライトスルーに到達することはできません。読み取り専用のデリゲート呼び出しは常に\ ``conversation_id: null``
  を返し、続行できません。

- **デバッグモードが伝播します。**
  トップレベル呼び出しが\ ``debug => true``
  を渡した場合、デリゲート自分のアクションは\ ``NOTICE``
  メッセージとしても出力されます。

- **ロールは伝播しません。**
  デリゲートは、委任エージェントのロールではなく、 *独自の*
  構成済み\ ``role`` または現在のユーザーがない場合は実行されます。

- **予算は伝播しません。**
  各デリゲート呼び出しは、独自の構成から独自の新しいトークン/反復バジェットとタイムアウトを取得します。親の予算は、デリゲートができる量を制限しません。

委任の深さ
----------

委任チェーンは、10レベルの深さ(各エージェントが次のエージェントに委任するエージェントのチェーン)で制限されます。これは、主にPostgresのスタック深さチェックがバックエンドを中止するまで再帰するのではなく、サイクル—1つのエージェントが自分自身に委任する、または2つのエージェントが前後に委任する—でフェイルファストするために存在します。制限に到達すると、タスクがエラーですぐに停止します。通常のツールの障害が発生する場合とは異なり、再試行されません。
