Chat 連携(channels)
Multica がどのようにエージェントをチャットプラットフォームに接続するか——1 つのチャンネルエンジンと、Lark(飞书)および Slack 向けのプラットフォーム別アダプター——受信パイプライン、セッション、認可までを解説します。
チャンネルは、Multica のエージェントをチャットプラットフォームに接続し、チームが普段やり取りしている場所でそのまま使えるようにします。現在チャンネルは 2 つあり——Lark(飞书)と Slack——どちらも同じエンジンで動いています。プラットフォームに依存しないコアと、薄いプラットフォーム別アダプターの組み合わせです。プラットフォームを追加するということは「アダプターを実装する」ことであり、「パイプラインを作り直す」ことではありません。
インストールは、それらを結びつける単位です。1 つの Bot が 1 つの (workspace, agent) に紐づきます。受信メッセージはまずインストールにルーティングされ、その後共有パイプラインを通り、エージェントの返信は同じチャットに送り返されます。
アーキテクチャ
受信パイプライン(共通)
すべての受信メッセージは——Lark でも Slack でも——エンジンの Router 内で同じ順序のステップを通ります。プラットフォームアダプターが供給するのはプラットフォーム別の部品(ResolverSet)だけで、ポリシーはエンジンの中にあります。
- インストールへのルーティング —— イベントを
channel_installation(→ ワークスペース + エージェント)に対応づけます。Lark はapp_idでルーティングし、Slack はイベントに含まれる app id でルーティングします。 - 宛先フィルター —— グループ/チャンネルでは、Bot を @ メンションしたメッセージだけが先へ進みます。アイドル状態のグループの雑談は破棄されます(読み取られません)。
- 重複排除(dedup) —— 2 フェーズの
(installation, message_id)クレームにより、サーバーのレプリカをまたいでも厳密に 1 回だけ処理されることを保証します。 - アイデンティティ + 認可 —— 送信者のプラットフォームユーザー id を Multica ユーザーに解決し(アカウントの紐づけ)、その上でワークスペースのメンバーシップを再チェックします。紐づいていない送信者には「アカウントを紐づける」プロンプトが返され、メンバーでない場合は破棄されます。
- セッション —— この会話に対応するchat セッションを見つけるか作成し、メッセージを追加します(セッションを参照)。
- トリガー —— エージェントのタスクをエンキューします。デーモンがエージェントを実行し、返信がチャットに送り返されます。
セッションとコンテキスト
エージェントのコンテキストは、chat セッションのトランスクリプト——そのセッションに時間をかけて取り込まれてきたメッセージ——です。このトランスクリプトのモデルは共通です(すべてのチャンネルで共有されます)。プラットフォームごとに異なるのは、アダプターが組み立てるセッション分離キーです。
| プラットフォーム | 分離キー | 効果 |
|---|---|---|
| Lark / 飞书 | チャット id | チャット/グループごとに 1 セッション——同じチャット内の連続したやり取りが 1 つのトランスクリプトに蓄積されます(複数ターンの記憶)。 |
| Slack | DM: チャンネル/チャンネル: channel + thread root | 各 DM が 1 セッション。各 @bot スレッドがそれぞれ独立したセッションになるので、同じチャンネル内の 2 つのスレッドが混ざりません。 |
グループでは、Bot を @ メンションしたメッセージだけが取り込まれます。どちらのチャンネルも、現時点ではチャンネルの他の(@ されていない)メッセージや過去ログを読まないため、エージェントは自分が宛先になっていないメッセージを見ることはありません。前後の履歴をコンテキストとして取得することは、今後の拡張として計画されています。
認可
共有グループ内で Bot を守るために、2 つの独立したゲートがあります——どちらもエンジンであらゆるメッセージに対し、Lark と Slack で同一に適用されます。
- アカウントの紐づけ(認証) —— 送信者のプラットフォームユーザー id が Multica ユーザーにリンクされている必要があります。誰かが初めて Bot にメッセージを送ると、自分自身の Multica アカウントにアイデンティティを紐づけるための使い切りリンクを受け取ります。それまではエージェントは実行されません。
- ワークスペースのメンバーシップ(認可) —— 紐づいた Multica ユーザーが、そのインストールのワークスペースのメンバーである必要があり、これはメッセージごとに再チェックされます。メンバーでない場合は黙って破棄されます。
そのため、Bot を公開チャンネルに追加しても安全です。アイデンティティを紐づけたワークスペースメンバーだけがエージェントを動かせ、各送信者は独立してチェックされます。ユーザー向けのプロンプトについては、各プラットフォームのページを参照してください。
2 つのチャンネル
Lark(飞书) — スキャンしてインストール。 ワークスペースの admin が Lark アプリで QR をスキャンするだけでエージェントを紐づけられます。開発者コンソールでの操作は不要です。エージェントごとに 1 つの Bot。Lark Bot 連携を参照してください。
Slack — 自分のアプリを持ち込む。 ワークスペースの admin が Slack アプリを作成し、自分の Slack ワークスペースにインストールして、その bot token + app-level token を Multica に貼り付けます。エージェントごとに専用の Slack アプリを持つため、1 つの Slack ワークスペース内で複数のエージェントがそれぞれ異なる Bot を持てます。マニフェストと手順は Slack Bot 連携を参照してください。
セルフホスト
各チャンネルは、保存時の暗号化キーを設定するまでオフです(このキーは、各 Bot のトークンがデータベースに触れる前にそれを暗号化します)。
MULTICA_LARK_SECRET_KEY=<base64-encoded 32-byte key>
MULTICA_SLACK_SECRET_KEY=<base64-encoded 32-byte key>Multica Cloud では両方ともすでに設定済みです。完全なリファレンスは環境変数を参照してください。
次に
- Lark Bot 連携 — スキャンしてインストール、DM / @ メンション /
/issue - Slack Bot 連携 — 自分のアプリを持ち込むセットアップ(マニフェスト + トークン)、エージェントごとの Bot
- エージェント · Chat · タスク