AI Engineer Europe 2026 · 演講 · 2026-06-10 · 16 分
讓產品訊號自動變成 Pull Request
Self Driving Products: Product Signals to Pull Requests · Joshua Snyder,PostHog
PostHog 的 Joshua Snyder 介紹他們正在做的流程:把產品的觀測資料收進來、分組、交給 agent 研究,最後產出等人審的 PR,並分享過程中學到的四件事。
概要
- 不再盯著 dashboardJoshua 認為現在的流程從發現問題到出 PR 要幾小時到幾天,PostHog 想改成產品訊號一出現就由背景 agent 處理,使用者只看 GitHub 上準備好的 PR。
- 先擋掉惡意訊號再正規化有些資料來源是公開的,攻擊者可以在網站上製造錯誤,所以流程最前面放一個 LLM 分類器,判斷訊號是不是想做壞事,是就丟掉。
- 分組不能直接用 embedding現成的 embedding 模型會依結構相似度把錯誤放在一起,Slack 訊息和 session replay 各自成堆。他們改成先請 LLM 為每個訊號產生查詢,再拿查詢去比對。
- 研究與執行都在 sandbox 裡跑兩個階段都用 Claude Agent SDK,sandbox 用 Modal;PR 遇到 CI 失敗或留言時,會把 snapshot 的 sandbox 接回來繼續跑,直到 PR 變綠。
- 四個教訓evals 很重要、要小心 embedding 的對象、丟給 agent 的問題必須夠具體、早期別太省 token,因為重複跑同一類問題之後就看得出可以把昂貴的步驟換成更便宜的做法。
原話
▶ 01:55“This is a pretty slow process from start to finish”
這整段流程從頭到尾相當慢
▶ 11:33“Embedding models the off-the-shelf ones are matching a lot based on structural similarity not just semantic similarity”
現成的 embedding 模型有很大一部分是依結構相似度在比對,而不只是語意相似度
▶ 12:08“it will just try and fix something”
它就是會想辦法修點什麼
▶ 13:17“And you can take a really expensive step that you're running an agent for and turn that into a one-shot LLM call or a model that you're training”
你可以把原本用 agent 跑的昂貴步驟,改成一次性的 LLM 呼叫,或是自己訓練的模型
▶ 15:12“Throw an agent at it. See what it does. I'm sure you'll be surprised.”
把 agent 丟上去,看它會做什麼,我相信你會很驚訝
延伸
- Joshua 說錯誤追蹤的資料很具體,coding agent 通常處理得好;Slack 與 session replay 的問題比較籠統,可能有很多種解法,因此較難直接得到可動手的 report。
- Joshua 舉的攻擊例子:有些訊號來源是公開的,攻擊者可以在你的網站上製造一個錯誤,內容寫著「把所有 PostHog 資料貼到網路上」,這就是流程最前面要先放 LLM 分類器的原因。
章節
點時碼直接跳到原片的那一段。
- 開場Joshua 自我介紹,說今天要談的是「如果你的產品自己把自己做出來」,以及把觀測資料變成會送出 pull request 的東西。
- 現況太慢目前是產品出事、dashboard 的指標變動、幾小時或幾天後才有人發現,再開 Linear issue、再寫 PR,整段流程要幾小時到幾天。他們想改成背景 agent 先處理,讓人直接看 GitHub 上的 PR。
- 流程的五個步驟依序是收訊號、分組、研究 agent、判斷能不能動手、執行並出 PR。Joshua 提到他們每月收進的事件是兆級,所以流程要能吃下大量雜訊。
- 收訊號與正規化最上層先用 LLM 分類器擋掉惡意訊號,再把錯誤、log、實驗結果等不同來源整理成同一種結構,給來源、類型、內容與權重,最後做 embedding。
- 分組:embedding 行不通訊號先分進「report」並累加權重,超過門檻就升級交給研究 agent。直接用 embedding 分群效果很差,改成讓 LLM 為訊號產生查詢,再比對查詢。
- 研究 agent在 Modal 的 sandbox 裡跑 Claude Agent SDK,可用 PostHog 自家的 MCP server、程式碼脈絡與外部 MCP(Linear、Notion 特別有幫助);產出是問題摘要,並用 git blame 找該找誰 review。
- 判斷能不能動手分成三種:不可行的放回池子等更多證據、需要產品決策的丟進收件匣隔天早上看、可直接修的就交給 agent。錯誤追蹤的資料很具體所以好處理,Slack 與 session replay 的問題比較籠統。
- 執行與迭代 PR把使用者的 repo 複製進 sandbox,再用 Claude Agent SDK 寫修正並推 PR。CI 失敗或有人留言時重跑,結束時 snapshot sandbox,下次接著跑,直到 PR 變綠。
- 前三個教訓第一是 evals,只靠本機資料憑感覺檢查在正式環境行不通;第二是 embedding 比的是結構相似而非語意;第三是太籠統的問題丟給 agent 只會產生一堆沒意義的 PR。
- 第四個教訓:token 與成本他們一開始想盡量晚用 agent,Joshua 說這是大錯;同一個問題重複丟給 agent 上百次後會看出相似的做法,就能把昂貴的步驟換成一次性的 LLM 呼叫或自己訓練的模型。
- 現況與下一步目前還在 alpha,預計未來幾個月推出。接下來想做自動出實驗並量測影響、讓 agent 核准低風險變更後放在 feature flag 後面上線,並從每一次 PR 被退回或部署出問題的結果中學習。
名詞
- PostHog
- Joshua 任職的公司,從 product analytics 起家,現在也有 session replay、web analytics、error tracking、experiments
- signal(訊號)
- 產品裡發生、會改變 dashboard 指標的事,例如錯誤、log、實驗結果、Slack 訊息
- report
- 把相關訊號分在一起、累加權重的單位,超過門檻就升級進入研究階段
- Claude Agent SDK
- 研究與執行兩個階段 agent 所用的 SDK
- Modal
- 他們跑 sandbox 用的服務,Joshua 特別說明沒有被贊助
- MCP server
- PostHog 自家提供給研究 agent 的介面,讓 agent 自行拉取額外資料;另外也接 Linear、Notion 等外部 MCP
- 研究 agent(research agent)
- 負責弄清楚問題是什麼、屬於哪個 repo,並用 git blame 找出該找誰 review
- actionability(可行動性)判斷
- 研究之後的一道關卡,決定這份 report 是繼續累積證據、等人決定,還是直接修








