Function の付与
Agent への Package の付与: バージョン、タイムアウト、ネットワーク、承認。
Package は、Agent のバージョンに 付与 されるまで何もしません。呼び出しに関することは、すべて Grant で決めます。Package 側ではネットワーク、Credential、制限を宣言しないので、同じ Package を、ある Agent には狭い範囲で、別の Agent には広い範囲で付与できます。
コンソールでは、Grant は バージョンの編集画面 の Tool › Function package で設定します。Agent config では functions 配列にあたります。

フィールド
| コンソール | Config | 設定する内容 |
|---|---|---|
| Package の提供元 | source.type |
Subako が提供する Package なら platform、この Workspace でアップロードした Package なら workspace。 |
| Package | source.package / source.function_id |
どの Package か。Platform package は名前で、Workspace の Package は ID で指定します。 |
| バージョン | source.version |
{"type": "latest"} または {"type": "pinned", "number": 3}。Platform package は、常にそのデプロイメントに含まれるバージョンで実行されます。 |
| 名前 | name |
Grant の名前。既定値は Package の名前です。英小文字、数字、- を使って 32 文字まで。そのバージョンの Grant の中で一意にします。 |
| Timeout (秒) | timeout_secs |
1 回の呼び出しの実行時間の上限。1~300 秒で、空欄なら 60 秒です。 |
| ネットワーク | network |
HTTP リクエストの接続先として許可する Host。 |
| Credential | http_credentials |
Vault の Credential をリクエストに付与する送信先の Origin。 |
| 既定の Policy、Tool rule | default_policy、tools |
呼び出しを実行するか、承認を求めるか、拒否するか。 |
{
"functions": [
{
"name": "files",
"source": { "type": "platform", "package": "files" },
"default_policy": "allow"
},
{
"name": "billing",
"source": {
"type": "workspace",
"function_id": "0192f5c4-7a1e-7d3c-9b8f-2c6d1e4a5b70",
"version": { "type": "pinned", "number": 3 }
},
"default_policy": "allow",
"tools": [{ "name": "issue_refund", "policy": "require_approval" }],
"timeout_secs": 120,
"network": { "type": "allowlist", "hosts": ["billing.acme.example"] },
"http_credentials": ["https://billing.acme.example"]
}
],
"volume": { "data": { "type": "enabled" } }
}
モデルに見えるもの
各 Tool は fn__<grant>__<tool> (上の例では fn__billing__issue_refund) という名前で、Tool の説明と入力 Schema とともにモデルに渡されます。Package 自体の説明と Tool の出力 Schema は人が読むためのもので、モデルには渡されません。
さらに Subako は Grant ごとに一度、Session Volume の構成、1 回の呼び出しの実行時間の上限、接続できる Host をモデルに伝えます。つまり、Grant の設定そのものが Agent による Tool の使い方を方向づけます。
バージョン
Session は開始時に各 Grant のバージョンを 1 つに確定し、終了までそのバージョンを使います。
- 最新 は Package の更新に追従します。今日アップロードしたバージョンが、これから開始する Session で使われます。Agent の新しいバージョンを作る必要はありません。
- 固定 は、Agent の新しいバージョンで別のバージョンを指定するまで、同じバージョンを使い続けます。
変更内容を Agent のバージョンを通してレビューしたい Package は固定し、自動で更新されても信頼できる Package は最新に追従させます。
ネットワーク
Grant でネットワークを与えない限り、呼び出しはネットワークを使えません。
| コンソール | Config | リクエストの接続先 |
|---|---|---|
| ネットワークなし | {"type": "none"} |
どこにも接続できません。既定値です。 |
| すべての公開 Host | {"type": "unrestricted"} |
任意の公開 Host。 |
| 許可した Host のみ | {"type": "allowlist", "hosts": [...]} |
一覧にある Host のみ。最大 64 個です。 |
Host は api.example.com のような名前で指定し、その Host だけを許可します。*.example.com と書くとサブドメインを許可しますが、example.com 自体は含みません。Grant の設定にかかわらず、リクエストは https でしか送られず、Private address、Reserved address、Metadata address への接続は常に拒否されます。リダイレクトも 1 ホップごとに検査されるので、リダイレクト先でも同じです。
Credential
認証が必要な API を呼び出す Function であっても、Function 自身にキーを持たせてはいけません。代わりに次のようにします。
- API の Origin 用の HTTP header Credential として、キーを Vault に追加します。たとえば
https://billing.acme.exampleにauthorizationHeader を設定します。 - その Origin を Grant の Credential (
http_credentials、最大 16 個) に指定します。その Origin には、Grant のネットワーク設定でも接続できる必要があります。 - その Vault を指定して Session を開始します。
これで、Function がその Origin に送るリクエストすべてに Header が付きます。Header はリクエストが Module を出た後で追加されるので、Module が Header を目にすることはありません。Module がそれらの Header を自分で設定しようとすると、リクエストは拒否されます。Session のどの Vault にもその Origin の Credential がなければ、リクエストは Credential なしで送られます。GitHub を例にした手順は API を呼び出す で説明しています。
承認
各 Grant には、Tool 全体に適用する 既定の Policy と、Tool 名の完全一致で既定値を上書きする Tool rule があります。
- 許可 (
allow): 呼び出しはそのまま実行されます。 - 承認を求める (
require_approval): 呼び出しは、人がコンソールまたは アプリ から許可または拒否するまで待機します。 - 拒否 (
deny): Tool はモデルに提供されません。
たとえば、読み取りだけを行う Package は 許可 で実行し、何かを変更する 1 つの Tool だけを 承認を求める にできます。タイムアウトの後でモデルが再試行するかもしれない Tool は、二度実行しても問題ないように作ってください。
Session Volume
Agent config の volume (編集画面では Session Volume) で、Function が Temporary に加えて Data 領域も使えるかどうかを決めます。詳しくは ランタイム を参照してください。
課金
Function の呼び出しは、実行時間 (HTTP の待ち時間を含み、Subako Cloud では 1 秒あたり 0.01 SC) と、Volume に書き込んだバイト数に応じて課金されます。詳しくは Plan と使用量 を参照してください。