AI Engineer Europe 2026 · 工作坊 · 2026-04-20 · 117 分
自建 deep research 與寫作 agent
Full Workshop: Build Your Own Deep Research Agents - Louis-François Bouchard, Paul Iusztin, Samridhi · Louis-François Bouchard、Paul Iusztin、Samridhi
Louis-François、Samridhi 與 Paul 示範如何把研究和寫 LinkedIn 貼文拆成兩套系統:用 MCP 與 skill 做研究 agent,用 evaluator-optimizer 迴圈寫稿,再以 LLM judge 做評估。
概要
- 先選最簡單的架構Louis-François 的原則是能用一個 prompt 就不要上 agent,能用固定步驟的 workflow 就不要上多 agent。舉的客服工單例子有六個固定步驟,所以做成 workflow。
- 研究與寫作拆開研究需要彈性、寫作需要約束,所以他們分成研究 agent 與寫作 workflow。兩者依序執行、不做編排,靠共用的 guideline 和 research 檔案交接。
- MCP 加 skill 的研究 agentSamridhi 的 server 提供 deep research、分析 YouTube 影片、整理 research.md 三個工具,用 Claude Code 當 harness,skill 則只先載入名稱與描述,執行時才載入全文。
- 三招控制寫作Paul 用結構化的 guideline、三份寫作 profile 與少量 few-shot 範例來約束輸出。審稿與修稿用不同 context window,迴圈跑固定次數。
- 審稿用結構化輸出審稿結果是附欄位說明的 Pydantic 物件,編輯依 guideline、研究、profile 的優先順序採納意見。
- 用 LLM judge 做 evals先建 pass 或 fail 的標註資料集,再校準 judge 的 F1 並用 test 切分驗證。現場的線上追蹤上 judge 全給 pass,Paul 說還要回頭擴充 dev 切分。
原話
▶ 10:25“we always want to use the simplest solution, if just a prompt works that's ideal”
我們總是想用最簡單的解法,一個 prompt 就能搞定是最理想的
▶ 1:00:13“tools do the work and, you know, skills provide you the way to do it”
工具負責做事,skill 則說明怎麼做
▶ 1:22:00“LLMs usually tend to be biased in liking what they already written”
LLM 通常偏愛自己已經寫好的東西
▶ 1:30:27“you cannot just fully automate everything if you don't want to sound like through a slob”
不想聽起來像 slop,就不能把一切全自動化
▶ 1:40:28“never ask the llm to directly generate the output always ask it to help you generate the input”
合成資料時,別讓 LLM 直接生成輸出,只讓它幫你生成輸入
延伸
- Louis-François 提到有些 Claude Code 外洩內容中的壓縮方法值得研究,但這場沒有展開。
- Samridhi 說他們正從原本的 MCP prompt 轉向 skill,但因為 server 裡有許多細節,仍保留原本的複雜度。
- Paul 提到要降低 few-shot 對 system prompt 的負擔,唯一的辦法大概是 fine-tuning,但認為通常太費事,這場沒有往下做。
章節
點時碼直接跳到原片的那一段。
- 開場:LinkedIn 貼文的通病Louis-François 用一則 ChatGPT 生成的貼文當反例,點出空泛的「most teams」、AI 慣用詞、過時資訊與沒有內容這幾個毛病。
- 為什麼自己做這套系統Towards AI 要產出大量技術內容,於是自動化研究與寫作的流程,工作坊示範縮小版:研究系統加上寫 LinkedIn 貼文的寫作系統,前半小時由 Louis-François 講觀念,之後三人輪流帶程式。
- AI 工程的限制與自主度每個決定都受成本、延遲、品質與資料隱私牽制,Louis-François 用「自主度滑桿」說明越往 agent 走,彈性越大、可控性越低、成本越高。
- workflow 與 agent 的分界workflow 是加上資料、工具、記憶的語言模型,可以串接、路由、平行、加迴圈;能採取行動並對環境變化做出反應,才算 agent。
- 何時用 workflow,何時用 agent原則是能用最簡單的就用最簡單的。客服工單六步固定順序,用 workflow;加拿大 CRM 平台的行銷聊天機器人,客戶想要多 agent,他們做成一個帶工具的單一 agent。
- context 越長表現越差context window 裡裝著 system prompt、工具定義、範例與對話歷史,Louis-François 說退化遠早於上限,並談到修剪、摘要、檢索與委派給工具或子 agent,以及需要多 agent 的幾種情況。
- deep research 系統是什麼把 deep research 拆成自主決定研究什麼、使用網路工具、引用來源、有回饋迴圈與人工回饋、目標導向,說明它為什麼是整合各種技巧的完整範例。
- 目標、挑戰與值不值得自己做目標是從主題產出附可執行程式碼與圖片的技術文章;現成 deep research 工具太廣、雜訊多,所以自建,定位是輔助寫手而不是取代。
- 研究與寫作拆成兩套系統研究需要彈性、寫作需要約束,所以拆成研究 agent 與寫作 workflow,兩者在同一個專案,依序執行、不做編排,靠共用檔案溝通。
- 研究 agent 的行為與工具選型由人寫的 guideline 加上相關連結當起點,guideline 限制越多結果越好;網頁抓取、搜尋、YouTube、GitHub 內容與模型各有選擇,並用 FastMCP 包成工具與 MCP prompt。
- 研究 agent 的 MCP 設計Samridhi 說明 agent 負責推理與補足研究缺口,MCP server 提供 tools、prompts、resources;三個工具是 deep research、分析 YouTube 影片、整理成 research.md,結果寫進 .memory 資料夾。
- 程式導覽:server 與三個工具走過專案結構、MCP server 設定與工具註冊所需的名稱、參數與說明,並看 deep research 與 YouTube 兩個工具的實作和各自的 prompt。
- resources、prompt 與接上 Claude Code介紹 resources 與 workflow 指令 prompt 的註冊方式,再用專案根目錄的 mcp.json 以 uv 在本機啟動 server,接上當作 harness 的 Claude Code。
- MCP 版現場 demo在 Claude Code 裡先單獨分析一支 YouTube 影片,再跑完整的研究流程;影片分析要等兩三分鐘,中間重清 context 與資料夾重跑。
- Agent skills 與漸進揭露工具負責做事,skill 說明怎麼做;skill 只先載入名稱與描述,執行時才載入全文,用完即清掉,也比較好分享與維護。
- skill 版 demo 與 research.md把原本的 workflow prompt 換成 research skill,現場問 AI agent skills 並分析影片,過程中 agent 自己發現缺口再補查,最後產出附比較表與影片逐字稿的 research.md。
- 寫作 workflow 總覽Paul 接手,說明寫作端是 workflow 而不是 agent:載入 context、組成大 system prompt 產生初稿,再跑 evaluator-optimizer 迴圈;成品丟進 slop 偵測器沒被判成 slop。
- 控制生成的三招結構化 guideline 說明這次要寫什麼,三份寫作 profile 規範怎麼寫並列出要禁用的詞,加上盡量多樣的 few-shot 範例,並從多到少修剪數量。
- evaluator-optimizer 迴圈寫手與審稿者使用不同 context window 以避免偏袒自己的稿子,審稿依 guideline、研究與 profile 檢查,迴圈跑固定次數而不是設分數門檻,並保留各版本讓人挑。
- 審稿與編輯的設計審稿輸出 Pydantic 結構化物件,每個欄位附說明,表現比自由輸出好;編輯就是寫手本人,衝突時依 guideline、研究、profile 的順序採納。
- 範例結果與 MCP 對 skill展示 v0 與四輪修改後的貼文差異與 guideline 範例,再說明用 skill 呼叫寫作流程,以及為何要散布時還是用 MCP server 比較省事。
- 監控:threads 與 traces只看 log 很難除錯,所以用 Opik 追蹤兩個系統:一個 thread 是整段對話,裡面的 trace 記錄模型、成本、延遲與輸入輸出。
- 為什麼要 evals,資料集怎麼做靠感覺檢查在貼文變多時撐不住,evals 分為優化、回歸測試與線上追蹤三層;資料集用 20 篇既有貼文反推 guideline 與研究,再由真實系統產出並標 pass 或 fail 與簡短批評。
- LLM judge 與校準judge 吃貼文與 context,吐出 pass 或 fail 加批評,用 train 切分的標註當 few-shot,並以 dev 切分的 F1 調整、最後用 test 切分驗證有沒有 overfit。
- 現場跑 judge 與看實驗示範在 dev 與 test 切分上跑 judge,兩邊 F1 都是 1,Paul 解釋這是因為每個切分只有五筆;也看實驗頁裡 judge 判斷與標籤的對照。
- 線上追蹤失敗與收尾模擬的線上追蹤上 judge 全給 pass,與標籤不符,Paul 說要把這些樣本補進 dev 切分再調;最後提醒大家實際去讀 repo。
名詞
- Towards AI
- Louis-François 創辦的教學內容團隊,這套研究與寫作系統原本是拿來做自家課程內容
- Louis-François Bouchard
- Towards AI 的共同創辦人,這場前半段講 workflow、agent 與 context 的觀念
- Samridhi
- 機器學習工程師,負責示範研究 agent 的 MCP server 與 skill
- Paul Iusztin
- 負責寫作 workflow、監控與 evals
- deep research agent
- 這場的研究端:給主題後自己搜網頁、看 YouTube、補缺口,最後整理成 research.md
- FastMCP
- Samridhi 用來建 MCP server 的函式庫,負責處理 agent 與工具之間的通訊細節
- MCP(Model Context Protocol)
- Samridhi 說明是讓 agent 取得工具與資料的開放標準,server 提供 tools、prompts、resources
- Agent skills
- 以名稱與描述先載入、用到才載入全文的指令包,這場拿來取代工作流程 prompt
- guideline.md
- 使用者每篇貼文都要填的輸入檔,寫明主題、角度、重點與敘事流程
- evaluator-optimizer
- 寫手產生初稿、審稿者另開 context 審查、再由編輯修改的迴圈
- LLM judge
- 輸出 pass 或 fail 加簡短批評的評估者,用標註資料集與 F1 校準
- Opik
- 這場用來監控 thread、trace 並跑 evals 的觀測平台,Paul 說換成別的平台或自己做也可以








