AI News HubLIVE
站内改写2 分で読了

Chat SDK と AI SDK を使用して Slack 用 AI エージェントを構築する方法

この記事では、Chat SDK と AI SDK を使用して Slack 用の AI 駆動エージェントを構築する方法を詳しく説明します。プロジェクトのセットアップ、ツール定義、ストリーミング応答、Vercel へのデプロイ、toolpick を使用したツールセットの拡張についてカバーしています。

ソースHacker News AI著者: flashbrew

この記事では、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 でリアルタイムのストリーミングを実現できます。

実装手順

  1. Next.js プロジェクトを作成し、依存関係をインストールします:npx create-next-app@latest my-slack-agent --typescript --app、次に chat、@chat-adapter/slack、@chat-adapter/state-redis、ai、zod をインストールします。
  2. Slack API サイトで Slack アプリを作成し、イベントサブスクリプションとインタラクティブ性の URL を設定します。
  3. 環境変数を設定します:SLACK_BOT_TOKEN、SLACK_SIGNING_SECRET、REDIS_URL、AI_GATEWAY_API_KEY。
  4. ツールを定義します(例:getWeather と searchDocs)。各ツールには説明、入力スキーマ、実行関数が含まれます。
  5. ToolLoopAgent インスタンスと Chat インスタンスを作成し、イベントハンドラを登録します:onNewMention でスレッドを購読してストリーミング応答、onSubscribedMessage で完全なスレッド履歴を取得してエージェントに渡します。
  6. Webhook ルートを作成します:app/api/webhooks/[platform]/route.ts
  7. ローカルテスト:ngrok を使用してサーバーを公開し、Slack アプリのリクエスト URL を更新し、チャンネルでボットを @メンションしてテストします。
  8. Vercel にデプロイ:環境変数を追加してデプロイし、Slack アプリの URL を本番 URL に更新します。

トラブルシューティング

  • ボットがメンションに応答しない:Slack アプリに app_mentions:read スコープがあること、イベントサブスクリプションの URL が正しいことを確認します。
  • ストリーミングが遅い:Redis 接続が安定していることを確認します。SDK は分散ロックを使用して同時メッセージを管理します。
  • ツール呼び出しが静かに失敗する:ツールの実行関数にエラーハンドリングを追加し、サーバーログを確認します。
  • スレッド履歴が大きくなりすぎる:エージェントに渡すメッセージ数を制限するか、古いメッセージを要約します。

ツールセットの拡張

本番環境では、Slack エージェントは 15~30 個のツールを持つことがあります。toolpick は起動時にツールをインデックス化し、各ステップで最も関連性の高いツールのみを選択することで、トークンコストを削減し、モデルが適切なツールを選択しやすくします。