據(jù)機器人:@mention 出報告并在同會話多輪追問)
如何在 Slack 中接入 Claude Managed Agents 數(shù)據(jù)機器人mention 出報告并在同會話多輪追問【免費下載鏈接】claude-cookbooksA collection of notebooks/recipes showcasing some fun and effective ways of using Claude.項目地址: https://gitcode.com/GitHub_Trending/an/claude-cookbooks本文基于 claude-cookbooks 倉庫中的 slack_data_bot.ipynb演示如何把一個 Claude Managed Agents 數(shù)據(jù)分析 agent 包裝成 Slack 機器人在頻道里mention它并附上一個 CSV它會在線程里回一份敘述式報告之后在同一線程直接回復(fù)不需要再次 mention即可繼續(xù)追問追問會落在同一個 CMA 會話上容器的文件系統(tǒng)與會話歷史跨輪次保留。適用的前提一個可以安裝應(yīng)用的 Slack workspace、一個 Anthropic API key設(shè)為ANTHROPIC_API_KEY、Python 3.11 的 Jupyter 環(huán)境。整個鏈路使用 Slack Socket Mode事件通過 WebSocket 下發(fā)本地開發(fā)不需要公網(wǎng) URL。準(zhǔn)備依賴與 Slack 應(yīng)用先運行 notebook 里的安裝單元格它會裝齊機器人側(cè)需要的包%%capture %pip install -q anthropic0.91.0 python-dotenv slack_bolt requests markdown-to-mrkdwn然后創(chuàng)建 Slack 應(yīng)用倉庫已給出可直接使用的 manifest slack_app_manifest.yaml。在 Slack 的 API 控制臺選擇Create New App → From a manifest粘貼該文件內(nèi)容并安裝到你的 workspace。這份 manifest 已替你配置好bot 顯示名為databotbot scopesapp_mentions:read、chat:write、files:read、files:write、channels:history事件訂閱app_mention與message.channelssocket_mode_enabled: true即事件走 WebSocket無需公網(wǎng)回調(diào)地址。安裝完成后取兩個 token用途不同不要拿錯Token獲取位置用途Bot User OAuth Tokenxoxb-...OAuth Permissions機器人發(fā)消息、上傳文件對應(yīng)SLACK_BOT_TOKENApp-Level Tokenxapp-...Basic Information → App-Level Tokens生成時勾選connections:writeSocket Mode 連接 Slack對應(yīng)SLACK_APP_TOKEN最后在你想讓機器人工作的頻道里執(zhí)行/invite databot否則后續(xù)chat.postMessage會返回not_in_channel。先運行 data_analyst_agent.ipynb 拿到三個 ID機器人不自己創(chuàng)建 agent它復(fù)用 data_analyst_agent.ipynb 里創(chuàng)建好的 agent 和 environment避免每次重啟機器人重新 provision。先跑通這個 notebook它會創(chuàng)建 environment預(yù)裝pandas、plotlynetworking 為unrestricted文檔提示生產(chǎn)環(huán)境應(yīng)改用 host allowlist創(chuàng)建名為cookbook-data-analyst的 agent模型claude-sonnet-4-6掛載agent_toolset_20260401工具集其中web_search和web_fetch被顯式禁用上傳示例數(shù)據(jù)sales_data.csv50 行跑一次完整的分析會話并取回report.html歸檔該會話并把ANALYST_ENV_ID、ANALYST_AGENT_ID、ANALYST_AGENT_VERSION寫入.env。第 4 步是銜接點slack_data_bot.ipynb 的 setup 單元格啟動時會檢查這三個變量缺失則直接拋錯不會靜默繼續(xù)for key in (ANALYST_ENV_ID, ANALYST_AGENT_ID, ANALYST_AGENT_VERSION): if not os.environ.get(key): raise RuntimeError(f{key} not set. Run data_analyst_agent.ipynb first.)注意.env已在.gitignore中不要把 API key 和 Slack token 提交進(jìn)版本庫。運行 Slack 機器人打開 slack_data_bot.ipynb按順序運行。setup 單元格會在首次運行時交互式提示輸入SLACK_BOT_TOKEN和SLACK_APP_TOKENxoxb-...和xapp-...并用set_key寫進(jìn).env重啟后不用重輸也可以提前手動寫入.env跳過提示。bot 的核心行為由三段代碼構(gòu)成完整代碼在 notebook 內(nèi)這里說明各段職責(zé)和關(guān)鍵設(shè)計1. 收到 mention 時立即 ack慢活丟到后臺線程。Slack 會對 3 秒內(nèi)未確認(rèn)的事件重試所以on_mention先調(diào)用ack()并回復(fù) On it. Analyzing now.然后在后臺線程里執(zhí)行真正的分析若 mention 附帶文件用 bot token 從 Slack 下載后重新上傳到 Anthropic Files API掛載到/mnt/session/uploads/data.csv并在問題末尾追加掛載路徑隨后client.beta.sessions.create創(chuàng)建會話metadata 里寫入slack_channel和slack_thread_ts再發(fā)user.message事件觸發(fā) agent。2.relay_stream把會話事件流轉(zhuǎn)發(fā)回線程。它循環(huán)讀取client.beta.sessions.events.stream(session_id)遇到agent.message保留最新文本作為最終摘要遇到agent.tool_use發(fā)一條 Running analysis... 進(jìn)展消息遇到session.status_idle結(jié)束本輪遇到session.status_terminated則在線程里貼出該會話的 Console 追溯鏈接。本輪結(jié)束后把摘要超過 3900 字符會截斷并標(biāo)注_(truncated)_Slack 文本上限約 4000 字符轉(zhuǎn)成 mrkdwn 發(fā)回線程再用files.list(scope_idsession_id, betas[managed-agents-2026-04-01])列出會話產(chǎn)出只上傳downloadable True的文件即 agent 生成的報告等不含用戶自己的輸入文件。3. 線程回復(fù)自動續(xù)接同一會話。這是“多輪追問”的關(guān)鍵app.event(message) def on_thread_reply(event, ack): ack() thread_ts event.get(thread_ts) if event.get(subtype): return if not thread_ts or event.get(bot_id) or thread_ts not in thread_sessions: return threading.Thread( targetcontinue_session, args(thread_sessions[thread_ts], event[channel], thread_ts, event[text]), ).start()它只處理已建過會話的線程里的人類消息跳過編輯/刪除等 subtype、跳過 bot 消息把回復(fù)作為新的user.message事件發(fā)給同一個 session。代碼里用內(nèi)存字典thread_sessionsthread_ts - session_id維護(hù)這條映射文檔明確提示生產(chǎn)環(huán)境應(yīng)把它持久化到數(shù)據(jù)庫并在線程過期時歸檔會話。最后運行 notebook 末尾的單元格啟動監(jiān)聽SocketModeHandler(app, os.environ[SLACK_APP_TOKEN]).start()該單元格會阻塞直到機器人停止用 Jupyter 的 ■ 中斷按鈕結(jié)束。驗證mention 出報告線程內(nèi)繼續(xù)追問確認(rèn) notebook 的 setup 單元格沒有拋RuntimeError三個ANALYST_*變量都已就位且SocketModeHandler單元格正在運行。在已邀請databot的頻道里databot加一句問題并附上 CSV例如倉庫自帶的sales_data.csv。預(yù)期線程內(nèi)依次出現(xiàn)On it. Analyzing now. → Running analysis... → 最終摘要文本以及 agent 寫出的report.html附件。文章開頭的截圖就是倉庫記錄的一次運行結(jié)果作為示例參考。不 mention直接在該線程里回復(fù)一句追問例如要求對某列再細(xì)分。機器人應(yīng)在同一會話上繼續(xù)且能引用上一輪分析過的數(shù)據(jù)——因為容器文件系統(tǒng)和會話歷史跨輪次保留。想核對完整執(zhí)行過程時每個 mention 創(chuàng)建的會話都能在 Anthropic Console 的Sessions頁面看到完整事件軌跡。限制與后續(xù)步驟thread_sessions是進(jìn)程內(nèi)字典機器人重啟后舊線程的追問映射丟失文檔建議持久化到數(shù)據(jù)庫會話空閑后記得歸檔以釋放容器。摘要文本超 3900 字符會被截斷長內(nèi)容依賴report.html附件本身。若要改變分析風(fēng)格修改 data_analyst_agent.ipynb 的系統(tǒng)提示并重跑該 notebook 即可——它會創(chuàng)建新 agent 并把新 ID 寫回.env機器人下次讀取時自動切換。要脫離 notebook 部署時把代碼拷成.py文件即可機器人需要能長期持有 WebSocket 連接的任何運行環(huán)境。另外倉庫里還有一個 TypeScript 實現(xiàn)的同類橋接 managed_agents/slack/mention→sessions.create→ idle webhook 回貼架構(gòu)是每條 mention 開新會話、無跨輪記憶與本文 notebook 的“同會話多輪追問”路徑不同如果你需要多輪上下文按本文的 notebook 路徑走?!久赓M下載鏈接】claude-cookbooksA collection of notebooks/recipes showcasing some fun and effective ways of using Claude.項目地址: https://gitcode.com/GitHub_Trending/an/claude-cookbooks創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考