Chat SDK と AI SDK を使用して Slack 用 AI エージェントを構築する方法
この記事では、Chat SDK と AI SDK を使用して Slack 用の AI 駆動エージェントを構築する方法を詳しく説明します。プロジェクトのセットアップ、ツール定義、ストリーミング応答、Vercel へのデプロイ、toolpick を使用したツールセットの拡張についてカバーしています。
この記事では、Chat SDK と AI SDK を使用して Slack に AI エージェントを構築する方法を紹介します。このエージェントはメンションに応答し、会話履歴を維持し、自律的にツールを呼び出すことができます。Chat SDK はプラットフォーム統合(Webhook、メッセージフォーマット、スレッド追跡など)を担当し、AI SDK の ToolLoopAgent は推論ループを管理して、エージェントがツールを呼び出し結果に基づいて行動できるようにします。Vercel AI Gateway と Redis を組み合わせることで、インフラストラクチャを管理したりプロバイダ SDK を切り替えたりすることなく、本番環境に対応した Slack エージェントが得られます。
仕組み
Chat SDK は、Slack、Teams、Discord などのプラットフォーム向けにチャットボットを構築するための統一 TypeScript SDK です。イベントハンドラ(onNewMention や onSubscribedMessage など)を登録すると、SDK が受信した Webhook をそれらにルーティングします。Slack アダプタは、Webhook の検証、メッセージ解析、Slack API を処理します。Redis 状態アダプタは、ボットが購読しているスレッドを追跡し、同時メッセージ処理のための分散ロックを管理します。
AI SDK の ToolLoopAgent は、言語モデルとツールをラップし、自律ループを実行します。モデルがテキストを生成するかツールを呼び出し、SDK がツールを実行して結果をモデルにフィードバックし、モデルが完了するまで繰り返します。Vercel でアプリケーションをホストする場合、AI SDK は自動的に AI Gateway を介してリクエストをルーティングします。
Chat SDK は任意の AsyncIterable をメッセージとして受け入れるため、agent.fullStream を thread.post() に直接渡して、Slack でリアルタイムのストリーミングを実現できます。
実装手順
- Next.js プロジェクトを作成し、依存関係をインストールします:
npx create-next-app@latest my-slack-agent --typescript --app、次に chat、@chat-adapter/slack、@chat-adapter/state-redis、ai、zod をインストールします。 - Slack API サイトで Slack アプリを作成し、イベントサブスクリプションとインタラクティブ性の URL を設定します。
- 環境変数を設定します:SLACK_BOT_TOKEN、SLACK_SIGNING_SECRET、REDIS_URL、AI_GATEWAY_API_KEY。
- ツールを定義します(例:getWeather と searchDocs)。各ツールには説明、入力スキーマ、実行関数が含まれます。
- ToolLoopAgent インスタンスと Chat インスタンスを作成し、イベントハンドラを登録します:onNewMention でスレッドを購読してストリーミング応答、onSubscribedMessage で完全なスレッド履歴を取得してエージェントに渡します。
- Webhook ルートを作成します:
app/api/webhooks/[platform]/route.ts。 - ローカルテスト:ngrok を使用してサーバーを公開し、Slack アプリのリクエスト URL を更新し、チャンネルでボットを @メンションしてテストします。
- Vercel にデプロイ:環境変数を追加してデプロイし、Slack アプリの URL を本番 URL に更新します。
トラブルシューティング
- ボットがメンションに応答しない:Slack アプリに app_mentions:read スコープがあること、イベントサブスクリプションの URL が正しいことを確認します。
- ストリーミングが遅い:Redis 接続が安定していることを確認します。SDK は分散ロックを使用して同時メッセージを管理します。
- ツール呼び出しが静かに失敗する:ツールの実行関数にエラーハンドリングを追加し、サーバーログを確認します。
- スレッド履歴が大きくなりすぎる:エージェントに渡すメッセージ数を制限するか、古いメッセージを要約します。
ツールセットの拡張
本番環境では、Slack エージェントは 15~30 個のツールを持つことがあります。toolpick は起動時にツールをインデックス化し、各ステップで最も関連性の高いツールのみを選択することで、トークンコストを削減し、モデルが適切なツールを選択しやすくします。