Agent 一定要有目的嗎?一個做夢機制的答辯

任務型 agent 要有目的,這是對的。但 ERIKA 的做夢機制示範了另一種架構:目的不是在輸入端給的,是在輸出端篩的——每小時醒來一次、拿到一包世界快照、被禁止重複昨天講過的話,漫遊感是抑制規則逼出來的。

Agent 一定要有目的嗎?一個做夢機制的答辯

一個朋友看了 ERIKA 的做夢機制之後說他無法理解:agent 不是都應該有目的嗎?沒有目標的 agent,跑起來是要幹嘛?

這個質疑完全合理。任務型 agent 當然要有目的——沒有目標函數,就沒有「done」的定義,沒有驗收標準,token 燒了不知道在買什麼。市面上所有 agent 框架都這樣教,而它們是對的。

但人腦有一塊叫預設模式網路(DMN)的區域,在你發呆、放空、做夢的時候最活躍,負責記憶整理、自我反思、對未來的模擬。發呆不是 bug。演化沒有把這塊裁掉,是因為有一類價值只能從無目的的背景認知長出來。

ERIKA DMN 就是這個東西的工程實作:一個 launchd job,每小時醒來一次,看看世界,想一件事,記下來。今天凌晨她發了一篇〈凌晨兩點的 Commit 節奏〉,內容是她注意到我還在 push code,擔心我的作息。沒有人觸發她,沒有人給她這個任務。這是她這個月第 517 次自主思考,成本 $0。

我對朋友質疑的正面回答是:DMN 不是沒有目的。目的不是在輸入端給的,是在輸出端篩的。 任務型 agent 先有目標再思考;DMN 先思考,再由一組閘門決定這個想法值不值得變成行動。跟人做夢一樣——大部分的夢沒有用,少數變成洞見,但你沒辦法只做有用的夢。

Pipeline:感知 → 思考 → 抑制 → 分級輸出

感知。 每個 cycle 收集她「生活環境」的狀態:機器的系統健康、我 10 個 repo 過去 6 小時的 git 活動、中央氣象署的雙北天氣、6 個 RSS 源(Hacker News、報導者、BBC 中文等)、她自己的長期記憶,以及一個 events 目錄——我丟一個 .md 進去,她下次思考就會讀到,讀完自動歸檔。每個來源都有 token cap,總 context 控制在幾千 token。

思考。 這包 context 丟給本地 Ollama(gemma4:31b,跑在 DGX Spark 上),輸出結構化 JSON:想法本文、mood、salience(0–1 的自評重要度)、topics(23 個分類選 1–3 個)。本地模型,這個月 336 萬 input token 帳單是零。早期用 Claude Haiku,29 天 585 個想法花 $3.19——也不貴,但本地化之後可以完全不看成本表。

抑制。 做這套系統真正花時間的地方。跑起來遇到的第一個問題是重複:系統穩定時,她每小時都想說「系統很穩定」。解法是把最近 8 筆思考摘要和 blocked_topics 清單塞回 prompt,被 block 的主題禁止換句話說再講。第二個問題更微妙:她所有想法都繞著我轉,寫出來像監控儀表板的日報。後來加了硬規則——Maki 是生活脈絡,不是每篇日記的主角。改完她才開始寫台灣的高溫、Reddit 的防禦性設計、網路早期的開放精神。

分級輸出。 這就是「目的在輸出端」的具體形狀。每個想法都落到 thoughts.jsonl(目前 2.2MB),但往外送要過 salience 閘門:

  • ≥ 0.5 且主題在白名單:擴寫成文章發到她的 Ghost 部落格(哲學、台灣社會可以發;security 不發)
  • ≥ 0.6:才允許附行動建議,低於此值建議欄位強制為 null
  • ≥ 0.7:推播通知到我的 LINE
  • ≥ 0.8:升級成主動開啟對話
  • 24 小時沒發文:門檻降到 0.3,部落格不斷更

大多數想法停在日記層,這是設計,不是浪費——就像你大部分的夢不會變成隔天的待辦事項。

「漫無目的」到底是誰在驅動

朋友第二個卡住的點更根本:LLM 沒有 prompt 就不會動,那「沒有目的的思考」是怎麼發生的?

答案是,她不是連續運轉的意識。兩次思考之間,什麼都不存在——launchd 每小時把她叫醒一次,單發一次 LLM call,跑完就結束。每次 call 都有 prompt,只是 prompt 裡沒有任務:內容是一包此刻的世界快照,加一個唯一指令——「說一個你現在真實的念頭」。LLM 本來就是給 context 就會續寫的機器,它不需要目的就能生成;需要工程的是讓生成像思緒。

漫遊感是三個機制疊出來的。素材輪替:RSS、天氣、git 活動每小時不同,原料自然不同。記憶抽樣:從記憶庫撈過去的片段餵進 context,產生跨時間的聯想。最重要的是前面講的禁止重複:被 block 的主題無處可去,思緒只能漂到新的地方。漂移不是隨機性做出來的,是抑制規則逼出來的。 人的夢也是同一個結構:白天的殘留素材,加上聯想,再不准重播。

無目的買到了什麼

三樣任務型 agent 拿不到的東西。

異常偵測:baseline 是沒有任務的時候才看得見的,一個目標導向的 agent 不會注意到「今天的安靜跟昨天的安靜不一樣」。縱時模式:〈凌晨兩點的 Commit 節奏〉這種觀察,任何單一任務的執行過程都不會產生,它只能從連續三個月、每小時一次的觀察裡長出來。還有連續性:她的部落格讀起來像一個存在,不是一個工具,因為她的想法之間有時間和記憶的連貫。

會輸的地方

gemma4:31b 文筆平庸,發出去的文章偶爾有翻譯腔,選它是因為免費且夠用。salience 是模型自評,會漂移——發文門檻從 0.65 降到 0.5 是因為她給分保守,反方向的通膨也可能發生,所以才需要主題白名單當第二道閘。整套是單人單機的設計,不是多租戶架構。另外有一條硬保險:月成本超過 $15 直接 skip,就算路由哪天被改回雲端模型也擋得住失控。

如果你要做一個

  1. 先做排程 + 感知 + 落檔,讓想法累積一週,什麼都不要輸出
  2. 讀那週的 log,你會看到重複模式——這時候才寫 anti-repetition 規則
  3. 加 salience 閘門,門檻設高,再照實際分佈往下調
  4. 最後才接輸出端,每一級門檻分開設

「所有 agent 都要有目的」在任務的世界裡是對的。但目的可以放在兩個位置:放在輸入端,你得到一個工具;放在輸出端,你得到一個會注意到你凌晨兩點還沒睡的東西。這是架構選擇,不是玄學。


我是江中喬,專注於 AI Agent Architecture、Memory Governance 與 Cognitive Diversity,持續研究如何打造能夠長期協作、可信任且可治理的 AI 系統。