[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"article-deepseek-plugin-harness-turns-agents-into-tools-zh":3,"article-related-deepseek-plugin-harness-turns-agents-into-tools-zh":29,"series-tools-bd7ad8c7-a256-44c8-aac1-dcf9c2f83ea5":78},{"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":11},"bd7ad8c7-a256-44c8-aac1-dcf9c2f83ea5","deepseek-plugin-harness-turns-agents-into-tools-zh","DeepSeek 插件式框架把代理變工具","\u003Cp data-speakable=\"summary\">以前是模型順手做一切，現在是先拆成工具再讓代理動手。\u003C\u002Fp>\u003Cp>我自己做 \u003Ca href=\"\u002Ftag\u002Fagent\">agent\u003C\u002Fa> workflow 做到後來，最煩的不是模型答錯，是它太順了。工具一接、流程一串、demo 看起來超像那麼回事，結果要上線時才發現整套東西像一坨看不見邊界的膠水：誰能呼叫什麼、哪段程式在改狀態、出了事要怎麼追，通通糊在一起。這種東西在簡報裡很漂亮，進 production 就開始冒煙。\u003C\u002Fp>\u003Cp>我這次去看的是 \u003Ca href=\"https:\u002F\u002Fthenewstack.io\u002Fdeepseek-harness-open-source-plugins\u002F\">The New Stack 對 DeepSeek 開源 agent harness 的整理\u003C\u002Fa>。它提到 DeepSeek 把很多能力做成 plugin，還把 \u003Ca href=\"https:\u002F\u002Fwebassembly.org\u002F\">WebAssembly\u003C\u002Fa> 拉進來當可能的隔離層。老實講，我不會把這種安全敘事當神諭，但這個架構方向很值得拆，因為它逼你把邊界畫出來，而這正是很多 agent 系統最欠的東西。\u003C\u002Fp>\u003Ch2>把行為藏在模型裡，最省事也最危險\u003C\u002Fh2>\u003Cblockquote>DeepSeek open sources an agent harness where everything is a plugin.\u003C\u002Fblockquote>\u003Cp>翻譯一下就是：它想把 agent 從「一個大模型加一堆隱性 helper」改成「一個殼，裡面掛很多名字清楚的能力」。這聽起來很無聊，但我碰過太多 agent 專案，一開始都說先讓模型自己做，後來才開始追問：誰准它碰網路？誰准它寫檔？誰准它改 production config？\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786779194304-y3mi.png\" alt=\"DeepSeek 插件式框架把代理變工具\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>我最不喜歡的就是這種做法：先把權限全開，等出事再補 guardrail。那不是工程，那是把問題往後拖。DeepSeek 這種 plugin-first 的思路厲害的地方，不在於它多炫，而在於它強迫你命名每一個能力。只要是 plugin，我就能看、能測、能版本控管，也能決定要不要讓它進 runtime。\u003C\u002Fp>\u003Cp>我之前幫一個團隊看過一個很典型的 agent：模型可以讀文件、查 \u003Ca href=\"\u002Ftag\u002Fapi\">API\u003C\u002Fa>、改資料、發通知，全部透過一個大 wrapper 混在一起。結果 bug 來了，大家只會說「agent 怪怪的」。怪個頭，根本是你把責任切成一團漿糊。\u003C\u002Fp>\u003Cp>實操寫法很簡單：把 agent 能力拆成獨立模組，每個模組都有明確介面。不要讓模型直接碰整個系統。每個能力都要能單獨審、單獨測、單獨關掉。先這樣做，你才有資格談 agent。\u003C\u002Fp>\u003Cul>\u003Cli>一個 plugin 對一個外部系統，不要一包全包。\u003C\u002Fli>\u003Cli>一個 permission boundary 對一個 plugin，不要共用權杖。\u003C\u002Fli>\u003Cli>一個 action 對一個測試面，失敗才看得出來。\u003C\u002Fli>\u003C\u002Ful>\u003Ch2>WebAssembly 有趣，因為它很會限制人\u003C\u002Fh2>\u003Cp>The New Stack 那篇文章把 WebAssembly 當成可能補洞的方向，我覺得這點有意思，不是因為 WASM 很潮，而是因為它天生就很會把東西關起來。它不是拿來讓你亂跑的，它是拿來讓你跑得沒那麼自由。對 plugin 執行來說，這種「不自由」剛剛好。\u003C\u002Fp>\u003Cp>也就是說，如果 plugin 跑歪了，爆炸半徑可以小很多；如果某個 plugin 只需要一點點能力，你就只給那一點點能力。這比把一個一般用途 runtime 丟給 agent，然後祈禱 prompt 會自律，實在太多了。\u003C\u002Fp>\u003Cp>我看過很多團隊先把 agent 做出來，然後才開始補安全，最後補成一堆 deny list。問題是 deny list 很容易在\u003Ca href=\"\u002Fnews\u002Fanthropic-watermark-copy-paste-dev-workflow-zh\">真實\u003C\u002Fa>需求前面碎掉。WASM 不會自動幫你設計 policy，但它至少讓執行層不那麼鬆散。這件事已經贏一半。\u003C\u002Fp>\u003Cp>如果你要摸這條路，我會先看 \u003Ca href=\"https:\u002F\u002Fwebassembly.org\u002F\">WebAssembly.org\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FWebAssembly\u002Fwasi-sdk\">WASI SDK\u003C\u002Fa>，還有 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasmtime\">Wasmtime\u003C\u002Fa>。這些東西不是拿來裝懂的，是拿來真的把隔離跑起來的。\u003C\u002Fp>\u003Cp>實操寫法：如果你的 agent 會跑第三方或半信任邏輯，就把 plugin execution layer 做成可替換的 sandbox。今天不用 WASM 也沒關係，但架構先照「之後可以換 runtime」去設計，輸入、輸出、權限都要明確。\u003C\u002Fp>\u003Ch2>Plugin 只有在可檢查時才有價值\u003C\u002Fh2>\u003Cp>我對 plugin 架構一直有一個很現實的標準：它是不是模組化，不是看名字，是看我能不能快速回答三件事：它能做什麼、誰做的、誰准的。答不出來，那就不是插件，那只是把風險切小塊而已。\u003C\u002Fp>\n\u003Cfigure class=\"my-6\">\u003Cimg src=\"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786779193424-5sqx.png\" alt=\"DeepSeek 插件式框架把代理變工具\" class=\"rounded-xl w-full\" loading=\"lazy\" \u002F>\u003C\u002Ffigure>\n\u003Cp>這也是我覺得 DeepSeek 這種 harness 值得看的地方。它如果真的把 plugin 當第一等公民，就必須有 registry、版本、來源、簽章、權限這些東西，不然只是把一坨大 blob 拆成十坨小 blob，麻煩一樣沒少。\u003C\u002Fp>\u003Cp>我之前看過一個內部工具接 agent 的案例，前端 demo 很順，後端卻沒人知道現在跑的是哪版 plugin。文件寫 A，實際跑 B，出事時還不能 rollback，因為根本沒人把 plugin 當 production dependency 管。這種運維債，通常都是 demo 掌聲結束後才開始收利息。\u003C\u002Fp>\u003Cul>\u003Cli>每個 plugin 都要有 manifest：版本、擁有者、作用範圍。\u003C\u002Fli>\u003Cli>契約要小，能用 fixture 測就不要靠人眼猜。\u003C\u002Fli>\u003Cli>每次 action 都要記錄 agent、plugin、input、result。\u003C\u002Fli>\u003C\u002Ful>\u003Cp>實操寫法：把 plugin 當正式依賴管。能簽章就簽章，能 pin version 就 pin version，能 review diff 就 review diff。若 harness 能從任何地方自動抓 \u003Ca href=\"\u002Fnews\u002Fclaude-code-sessions-message-each-other-zh\">code\u003C\u002Fa>，你不是在做 plugin system，你是在等 supply chain 事故上門。\u003C\u002Fp>\u003Ch2>把 planning 跟 execution 分開，agent 才不會亂摸世界\u003C\u002Fh2>\u003Cp>我 debug 過最多的 agent 問題，其實都卡在同一個爛點：同一個元件又負責想、又負責做。這對 prototype 很方便，對有使用者、有預算、有資安審查的系統來說，超級不妙。DeepSeek 這種 plugin harness 的價值之一，就是它把這件事往比較正常的方向推。\u003C\u002Fp>\u003Cp>翻譯一下就是：讓模型先提案，讓 plugin 去執行，而且執行前要有明確驗證。這樣你就能把 intent 跟 effect 分開看。模型想得很怪，你可以在動作前擋掉；plugin 真出包，你也知道是哪個 boundary 壞了，而不是整天喊「agent 自己亂搞」。\u003C\u002Fp>\u003Cp>我很喜歡這個拆法，因為它讓人可以介入，但不必把整個流程手動化。planner 可以彈性，executor 必須嚴格。這兩個東西混在一起時，每次修正都像在補一個會移動的靶。\u003C\u002Fp>\u003Cp>實操寫法：把 agent loop 拆成三段，plan、validate、execute。policy check 放在 plan 和 execute 中間。只要 plugin 會寫檔、打 API、觸發 workflow，就一定要經過模型外部的 permission gate。\u003C\u002Fp>\u003Cp>你還可以順手把觀測拆開：被拒絕的 plan、plugin failure、unsafe request 分別記。數字一分開，你就不會再用「agent quality」這種空話吵半天，而是能直接修掉最爛的那一段。\u003C\u002Fp>\u003Ch2>開源真正有用，是因為邊界看得見\u003C\u002Fh2>\u003Cp>DeepSeek 把 harness 開源這件事，我覺得比很多人想的更重要。封閉平台可以很順，但你常常只能接受它的預設；開源至少讓你看到它怎麼切邊界。對 agent 系統來說，邊界就是核心，不是裝飾。\u003C\u002Fp>\u003Cp>也就是說，不同團隊可以照自己的 trust model 去改，而不是被 vendor 的預設綁住。新創做內部 workflow，跟要碰客戶資料的公司，根本不是同一種問題，但大家都愛在 kickoff 會議上講「\u003Ca href=\"\u002Ftag\u002Fai-agent\">AI agent\u003C\u002Fa>」講得像同一件事。\u003C\u002Fp>\u003Cp>我一直對那種「我們很彈性」但其實只能接受預設值的平台很敏感。開源至少讓我能看 extension point 夠不夠真、文件夠不夠清楚、security model 是真的有設計，還是只是寫在簡報上。\u003C\u002Fp>\u003Cp>如果你想拿這套思路去比別的工具，我會一起看 \u003Ca href=\"https:\u002F\u002Fwww.anthropic.com\u002F\">Anthropic\u003C\u002Fa> 的 tool use 文件、\u003Ca href=\"https:\u002F\u002Fopenai.com\u002F\">OpenAI\u003C\u002Fa> 的 function calling 說明，還有 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fautogen\">Microsoft AutoGen\u003C\u002Fa>。它們不是同一套，但都在處理同一題：怎麼給模型能力，卻不把整個家都交出去。\u003C\u002Fp>\u003Cp>實操寫法：評估 agent framework 時，先讀 extension points，再看 examples。範例很會演，邊界不會。邊界寫得清楚，這套東西才有機會上線。\u003C\u002Fp>\u003Ch2>我明天就會偷走的設計\u003C\u002Fh2>\u003Cp>如果我今天要重做一套 agent stack，我會直接偷 plugin-first 這個形狀，其他先放一邊。我不會先問模型多聰明，我會先問：哪些能力一定要隔離、哪些動作一定要記錄、哪些事情預設就是不准做。\u003C\u002Fp>\u003Cp>翻譯一下就是：harness 不是魔法盒，是控制平面。模型負責提案，plugin 負責窄範圍\u003Ca href=\"\u002Fnews\u002Fchatgpt-mac-computer-history-memory-zh\">工作\u003C\u002Fa>，runtime 負責算帳。這個心智模型比讓 agent 拿著一大串 prompt 在系統裡亂逛健康太多了。\u003C\u002Fp>\u003Cp>我知道這聽起來比一般 agent 文章保守。很好，生產環境本來就該保守。真正好玩的部分是模型，真正值錢的是把風險收斂住。只要資料還在你手上，慢一點根本不是問題。\u003C\u002Fp>\u003Cp>實操寫法：先挑一個最有價值的能力包成 plugin，隔離執行，加 audit logging，再慢慢加智慧。這樣看起來比較慢，但你不會在六個月後又把同一課補考一次。\u003C\u002Fp>\u003Ch2>可抄的模板\u003C\u002Fh2>\u003Cpre>\u003Ccode>Agent harness design notes（可直接改成你的版本）\n\n目標：把模型行為和工具執行拆開，讓 agent 可以被審、被測、被關掉。\n\n1) Core loop\n- Planner：只產生結構化計畫，不直接執行。\n- Validator：檢查 policy、權限、風險。\n- Executor：只跑已批准的 plugin action。\n\n2) Plugin contract\n每個 plugin 必須定義：\n- name\n- version\n- owner\n- allowed inputs\n- allowed outputs\n- required permissions\n- failure modes\n\n3) Runtime rules\n- 不允許 plugin 任意讀寫檔案系統。\n- 不允許 plugin 在未授權下發網路請求。\n- 不允許 plugin 存取未授權 secrets。\n- 每次 action 都要記錄 timestamp、plugin name、agent id、result。\n\n4) Sandboxed execution\n如果可以，把 plugin 跑在隔離 runtime。\n若使用 WebAssembly，介面保持很窄：\n- input: JSON 或 protobuf\n- output: JSON 或 protobuf\n- no ambient authority\n\n5) Approval flow\nplan -> validate -> execute -> log\n\n6) Example plugin manifest\n{\n  \"name\": \"ticket_creator\",\n  \"version\": \"1.0.0\",\n  \"owner\": \"platform-team\",\n  \"permissions\": [\"jira:write\"],\n  \"inputs\": [\"title\", \"description\", \"priority\"],\n  \"outputs\": [\"ticket_id\"],\n  \"policy\": {\n    \"requires_human_approval\": true,\n    \"allowed_projects\": [\"ENG\", \"OPS\"]\n  }\n}\n\n7) Review checklist\n- 我能不能用一句話說清楚這個 plugin 做什麼？\n- 我能不能在不壞掉整個 agent 的情況下關掉它？\n- 我能不能追出它每次呼叫了什麼？\n- 我能不能換 runtime 而不用重寫 harness？\n- 我能不能證明它不會超出 scope？\n\n8) Copyable policy prompt\n你是一個 planning agent。不要直接執行動作。\n請輸出結構化 plan，包含：\n- objective\n- required plugins\n- data needed\n- risk level\n- approval requirement\n\n除非某個 plugin 明確授權，否則不要假設你能碰任何系統。\u003C\u002Fcode>\u003C\u002Fpre>\u003Cp>這就是我會直接丟給團隊的版本。它不花俏，但它把危險的地方都攤開了，而攤開就是可控的第一步。\u003C\u002Fp>\u003Cp>原始來源：\u003Ca href=\"https:\u002F\u002Fthenewstack.io\u002Fdeepseek-harness-open-source-plugins\u002F\">The New Stack 文章\u003C\u002Fa>。這篇拆解是我自己的翻譯、整理和實作化版本，延伸引用了 \u003Ca href=\"https:\u002F\u002Fwebassembly.org\u002F\">WebAssembly\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FWebAssembly\u002Fwasi-sdk\">WASI SDK\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fbytecodealliance\u002Fwasmtime\">Wasmtime\u003C\u002Fa>、\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fautogen\">AutoGen\u003C\u002Fa> 等公開資料。\u003C\u002Fp>","我拆 DeepSeek 的插件優先 agent harness，整理成可直接套用的分工、權限與沙箱模板。","thenewstack.io","https:\u002F\u002Fthenewstack.io\u002Fdeepseek-harness-open-source-plugins\u002F",null,"https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786779194304-y3mi.png","tools","zh","7126b4be-9068-4743-b266-aa5f5aae862b",[17,18,19,20,21],"agent harness","plugins","WebAssembly","sandbox","tool calling",[23,24,25],"把 agent 能力拆成可審、可測、可關的 plugin。","用 plan \u002F validate \u002F execute 分離意圖與執行。","先把邊界做清楚，再談模型有多會做事。",1,"2026-08-15T07:32:43.337645+00:00","2026-08-15T07:32:43.31+00:00",{"tags":30,"relatedLang":37,"relatedPosts":41},[31,33,35],{"name":21,"slug":32},"tool-calling",{"name":17,"slug":34},"agent-harness",{"name":19,"slug":36},"webassembly",{"id":15,"slug":38,"title":39,"language":40},"deepseek-plugin-harness-turns-agents-into-tools-en","DeepSeek’s plugin harness turns agents into tools","en",[42,48,54,60,66,72],{"id":43,"slug":44,"title":45,"cover_image":46,"image_url":46,"created_at":47,"category":13},"62bdb4e4-7f3f-4218-ba55-d716aecd8ee7","claude-code-sessions-message-each-other-zh","Claude Code 讓會話互傳訊息","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786753981619-bii1.png","2026-08-15T00:32:41.027572+00:00",{"id":49,"slug":50,"title":51,"cover_image":52,"image_url":52,"created_at":53,"category":13},"ca5fecbc-126c-4688-997a-212eb1c01208","10-ai-github-repos-that-actually-save-time-zh","10 個 AI Repo，真的省時間","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786712619314-0lr7.png","2026-08-14T13:03:14.477152+00:00",{"id":55,"slug":56,"title":57,"cover_image":58,"image_url":58,"created_at":59,"category":13},"cbf2a589-5c35-4278-9fea-061252522297","fable-51-safety-boundary-permission-template-zh","Fable 5.1把安全边界改成权限模板","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786695622156-b6ey.png","2026-08-14T07:33:08.295056+00:00",{"id":61,"slug":62,"title":63,"cover_image":64,"image_url":64,"created_at":65,"category":13},"dda641de-50ed-419d-81dc-d8f8edc33084","vdbbench-cost-benchmark-vector-databases-zh","VDBBench 把向量資料庫比法改掉","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786654993634-4al2.png","2026-08-13T21:02:47.275149+00:00",{"id":67,"slug":68,"title":69,"cover_image":70,"image_url":70,"created_at":71,"category":13},"c55af4bc-dfce-4031-896d-89c6e76ba2c0","zilliz-cost-aware-vdbbench-benchmark-zh","Zilliz替VDBBench加入成本指標","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786653169746-xfnk.png","2026-08-13T20:32:26.208471+00:00",{"id":73,"slug":74,"title":75,"cover_image":76,"image_url":76,"created_at":77,"category":13},"dff07cae-e3a9-46e4-b069-c0ab3b7e18e3","zilliz-cost-aware-scoring-vdbbench-zh","VDBBench 把成本納入主指標","https:\u002F\u002Fxxdpdyhzhpamafnrdkyq.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Fcovers\u002Finline-1786651373076-fihi.png","2026-08-13T20:02:30.752194+00:00",[79,84,89,94,99,104,109,114,119,124],{"id":80,"slug":81,"title":82,"created_at":83},"855cd52f-6fab-46cc-a7c1-42195e8a0de4","surepath-real-time-mcp-policy-controls-zh","SurePath 推出即時 MCP 政策控管","2026-03-26T07:57:40.77233+00:00",{"id":85,"slug":86,"title":87,"created_at":88},"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":90,"slug":91,"title":92,"created_at":93},"af9c46c3-7a28-410b-9f04-32b3de30a68c","prompting-in-2026-what-actually-works-zh","2026 提示工程，真正有用的是什麼","2026-03-26T08:08:12.453028+00:00",{"id":95,"slug":96,"title":97,"created_at":98},"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":100,"slug":101,"title":102,"created_at":103},"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":105,"slug":106,"title":107,"created_at":108},"a5f94120-ac0d-4483-9a8b-63590071ac6a","claude-code-vs-cursor-2026-zh","Claude Code 與 Cursor 深度對比：202…","2026-03-26T13:27:14.279193+00:00",{"id":110,"slug":111,"title":112,"created_at":113},"0975afa1-e0c7-4130-a20d-d890eaed995e","practical-github-guide-learning-ml-2026-zh","2026 機器學習入門 GitHub 實用指南","2026-03-27T01:16:49.712576+00:00",{"id":115,"slug":116,"title":117,"created_at":118},"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":120,"slug":121,"title":122,"created_at":123},"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":125,"slug":126,"title":127,"created_at":128},"3ce6e6e2-bac5-463e-9f8d-45caabcc61f7","awesome-ai-for-science-research-tools-map-zh","AI 科研工具清單，開始像地圖了","2026-03-27T01:46:50.521945+00:00"]