[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-opentag-turns-slack-threads-into-actions-zh":3,"article-related-opentag-turns-slack-threads-into-actions-zh":30,"series-tools-351f5aa9-e7da-4676-a7f3-893336f79a92":73},{"id":4,"slug":5,"title":6,"content":7,"summary":8,"source":9,"source_url":10,"author":11,"image_url":12,"cover_image":12,"category":13,"language":14,"translated_content":11,"related_article_id":15,"keywords":16,"key_takeaways":22,"views":26,"created_at":27,"published_at":28,"topic_cluster_id":29},"351f5aa9-e7da-4676-a7f3-893336f79a92","opentag-turns-slack-threads-into-actions-zh","OpenTag 讓 Slack 對話變動作","\u003Cp data-speakable=\"summary\">我拆 OpenTag 的 Slack \u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa> 模板，重點是讀 thread、接工具、做富結果，最後還要人類按批准才執行。\u003C\u002Fp>\u003Cp>我玩 Slack bot 玩到有點煩了。大多數都長一樣：你丟一句，它回一句，最多幫你把 thread 摘要一下，然後就沒了。看起來很像有做事，實際上只是把對話包裝得比較像樣。真正卡人的地方從來不是「會\u003Ca href=\"\u002Fnews\u002Ftokenized-securities-will-not-replace-public-markets-zh\">不會\u003C\u002Fa>回訊息」，而是它能不能讀上下文、去查工具、把結果整理好，最後還知道什麼時候該停下來等人按一下批准。少了這個，bot 不是太膽小，就是太莽。\u003C\u002Fp>\u003Cp>這次我會拆的是 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002FOpenTag\">OpenTag\u003C\u002Fa>。它不是那種可愛的 Slack 小玩具，而是 CopilotKit 做的一個 self-hosted 模板，目標很明確：讓 agent 在 Slack 裡讀 thread、呼叫工具、渲染更豐富的輸出，然後在真正動手前先卡一個 human approval gate。這個 repo 目前有 554 stars、66 forks，數字不算誇張，但夠我確定一件事：大家都在找同一種工作流，只是大多數人還沒把它做對。\u003C\u002Fp>\u003Ch2>別再把 Slack bot 當自動回信機\u003C\u002Fh2>\u003Cblockquote>Run your own AI agent inside Slack: it reads a thread, answers, calls your tools, and renders rich results right in the conversation.\u003C\u002Fblockquote>\u003Cp>白話翻譯就是：這不是一個只會吐字的聊天機器人，而是一個住在 Slack 裡的工作流程引擎。它先看 thread，再決定要不要查資料、叫外部系統、或者把結果直接塞回對話裡。這跟那種「\u002Fsummarize」指令 bot 完全不是同一個層級。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783148607976-8g9n.png\" alt=\"OpenTag 讓 Slack 對話變動作\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我以前也踩過這種坑。內部支援頻道想做一個 bot，讓它幫忙看 incident thread，再順手查 Jira。結果它不是亂編 ticket number，就是乾脆裝死。那時候我才認清楚，問題不是 prompt 不夠長，而是架構根本沒給它做事的能力。你把它\u003Ca href=\"\u002Fnews\u002Fbooz-allen-openai-secure-ai-deployable-zh\">做成\u003C\u002Fa>只能回答的東西，它就永遠只會回答。\u003C\u002Fp>\u003Cp>OpenTag 的重點是 agent loop，不是 chatbot。Slack 訊息只是入口，真正的工作在 runtime 裡。這件事很重要，因為它讓 bot 有機會對流程有意見，而不是只對語言有意見。換句話說，它可以先判斷，再行動，而不是每次都把責任丟回人類。\u003C\u002Fp>\u003Cp>實操寫法很簡單：先把你的 Slack bot 拆成三件事，摘要、查詢、動作。很多團隊只做到摘要就停了，然後就說「bot 很方便」。不，它只是省掉你複製貼上而已。你要的是能推進工作的 agent，不是更會講話的回覆機器。\u003C\u002Fp>\u003Ch2>self-hosted 不是附加價值，是這套玩法的核心\u003C\u002Fh2>\u003Cblockquote>Think of it as having Claude in your workspace, except open-source and self-hosted: you own the runtime, bring your own model, and wire it to your own tools.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：你不是在租一個黑盒服務，你是在把 runtime 掌握在自己手上。模型你自己選，工具你自己接，資料流向也自己管。對很多團隊來說，這才是\u003Ca href=\"\u002Fnews\u002Fequity-tokenization-platform-development-services-zh\">能不能上\u003C\u002Fa>線的分水嶺。因為一旦 Slack 裡面開始碰敏感 thread，資安、合規、權限這些麻煩事就會自己冒出來。\u003C\u002Fp>\u003Cp>我很討厭那種把 self-hosting 講得很輕鬆的文章。好像只要貼一個 \u003Ca href=\"\u002Ftag\u002Fdocker\">docker\u003C\u002Fa>-compose 就萬事大吉。實際上，agent 的麻煩從來不是模型本身，而是周邊：連線、重試、持久化、權限、觀測、秘密管理。OpenTag 至少沒有裝傻，它很直接地告訴你：要控制權就自己跑，要省 ops 就等別的產品形態。\u003C\u002Fp>\u003Cp>這種誠實我反而買單。因為我見過太多 starter kit 把部署複雜度藏起來，等你真的接進公司流程，才發現 bot、runtime、storage 全黏在一起，改一個地方就像拆炸彈。self-hosted 的價值不是便宜，是你能決定邊界在哪裡。\u003C\u002Fp>\u003Cul>\u003Cli>如果你們有 compliance 顧慮，self-hosted 是必要條件，不是加分項。\u003C\u002Fli>\u003Cli>如果你們只想先驗證流程，這個 repo 也可以當 reference implementation。\u003C\u002Fli>\u003Cli>如果你們之後想換部署方式，先把架構拆開，之後才有退路。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>實操寫法：先問自己，這個 bot 是產品還是模板。是產品，就從第一天把 hosting、secret、persistence 一起算進去。是模板，就先複製架構，別急著把所有東西都做成正式服務。\u003C\u002Fp>\u003Ch2>真正值錢的是薄薄一層組裝，不是大而全框架\u003C\u002Fh2>\u003Cblockquote>OpenTag is a thin layer on top of a handful of CopilotKit packages.\u003C\u002Fblockquote>\u003Cp>也就是說，這 repo 不是把你鎖進一個大框架裡。它比較像把幾個小零件拼起來：bot engine、agent runtime、rich UI、平台 adapter。這種做法我比較舒服，因為你知道每一層在幹嘛，也比較不會被抽象層搞到頭痛。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783148601086-g28d.png\" alt=\"OpenTag 讓 Slack 對話變動作\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>它把需要的套件講得很明白，像 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002Fcopilotkit\">@copilotkit\u002Fbot\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002Fcopilotkit\">@copilotkit\u002Fruntime\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002Fcopilotkit\">@copilotkit\u002Fbot-ui\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002Fcopilotkit\">@copilotkit\u002Fbot-slack\u003C\u002Fa>。另外還有 Discord、Telegram、WhatsApp 這類 adapter，還有 Redis persistence 這種你真的需要時才會碰的東西。這種「先把邊界講清楚」的文件，我看了就比較不想翻白眼。\u003C\u002Fp>\u003Cp>我以前被那種「超簡單 starter」整過。文件寫得像一鍵啟動，結果你一進去才發現 bot 層、UI 層、model 層全部焊死。你想換一個工具？先把整個專案摸懂再說。OpenTag 至少把 seam 留給你看，這很難得。\u003C\u002Fp>\u003Cp>實操寫法：你自己做 agent starter 時，先不要寫 code，先畫四格。第一格是 transport，第二格是 runtime，第三格是 UI，第四格是 storage。任何功能如果塞不進這四格之一，那它多半應該是獨立模組，不該硬塞進核心。\u003C\u002Fp>\u003Ch2>Slack app 設定很煩，所以要把它做得無聊\u003C\u002Fh2>\u003Cblockquote>Create a Slack app. At api.slack.com\u002Fapps → From a manifest → paste slack-app-manifest.yaml.\u003C\u002Fblockquote>\u003Cp>白話翻譯就是：別再手工點 Slack 後台點到懷疑人生了，直接用 manifest。這招很土，但真的省時間。尤其當你只是想先把 bot 跑起來，不想先被 UI 卡死，manifest-driven setup 就是正解。\u003C\u002Fp>\u003Cp>OpenTag 的 quickstart 也很務實：先建 Slack app、安裝、拿 Bot User OAuth \u003Ca href=\"\u002Ftag\u002Ftoken\">Token\u003C\u002Fa> 和 App-Level Token，把幾個 secret 塞進 \u003Ccode>.env\u003C\u002Fcode>，然後把 agent 和 bot 分成兩個 process 跑。我喜歡這種切法，因為它把 mental model 變乾淨了。bot 負責連 Slack，agent 負責推理和工具呼叫，兩邊分開，出問題才知道該怪誰。\u003C\u002Fp>\u003Cp>我自己做過一個內部 workspace 的支援 assistant，最痛的不是模型，而是 debug。只要 bot 和 runtime 混在同一個 process，任何錯誤都像鬼打牆。分開之後就好多了：Slack 壞了是 Slack 壞，模型壞了是模型壞，工具壞了是工具壞。工程上這種可切分性，比看起來聰明重要太多。\u003C\u002Fp>\u003Cul>\u003Cli>用 manifest 建 app，少掉一堆手動設定。\u003C\u002Fli>\u003Cli>Token 跟 model key 全部走環境變數，不要寫死。\u003C\u002Fli>\u003Cli>bot 和 runtime 分開跑，debug 會少很多怨氣。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>實操寫法：就算你不用 OpenTag，也照這個 operational shape 做。manifest、secrets、separate runtime、separate connector。這套不花俏，但不容易炸。\u003C\u002Fp>\u003Ch2>要能動手，但先讓人類按鈕\u003C\u002Fh2>\u003Cblockquote>It renders a breakdown, a table, and a bar chart inline and files a ticket only after an Approve gate.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：bot 可以做事，但不能自己當老大。它先把分析結果攤開，必要時還能把表格、圖表直接塞在 Slack 裡，然後在真的要建立 ticket 之前，先等人按批准。這個順序我很在意，因為它把「有用」跟「亂搞」切開了。\u003C\u002Fp>\u003Cp>很多 agent demo 都很愛秀自動化，結果一上線就出事。某個 noisy incident thread，bot 一口氣幫你開五張 ticket，然後大家開始花時間清理 bot 的錯，而不是處理原本的問題。這種事我看過太多次，所以我現在只相信一件事：凡是會產生 side effect 的動作，都要先過人類。\u003C\u002Fp>\u003Cp>OpenTag 的好處是它把 approval gate 做成流程的一部分，不是事後補丁。使用者在 Slack 裡就能看到 bot 找到什麼、打算做什麼、會改什麼，然後再決定要不要放行。這比把人導去另一個系統按確認強很多，因為 context 沒有被切斷。\u003C\u002Fp>\u003Cp>實操寫法：你只要記住一條線。會改狀態、會發訊息、會建立工單、會通知別人的動作，都先擋一下。只讀查詢可以自動做，真正會留下痕跡的動作，先讓人看過再說。這不是保守，這是避免 bot 把你搞成救火隊。\u003C\u002Fp>\u003Ch2>一個 prompt 檔，比五層抽象更有用\u003C\u002Fh2>\u003Cblockquote>The agent's behavior is steered by a single system prompt in runtime.ts — rewrite it and you have a different agent.\u003C\u002Fblockquote>\u003Cp>也就是說，這套東西不是把行為藏在一堆 policy 和 callback 裡，而是盡量集中在一個地方。你改 prompt，agent 的個性、範圍、邊界就跟著變。這種設計我很愛，因為它讓實驗成本低很多。\u003C\u002Fp>\u003Cp>repo 也很直接地說，你可以直接複製 \u003Ccode>app\u002F\u003C\u002Fcode> 當起點，而 \u003Ccode>runtime.ts\u003C\u002Fcode> 就是 agent backend，透過 AG-UI 對外服務。這個切法讓你可以先專注在一個 Slack bot 上，把工具、approval、prompt 都跑順，再慢慢加別的平台。這比一開始就想做全通路 agent 實際多了。\u003C\u002Fp>\u003Cp>我最怕那種行為散在十幾個檔案的專案。寫的人以為自己很有架構，改的人只會想離職。OpenTag 這種「行為集中、邊界清楚」的做法，才真的有人會去迭代。因為你知道要改哪裡，也知道改了會影響什麼。\u003C\u002Fp>\u003Cp>實操寫法：第一版先把 agent 做得很醜也沒關係，但一定要可改。只有一個 system prompt、只有一個 runtime entrypoint、只有一層 adapter。你如果連「行為在哪裡」都講不清楚，後面只會越做越亂。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode># OpenTag 風格的 Slack agent 模板（可直接改成你的專案骨架）\n\n## 目標\n- 讀 Slack thread\n- 摘要上下文\n- 需要時呼叫工具\n- 在 Slack 內回傳富格式結果\n- 任何 side effect 先走 human approval\n\n## 專案結構\napp\u002F\n  bot\u002F                # Slack adapter、message routing\n  runtime\u002F            # LLM runtime、tools、system prompt\n  ui\u002F                 # 富訊息元件、表格、圖表\n  tools\u002F              # Jira、Linear、Notion、DB 查詢等整合\n  config\u002F             # env 讀取與驗證\n\nscripts\u002F\n  start-bot.sh\n  start-runtime.sh\n\n.env.example\nREADME.md\n\n## 環境變數\nSLACK_BOT_TOKEN=xoxb-your-bot-token\nSLACK_APP_TOKEN=xapp-your-app-token\nOPENAI_API_KEY=your-model-key\n# 或 ANTHROPIC_API_KEY=your-model-key\nREDIS_URL=redis:\u002F\u002Flocalhost:6379\n\n## System prompt\n你是一個 Slack workspace agent。\n\n目標：\n1. 仔細讀 thread。\n2. 摘要相關上下文。\n3. 只有在有價值時才呼叫工具。\n4. 在 Slack 內用結構化方式回報結果。\n5. 任何 side effect 都要先得到明確的人類批准。\n\n規則：\n- thread 不清楚時先問澄清問題。\n- 回答要短、可執行。\n- 提議動作時，先講清楚為什麼需要它。\n- 工具失敗時要直接回報，不要硬掰。\n- 在批准前，不要建立 ticket、不要送訊息、不要改資料。\n\n## Approval gate\n在任何 side effect 前，先渲染：\n- 你找到什麼\n- 你打算做什麼\n- 會改變什麼\n- 明確的 Approve \u002F Reject 按鈕\n\n## 工具範例\n{\n  \"name\": \"create_ticket\",\n  \"description\": \"建立 issue tracker ticket\",\n  \"input_schema\": {\n    \"type\": \"object\",\n    \"properties\": {\n      \"title\": { \"type\": \"string\" },\n      \"description\": { \"type\": \"string\" },\n      \"priority\": { \"type\": \"string\" }\n    },\n    \"required\": [\"title\", \"description\"]\n  }\n}\n\n## Runtime entrypoint\nexport async function main() {\n  const bot = createBot({\n    adapters: [createSlackAdapter({ token: process.env.SLACK_BOT_TOKEN })],\n    runtime: createRuntime({\n      model: process.env.OPENAI_API_KEY ? \"openai\" : \"anthropic\",\n      systemPrompt: SYSTEM_PROMPT,\n      tools: [createTicketTool(), createLookupTool()],\n      approvalRequiredFor: [\"create_ticket\", \"send_message\", \"update_record\"],\n    }),\n    persistence: process.env.REDIS_URL ? createRedisStore(process.env.REDIS_URL) : createMemoryStore(),\n  });\n\n  await bot.start();\n}\n\n## 我會怎麼用\n1. 先把這段貼進新 repo。\n2. 先接一個 Slack adapter。\n3. 先做一個 read-only tool。\n4. 再做一個需要 approval 的 side-effect tool。\n5. prompt 保持可編輯。\n6. Slack 跑通後，再考慮加其他平台。\n\n## 開工檢查清單\n- [ ] 用 manifest 建 Slack app\n- [ ] bot 和 runtime 分開 process\n- [ ] 一個可改的 system prompt\n- [ ] side effect 前先做人類批准\n- [ ] Redis persistence 視需要再加\n- [ ] 工具邊界清楚\n- [ ] 富格式輸出可讀\n\n## 最小啟動命令\npnpm install\npnpm --filter slack-example runtime\npnpm --filter slack-example dev\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這份模板我會直接拿去改，原因很單純：它把最難的幾件事都攤在檯面上了。你要換模型、要加 Discord、要改 approval policy，都不需要把整個系統拆掉重來。這才是能在團隊裡活下來的 starter。\u003C\u002Fp>\u003Cp>OpenTag 是 CopilotKit 的原始作品，我上面這篇是照 repo 結構跟 setup 文件拆出來的讀法，不是官方文案。原始來源在 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002FOpenTag\">https:\u002F\u002Fgithub.com\u002FCopilotKit\u002FOpenTag\u003C\u002Fa>，setup 細節可看 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002FOpenTag\u002Fblob\u002Fmain\u002Fsetup.md\">setup.md\u003C\u002Fa>。如果你想看它背後用到的組件，也可以對照 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCopilotKit\u002Fcopilotkit\">CopilotKit\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fapi.slack.com\u002Fapps\">Slack app 文件\u003C\u002Fa>，以及 \u003Ca href=\"https:\u002F\u002Fplatform.openai.com\u002Fdocs\">OpenAI docs\u003C\u002Fa> 或 \u003Ca href=\"https:\u002F\u002Fdocs.anthropic.com\u002F\">Anthropic docs\u003C\u002Fa>。\u003C\u002Fp>","我拆 OpenTag 的 Slack agent 模板，重點是讀 thread、接工具、做富結果，最後還要人類按批准才執行。","github.com","https:\u002F\u002Fgithub.com\u002FCopilotKit\u002FOpenTag",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783148607976-8g9n.png","tools","zh","6f72b385-bc6c-47cf-b466-8eb40fed86a7",[17,18,19,20,21],"Slack agent","self-hosted","human approval","CopilotKit","agent workflow",[23,24,25],"Slack bot 真正有用的地方不是回覆，而是讀 thread、接工具、再等批准才動作。","self-hosted 的價值在控制權與邊界清楚，不是單純省錢。","最值得抄的是架構切分：bot、runtime、UI、storage 分開，approval gate 前置。",0,"2026-07-04T07:02:50.017949+00:00","2026-07-04T07:02:49.981+00:00","ddbe17bf-4560-43f7-af76-3e7d6e08e601",{"tags":31,"relatedLang":32,"relatedPosts":36},[],{"id":15,"slug":33,"title":34,"language":35},"opentag-turns-slack-threads-into-actions-en","OpenTag turns Slack threads into actions","en",[37,43,49,55,61,67],{"id":38,"slug":39,"title":40,"cover_image":41,"image_url":41,"created_at":42,"category":13},"38959780-e00f-4a9f-afd1-a75f24732cd1","rustrover-2026-1-4-right-default-ide-rust-zh","RustRover 2026.1.4 是 Rust 團隊的正確預設 IDE","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783211564090-s3ei.png","2026-07-05T00:32:19.50775+00:00",{"id":44,"slug":45,"title":46,"cover_image":47,"image_url":47,"created_at":48,"category":13},"abe21472-cda7-491d-9d7b-f9f64e3154b3","claude-design-synced-prototypes-setup-zh","Claude Design 同步原型設定指南","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783191770382-4zms.png","2026-07-04T19:02:21.637665+00:00",{"id":50,"slug":51,"title":52,"cover_image":53,"image_url":53,"created_at":54,"category":13},"29e9abee-1972-4b0f-8994-ce27c006a5f3","rust-196-turns-ranges-into-safer-copies-zh","Rust 1.96 讓 range 變可複製","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783189995404-zbpf.png","2026-07-04T18:32:53.059717+00:00",{"id":56,"slug":57,"title":58,"cover_image":59,"image_url":59,"created_at":60,"category":13},"081e378e-a0d9-408b-95ab-003b476c67a5","ai-data-operations-vs-mlops-what-each-owns-zh","AI Data Ops 與 MLOps 的分工","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783168367881-i1cl.png","2026-07-04T12:32:19.522726+00:00",{"id":62,"slug":63,"title":64,"cover_image":65,"image_url":65,"created_at":66,"category":13},"5358fb05-efb5-4238-abc5-fb3933da13e7","gpu-vram-needed-llm-fine-tuning-2026-zh","2026 年 LLM 微調要多少 VRAM","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783128777725-3n1p.png","2026-07-04T01:32:33.595421+00:00",{"id":68,"slug":69,"title":70,"cover_image":71,"image_url":71,"created_at":72,"category":13},"9568ce15-1e27-450b-8c62-c6c97a94372d","claude-sonnet-5-shangshou-bushu-yu-pinggu-zh","Claude Sonnet 5 上手部署与评估","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1783125163927-v143.png","2026-07-04T00:32:19.271862+00:00",[74,79,84,89,94,99,104,109,114,119],{"id":75,"slug":76,"title":77,"created_at":78},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":80,"slug":81,"title":82,"created_at":83},"9b19ab54-edef-4dbd-9ce4-a51e4bae4ebb","mcp-in-2026-the-ai-tool-layer-teams-use-zh","2026 年 MCP：團隊真的在用的 AI 工具層","2026-03-26T08:01:46.589694+00:00",{"id":85,"slug":86,"title":87,"created_at":88},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":90,"slug":91,"title":92,"created_at":93},"05553086-6ed0-4758-81fd-6cab24b575e0","garry-tan-open-sources-claude-code-toolkit-zh","Garry Tan 開源 Claude Code 工具包","2026-03-26T08:26:20.068737+00:00",{"id":95,"slug":96,"title":97,"created_at":98},"042a73a2-18a2-433d-9e8f-9802b9559aac","github-ai-projects-to-watch-in-2026-zh","2026 必看 20 個 GitHub AI 專案","2026-03-26T08:28:09.619964+00:00",{"id":100,"slug":101,"title":102,"created_at":103},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":105,"slug":106,"title":107,"created_at":108},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"bfdb467a-290f-4a80-b3a9-6f081afb6dff","aiml-2026-student-ai-ml-lab-repo-review-zh","AIML-2026：像課綱的學生實驗 Repo","2026-03-27T01:21:51.467798+00:00",{"id":115,"slug":116,"title":117,"created_at":118},"80cabc3e-09fc-4ff5-8f07-b8d68f5ae545","ai-trending-github-repos-and-research-feeds-zh","AI Trending：把 AI 資源收成一張表","2026-03-27T01:31:35.262183+00:00",{"id":120,"slug":121,"title":122,"created_at":123},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]