クイックスタート
AI Agent 向け: このページの Markdown 版は https://ankole.agentbull.com/ja-JP/docs/quickstart/index.md にあります。ドキュメント索引は https://ankole.agentbull.com/ja-JP/llms.txt にあります。
Ankole のデプロイ方法
プライベートな Ankole デプロイメントインスタンスには、1 つの control plane と 1 つ以上の Agent Computer Worker があります。control plane は永続的なドメイン状態と監視を所有する管理プラットフォームです。Worker は Agent の実行環境を提供し、Agent の仕事用コンピュータとして機能します。
1 つの Worker が複数の Agent にサービスを提供できます。金融など厳格な分離が必要な環境では、各 Agent に専用の Worker を割り当ててください。仕事用コンピュータは複数のインターンで共有したり、1 人の同僚に割り当てたりできます。
各インスタンスには PostgreSQL と永続ディスクストレージも必要です。シングルホストのデプロイメントでは、ローカルまたは仮想ディスクを使用できます。Kubernetes のデプロイメントには、ReadWriteMany をサポートする NFS または別の共有ボリュームが必要です。
このガイドで使用する用語
このページは、Ankole のユーザードキュメントとインターフェースで使用される用語を定義します。括弧内の名前は、サードパーティのプラットフォーム、設定フィールド、API に対応します。以降のセクションでは短縮形を使用します。
| 正式用語 | 意味 | 短縮形 |
|---|---|---|
| Private deployment instance | 企業がデプロイして管理する、1 つの完全な Ankole システム | Instance |
| Principal | Ankole で identity と権限を持つことができる人、Agent、またはシステムサービス | Principal |
| Identity Provider (IdP) | Console の SSO を提供し、社員、連絡先、組織構造を同期する外部の identity ソース | IdP |
| Chat platform | Slack、Teams、Lark/Feishu、DingTalk、WeCom、Telegram、Discord、LINE、WhatsApp、メールボックスなどの外部の会話プラットフォーム | Platform |
| Channel Provider | メッセージを受信して Agent の返信を送信する 1 つのチャットアプリまたは bot 設定 | Channel Provider |
| Signal Routing Rule (Signal Binding) | signal ソースから Agent にメッセージまたはイベントを送信するルール | Routing rule |
| LLM Provider | モデルサービスのエンドポイント、credential、利用可能なモデルを保存する設定 | LLM Provider |
Background Agent Jobs profile (内部キー: coding) |
Background Agent Jobs の AIGateway provider とモデルを選択します。通常の会話はコード量によってこれを選択しません | Background Agent Jobs |
Agent にセットアップを完了させる
このプロンプトを Codex、Claude Code、またはターミナルを操作できる別の Agent に送信できます。
https://ankole.agentbull.com/ja-JP/docs/quickstart/index.md を使って、Ankole のプライベートデプロイメントインスタンスのデプロイと設定を手伝ってください。 まず、私の環境を調査し、Docker Compose、Kubernetes、またはソースからのインストールのいずれかを推奨してください。次に、Identity Provider(IdP)、LLM Provider、Agent、Channel Provider、Signal Routing Rule(Signal Binding)のセットアップを手伝ってください。IdP と IM プラットフォームを指定していない場合は、使用したい identity ソースとチャットプラットフォームを尋ねてください。勝手に選択しないでください。 chat やコマンドの出力に secret を露出しないでください。選択した IM で実際の Agent の返信を受け取ったときにだけ、作業は完了とみなします。
1. Ankole をデプロイする
1 台のホストには Docker Compose を、エンタープライズのデプロイメントには Kubernetes を使用してください。開発とデバッグにはソースからインストールしてください。
多くのチームに最適な出発点です。Docker を実行する Linux、macOS、Windows の 1 台のホストで、PostgreSQL、control plane、1 つの Agent Computer Worker、Caddy HTTPS を実行できます。
始める前に
- Linux amd64 または arm64 のコンテナを実行できる Linux、macOS、または Windows ホスト
- Compose プラグイン付きの Docker Engine、または Docker Desktop
- 永続ディスク、DNS 名、そして 80 と 443 のポート
基本設定
Docker Compose でインストールする
provider の API key はこのデプロイメントファイルに含めないでください。サインイン後に Console で追加します。
- 01
デプロイメントパッケージを入手する
bashgit clone https://github.com/AgentBull/ankole.git cd ankole/tools/deploy/docker-compose cp .env.example .env chmod 600 .env - 02
3 つの独立した secret を生成する
このコマンドをコピーして実行してください。その完全な出力を .env に貼り付けます。
bashprintf '%s\n' \ '# PostgreSQL database password' \ "POSTGRES_PASSWORD=$(openssl rand -hex 32)" \ '' \ '# ANKOLE master encryption key' \ "ANKOLE_SECRET_BASE=$(openssl rand -hex 32)" \ '' \ '# Authentication key shared by the ANKOLE control plane and Agent Workers' \ "ANKOLE_RUNTIME_FABRIC_WORKER_AUTH_KEY=$(openssl rand -hex 32)" - 03
公開ホストを設定する
ANKOLE_HOST に、このホストを指す DNS 名を設定してください。ACME_EMAIL には、証明書の通知を受信できるアドレスを設定してください。
- ANKOLE_HOST
- ankole.example.com
- ユーザーと provider の callback が使用する HTTPS ホスト。
- ACME_EMAIL
- ops@example.com
- Caddy の証明書管理用の連絡先アドレス。
- 04
スタックを起動して確認する
Compose は PostgreSQL を待ち、migration を実行し、Worker key を保存した後、control plane、Worker、Caddy を起動します。
bashdocker compose pull docker compose up -d docker compose ps - 05
初回のセットアップを開く
https://<ANKOLE_HOST>/setup を開き、activation code を入力してください。
bashdocker compose logs control-plane | grep "SETUP ACTIVATION CODE"
2. 最初に identity provider をセットアップする
Ankole はエンタープライズ内のプライベートデプロイメント用に設計されています。各エンタープライズは 1 つのインスタンスを運用します。そのインスタンス内では、Agent、社員、システムサービスが Principal として表現され、認可モジュールがそれらの権限を管理します。
Hermes Agent や OpenClaw と同様に、Ankole はチャットチャンネルに接続します。また、エンタープライズの identity ソースにも接続し、社員、ディレクトリの連絡先、組織構造を同期します。チャットチャンネルを設定する前に、Identity Provider(IdP)を設定してください。
| 設定 | 制御するもの | 設定場所 |
|---|---|---|
| Identity Provider (IdP) | Console の SSO、およびエンタープライズのディレクトリから同期される社員、連絡先、組織構造、権限グループ | 最初に /setup、その後 Console → Identity Providers |
| Channel Provider | メッセージを受信して Agent の返信を送信する IM アプリまたは bot | Console → Signal Routing |
identity ソースとチャットチャンネルには異なるプラットフォームを使用できます。社員は Google Workspace でサインインし、Slack で Agent と会話できます。Entra ID が identity を提供し、Lark、Slack、DingTalk、Teams、または WeCom が会話を運ぶこともできます。
お使いの IdP のセットアップを完了する
エンタープライズが使用する identity ソースを選択してください。各タブは provider のコンソールから始まり、最初のサインインとディレクトリ同期で終わります。
アダプタを初めて有効にする場合は、最初のサインインの後に control plane を再起動してください。この再起動で、ディレクトリ接続や Graph サブスクリプションなどのプラグインのバックグラウンド作業が開始されます。
Console へのサインイン、ワークスペースメンバーとユーザーグループの同期に 1 つの Slack app を使用します。デフォルトのセットアップには、OAuth client、Bot Token、App Token が必要です。
始める前に
- Slack app を作成してインストールできるワークスペース管理者
- Ankole の公開 HTTPS アドレス
- 最初のサインイン用のワークスペースメンバーアカウント
基本設定
Slack IdP をセットアップする
- 01
Ankole から callback URL をコピーする
https://<ANKOLE_HOST>/setup を開き、activation code を入力してください。プラグインページで Slack Adapter を選択し、選択を保存してから Slack を選択してください。
Configuration ID(Provider ID)は slack-main のままにしてください。Copy を使ってログイン callback URL をコピーしてください。この URL を手で入力したり変更したりしないでください。
- 02
Slack app を作成する
Slack API の Your Apps を開き、Create New App → From scratch を選択してください。アプリ名を入力し、社員が所属するワークスペースを選択してください。
Basic Information → App Credentials を開いてください。Client ID と Client Secret をコピーしてください。
- 03
ログイン callback を登録する
OAuth & Permissions → Redirect URLs を開いてください。Add New Redirect URL を選択し、Ankole の完全な URL を貼り付けて保存してください。
Ankole はデフォルトで openid、profile、email のサインイン scope を要求します。それらを chat bot の scope に置き換えないでください。
- 04
ディレクトリアクセスを許可して Bot Token を取得する
OAuth & Permissions で、下記の 3 つの scope を Bot Token Scopes に追加してください。その後、Install to Workspace を選択してインストールを承認してください。
users:readメンバープロファイルを読み取ります
users:read.emailメンバーのメールアドレスを読み取ります
usergroups:readユーザーグループとそのメンバーを読み取ります
インストール後に Bot User OAuth Token をコピーしてください。xoxb- で始まる必要があります。scope を変更するたびにアプリを再インストールしてください。
- 05
App Token を取得して Socket Mode を有効にする
Basic Information → App-Level Tokens を開いてください。Generate Token and Scopes を選択し、下記の scope を追加して、生成された xapp- token をコピーしてください。その後、Socket Mode を開き、Enable Socket Mode をオンにしてください。
connections:writeApp Token が Socket Mode 接続を開けるようにします
- 06
ディレクトリイベントを購読する
Event Subscriptions を開いてイベントを有効にしてください。Subscribe to bot events で、下記の 5 つのイベントをすべて追加してください。
team_joinメンバーがワークスペースに参加します
user_changeメンバーのプロファイルが変更されます
subteam_createdユーザーグループが作成されます
subteam_updatedユーザーグループが変更されます
subteam_members_changedユーザーグループのメンバーシップが変更されます
- 07
Slack の値を Ankole に入力する
Sync directory と Sync directory changes をオンにしたままにしてください。Validate configuration を選択してサインインしてください。その後、Slack の認可を完了してください。
- Client ID: Basic Information の Client ID
- Client Secret: 同じページの Client Secret
- Workspace ID: 任意。Slack の Web URL の /client/ の後に続く T… の値を入力すると、サインインするワークスペースを事前選択できます。ディレクトリ同期は制限されません
- Bot User OAuth Token: xoxb- token
- App-Level Token: xapp- token
- 08
サインインと最初の同期を確認する
Slack が Ankole に戻ると、このユーザーが最初の root administrator になります。Console → Identity Providers を開き、slack-main を選択して Run full sync を選択してください。
同期が終わったら、Console → Principals と Principal groups で、ワークスペースのメンバーと Slack のユーザーグループを確認してください。
3. LLM Provider を追加して Agent を作成する
Agent のモデルプロファイルはモデル参照を保存するため、最初に LLM Provider を追加してください。Console にサインインし、Providers → New provider を開いて、provider の種類を選択し、安定した Provider ID を付け、エンドポイントと credential のフィールドを入力して保存してください。
provider の credential は control plane 内で暗号化されたまま保持されます。デプロイメントの環境ファイルや Agent ファイルに配置しないでください。
Agents → New Agent を開いてください。Agent に安定した UID、明確な表示名、そして何を所有し何が許容可能な結果とみなされるかを示す mission を与えてください。
次に、そのモデルプロファイルを設定します。
| プロファイル | 初回実行での用途 |
|---|---|
primary |
メインの推論モデル |
light |
短く頻繁な仕事 |
heavy |
難しい総合 |
Agent が実行できるようになるには、3 つすべてが必要です。最初の会話では、同じ既知の正常な provider とモデルを 3 つすべてにバインドできます。エンドツーエンドの経路が動作した後にのみ分割してください。
4. チャットチャンネルを接続して signal routing ルールを作成する
Console でチャットプラットフォームの Control Plane Plugin を有効にし、そのプラットフォーム上で bot またはアプリケーションを作成してください。両方が同じプラットフォームを使用する場合でも、IdP とチャットの役割には別々のアプリを使用してください。この分離により、サインインとディレクトリの権限が bot の権限から離れます。また、credential のローテーションとアプリのリリースも分離されます。
通常、1 つのチャットアプリは 1 つの bot identity を表します。複数の Agent が異なる bot 名、アバター、または権限を必要とする場合は、そのプラットフォームで複数のアプリを作成してください。アプリを準備したら、Console でその routing ルールを作成し、意図する Agent に接続してください。
Slack、Teams、Lark/Feishu、DingTalk、WeCom はエンタープライズ向けプラットフォームです。そのユーザーは IdP が同期したディレクトリに由来します。Telegram、Discord、LINE、WhatsApp はコンシューマー向け IM です。そのユーザーには従業員レコードがないため、Agent が応答する前に、管理者が アイデンティティ → 保留中のマッピング で新しい送信者ごとにアカウントへマッピングします。WhatsApp では、既知のアカウントがすでにその電話番号を所有している場合、送信者は自動的にマッピングされます。Email は専用のメールボックスを接続し、送信者は明示的なメールの identity 紐付けによってのみ既知になります。
Slack は Socket Mode を使用します。Ankole はアウトバウンドの WebSocket を開くため、チャットの経路に公開の Slack webhook は不要です。
始める前に
- Slack app を作成してインストールする権限
- テスト用のチャンネルまたはダイレクトメッセージ
基本設定
Slack app を準備する
- 01
アプリを作成して Socket Mode を有効にする
Slack app をゼロから作成してください。Basic Information で App-Level Token を作成し、下記の scope を追加してから Socket Mode を有効にしてください。
connections:writeApp Token が Socket Mode 接続を開けるようにします
- 02
チャットとチャンネル状態のイベントを購読する
Event Subscriptions → Subscribe to bot events を開いてください。下記の各イベントを追加してください。このセットは、Slack アダプタが実装するメッセージ、リアクション、チャンネル状態の機能に一致します。
app_mentionチャンネルの @ メンションを受信します
message.channelsパブリックチャンネルのメッセージを受信します
message.groupsプライベートチャンネルのメッセージを受信します
message.imダイレクトメッセージを受信します
message.mpim複数人ダイレクトメッセージを受信します
reaction_added追加されたリアクションを受信します
reaction_removed削除されたリアクションを受信します
member_joined_channelチャンネルに参加したメンバーを同期します
member_left_channelチャンネルを離れたメンバーを同期します
channel_renameチャンネルの名称変更を同期します
group_renameプライベートチャンネルの名称変更を同期します
channel_deletedチャンネルの削除を同期します
channel_archiveチャンネルのアーカイブを同期します
- 03
ダイレクトメッセージを有効にする
App Home → Show Tabs を開いてください。Display Messages tab をオンにし、Allow users to send Slash commands and messages from the messages tab を選択してください。Messages タブだけでは表示領域が現れるだけで、ユーザーは Agent にダイレクトメッセージを送れません。
- 04
Slack ネイティブの対話性を有効にする
Interactivity & Shortcuts を開き、Interactivity を有効にしてください。Socket Mode は既存の WebSocket 経由で Block Kit のボタンアクションを配信するため、公開の Request URL は不要です。
- 05
完全なチャット scope を付与してアプリをインストールする
OAuth & Permissions → Bot Token Scopes で、下記の各 scope を追加してください。このセットは Ankole が呼び出す Slack API のみをカバーします。未使用の assistant、workflow、document、meeting の scope は付与しないでください。
app_mentions:readbot に言及したメッセージを読み取ります
channels:readパブリックチャンネルとそのメンバーを同期します
channels:historyパブリックチャンネルのメッセージを読み取り、返信を調整します
groups:readプライベートチャンネルとそのメンバーを同期します
groups:historyプライベートチャンネルのメッセージを読み取り、返信を調整します
im:readダイレクトメッセージの会話を同期します
im:historyダイレクトメッセージを読み取り、返信を調整します
mpim:read複数人ダイレクトメッセージとそのメンバーを同期します
mpim:history複数人ダイレクトメッセージを読み取り、返信を調整します
chat:writebot メッセージを送信、更新、削除します
reactions:readリアクションの変更を受信します
reactions:writeリアクションを追加および削除します
files:readメッセージに添付されたファイルを読み取ります
files:writeAgent が送信するファイルをアップロードします
users:readチャンネルメンバーを特定し、bot アカウントを除外します
scope を変更した後は、アプリをワークスペースに再インストールし、新しい Bot Token を Ankole に書き込んでください。
- 06
Console のフィールドを収集する
- botToken
- xoxb-…
- Bot User OAuth Token。xoxb- プレフィックスが必要です。
- appToken
- xapp-…
- Socket Mode 用の App-Level Token。xapp- プレフィックスが必要です。
Console で接続を完了する
現在のリリースは直接接続を使用します。1 つの routing ルールが 1 つの Channel Provider を 1 つの Agent に接続します。これは、アダプタ、アプリの credential、ターゲット Agent、グループメッセージの動作を記録します。bot ごとに別のルールを作成してください。
Console で、Signal Routing → New routing rule を開き、設定してください:
| フィールド | 選択するもの |
|---|---|
| Target Agent | ステップ 3 で作成した Agent |
| Adapter | Slack、Teams、Lark/Feishu、DingTalk、WeCom、Telegram、Discord、LINE、WhatsApp、または Email |
| Rule name | slack-main や lark-main などの安定した名前 |
| Group message mode | addressed_only から始める |
| Channel settings | チャンネルタブの credential と値を貼り付ける |
ルールを保存してください。リストに enabled として表示される必要があります。フォームが credential を拒否した場合は、IM をテストする前にそのエラーを修正してください。アダプタはまだ接続を開いていません。
5. IM で Agent と話す
bot をテスト用の会話に追加してください。グループチャットでは、明示的な @ メンションから始めます:
@Ankole 何ができますか。どのチームにサービスを提供していますか?
最初の実際のモデル返信の後、Agent の mission、モデル、グループチャットポリシーをチーム用に調整してください。
Agent が返信しない場合
次の順序で、一度に 1 つの境界を確認してください:
- 最新の provider アプリのバージョンが公開され、テストユーザーが利用できる。
- bot がチャンネル、チーム、または会話にインストールされている。
- 必要なメッセージイベントと scope がアクティブである。
- routing ルールが有効で、意図する Agent を指している。
- Agent が
primary、light、heavyのモデルプロファイルを持っている。 - LLM Provider の credential とモデルセレクタが有効である。
- 少なくとも 1 つの Worker が準備完了である。
Compose の場合は、docker compose logs -f control-plane worker を調べてください。Kubernetes の場合は、control plane と Worker の pod ログを調べてください。関連するエラーのみを読み、環境変数や secret を出力しないでください。
返信を受け取ったら、Agents、Signal Routing ルール、または Background Agent Jobs に進んでください。