0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

n8n × Claude Managed Agent で Slack の質問に自動応答する AI ボットの作り方

0
Posted at

SRE をやっていると、「あの設定どこにある?」「このアラートって何?」といった定型的な問い合わせが Slack によく飛んできます。多くは過去のチケットやコードを見れば分かるものですが、その都度人が拾うのはなかなかのトイル(繰り返しの手作業)です。

そこで業務で、Slack でメンションされたら Claude Managed Agent が一次対応してくれるボットを作りました。備忘録もかねて、構成と作り方をまとめます。少しでも同じような状況の方の参考になれば幸いです。

何を作るか

つくったのは、Slack でメンションを受けると、n8n を司令塔にして Claude Managed Agent に回答させ、その結果を Slack のスレッドへ返す、というボットです。

Claude Managed Agent は、ツールの実行ループやコンテキスト管理を API 側が面倒見てくれるエージェントです。こちらは役割(system prompt)と使えるツール(MCP)を渡すだけで、エージェントが自律的に「情報を取る → 考える → 答える」を回してくれます。素の Chat Completion と違って、自分で必要な情報を取りに行ってくれるのが特徴です。

全体の流れ

処理の流れは、シンプルに3ステップです。

[Slack でメンション]
      │  Events API
      ▼
[n8n: Slack Trigger]
      │
      ▼
[n8n: HTTP Request → Claude Managed Agent]
        ・質問文を渡す
        ・Agent は MCP で Linear / GitHub / Docs を自分で参照

n8n は「Slack を受けて、Agent を呼ぶ」という糊(グルー)の役割に徹します。考える部分は Managed Agent に任せる、という分担です。順に見ていきます。

Slack Trigger でメンションを受ける

まずは n8n の Slack Trigger ノードで、app_mention イベントを購読します。

  • Slack App を作り、app_mention イベントを n8n の Webhook URL に飛ばす
  • ボットを呼びたいチャンネルに、そのアプリを招待しておく

ここで受け取るのは、「誰が・どのチャンネルやスレッドで・何と言ったか」という情報です。あとでスレッドに返信したいので、channelthread_ts を保持しておきます。

Claude Managed Agent を呼ぶ

次に、n8n から Managed Agent の API を HTTP Request ノードで叩きます。送るのは「ユーザーの質問」と「どのエージェント設定を使うか」だけです。

POST https://api.anthropic.com/...(Managed Agents のエンドポイント)
Headers:
  x-api-key: {{ $secrets.ANTHROPIC_API_KEY }}
  anthropic-version: ...
Body:
  {
    "agent": "<sre-bot-agent-id>",
    "input": "{{ $json.text }}"
  }

ここでのポイントは、質問に対して「どのドキュメントを見るか」を n8n 側に書かないことです。それはエージェントの仕事になります。Agent には system prompt で「SRE の一次対応ボットである」「推測で答えず、確認できた事実に基づく」といった役割を持たせておき、情報源には MCP 経由で繋ぎます。

MCP で情報源に繋ぐ

Managed Agent に MCP サーバーを接続しておくと、エージェントが必要に応じて自分でツールを呼んでくれます。SRE 向けのボットであれば、たとえば次のようなものを繋いでおくと便利でしょう。

  • Linear MCP:過去チケットや対応履歴を検索する
  • GitHub MCP:Terraform や設定ファイルを参照する
  • 社内ドキュメント MCP:手順書や仕様書を検索する

「質問 → 関連チケット検索 → コード確認 → 回答」という流れを、エージェントが自律的に組み立ててくれます。このあたりが、素の API 呼び出しではなく Managed Agent を使う旨味だと感じています。

運用してみて効いた工夫

実際に運用に乗せてみると、ボットの「振る舞い」のチューニングが一番大事になってきました。system prompt に、次のような点を効かせています。

  • メンションの自律判断:SRE 全体への一斉メンションを避け、文脈から返信先を絞る
  • 推測で話さない:客観的な事実・確認済みの情報に基づいてのみ発言する(分からなければ「分からない、ここを見てほしい」と言う)
  • 自分の仕様を知っている:「自分の仕様は◯◯に書いてある」と答えられるよう、仕様ドキュメントを参照させる

これらは Managed Agent の system prompt を変えるだけで効くので、設定を Git 管理して CI/CD で反映する運用にしておくと、振る舞いの変更履歴が残って安全です。

インフラ面の注意

最後に、インフラ面で気をつけている点も補足しておきます。

  • n8n 自体は Cloud Run(ingress: internal)で動かし、外部からの直接アクセスは塞ぐ
  • 外への導線は Cloudflare Tunnel に絞り、WAF で IP やトークンの関門を張る
  • ANTHROPIC_API_KEY や Slack の各トークンは Secret Manager に置き、ワークフローには直書きしない

おわりに

構成自体は「Slack Trigger → Managed Agent」の2点だけで、n8n は糊に徹するというシンプルなものでした。「何を見て答えるか」を n8n で書かず、MCP を繋いでエージェントに自律的に取りに行かせる、というのがこの構成の肝だと思います。

実際に効くのは、推測しない・メンションを絞るといった振る舞いのチューニングのほうで、ここは運用しながら少しずつ育てていく部分でしょう。SRE のトイル削減に AI ボットを使ってみたい方の参考になれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?