Orkas Orkas
首頁 博客 Agent
Agent

一個會自己變好用的 Agent:拆解 Orkas 的自演進機制

拆解 Orkas 的本地自演進閉環:輕量信號、後台反思、可執行技能、技能指標,以及避免學錯方向的防線。

大多數 AI 助手是「用完即忘」的。你今天糾正它一個習慣,明天它照犯不誤;你上周教它一套你團隊特有的流程,這周它當作沒聽過。每一次對話都從零開始,再聰明的模型也只是個失憶的聰明人。

Orkas 想做的是另一件事:讓 agent 從自己每天的使用里學東西,把反復出現的經驗沈澱下來,下次自己用上。說得直白點——它會越用越順手,而且這個「順手」是衝著你、你的偏好、你的領域長出來的,不是模型廠商替所有人預設好的。

這篇文章拆一下這套機制是怎麼搭的。它不是「讓模型記住對話」這麼簡單,背後是一條完整的閉環:觀察自己 → 判斷要不要反思 → 真的去反思 → 把結論寫成可復用的東西 → 下次再用上。下面一段段看。

先把最要緊的一句話放前面:下文講的所有「觀察」「記錄」「反思」,從頭到尾都發生在你自己的設備上。 運行情況、技能、對自己的認知,全部以普通檔案的形式存在本地,不上傳到 Orkas 的服務端,也不會被拿去做跨使用者的分析或模型訓練。所謂「自演進」,是程序在本地讀自己的運行記錄、在本地改進自己,而不是把你的資料收上去。這些經驗既出不了這台機器,也只服務於這一台機器上的你。

一句話版本 會改自己 Agent 的 Agent 自我演化跑在桌面應用里、跑在你的工作區上,它做的每一處改動在生效前你都看得見。
下載 Orkas — 免費

先看整條閉環

一次次真實使用
      │  在本地記下:調了哪些工具、出沒出錯、有沒有被糾正
      ▼
   信號累積
      │  就地從對話里提取出一條條信號,全部留在本機
      ▼
  判斷該不該反思
      │  多個信號加權打分,過線才觸發;網路抖動這類不算
      ▼
   後台跑反思
      │  不是每輪都跑,是隔一段時間挑符合條件的來一次
      ▼
  沈澱成兩類東西
      │  ① 可復用的「技能」  ② 對自己的「認知」
      ▼
  下一輪自動帶上
      └──────────► 回到最上面,繼續滾

這條環里每一步都有講究。最容易做錯的地方,恰恰是大家直覺上覺得最簡單的兩步:什麼時候該反思,以及反思完該記下什麼。先從最前面說起。

第一步:幾乎零成本地觀察自己

要從經驗里學,先得有「經驗」可看。每一輪 agent 運行結束,程序會在本地就地數出幾個很輕的運行情況——這輪大致調了幾次工具、有沒有出錯、出的是網路這類瞬時錯誤還是真錯誤、有沒有被當場糾正。就這麼幾個計數和標記,全在本機算完,既不調模型、也不往任何地方發。

這點之所以關鍵,是因為它完全不花模型的錢。這些都是從本輪對話記錄里直接數出來的,不需要再額外調一次模型去「分析自己」。如果每輪都要為了自省再調一次模型,成本和延遲都扛不住,這套機制根本上不了線。

其中「有沒有被糾正」稍微有點意思。它是一個純啓發式的本地判斷,靠在你的設備上匹配消息里的一些措辭來估,比如中文的「不對」「應該是」「重新」、英文的 wrong、actually、instead。它不追求准——這只是一個信號而不是結論,偶爾誤判完全可以接受,因為它後面還要和別的信號一起加權,不會單憑它就下判斷。

第二步:什麼時候才值得反思

這是整套機制里我覺得最見功力的地方。

樸素的做法是「攢夠 N 次就反思一回」。但這很糙:連續三次網路超時,和使用者連續三次糾正你,顯然不是一回事,不該同等對待。Orkas 用的是多信號加權打分:每一類值得注意的現象是一個信號,帶一個權重,把這輪觸發的信號權重加起來,超過閾值(預設 0.7)才反思。

幾個主要信號大致是這樣的:

信號權重觸發條件
使用者糾正0.9這輪里檢測到使用者在糾正你
技能沒起效0.85加載了技能,結果這輪還是錯了
從錯誤中恢復0.8出過錯但最終救回來了
撞上已知弱點0.7任務命中了自我評估里記著的薄弱項
任務複雜0.5工具呼叫次數超過一定數量

舉個例子:一輪對話里既有使用者糾正(0.9)又比較複雜(0.5),加起來 1.4,遠過 0.7,觸發反思;而一輪只是稍微複雜一點(0.5),不到線,就放過。權重的設計也透著取捨——使用者的直接糾正給到最高的 0.9,因為那是信號噪音比最高的反饋:使用者都明說你錯了,這事多半真值得記下來。

那條最關鍵的豁免線

整個打分邏輯里,有一條規則我認為是這套機制能不能「學對東西」的分水嶺:瞬時錯誤一律不算。

網路超時、連接被掐、限流——這些是環境問題,不是 agent 自己的能力缺陷。如果不把它們排除掉,會發生很糟的事:某個工具因為一次偶發的網路抖動報了錯,反思機制把這記成「這個工具不靠譜,以後少用」,甚至把一個本來好好的技能給改壞、刪掉。從此以後 agent 學會了一個錯誤的教訓,而且這個錯誤會一直跟著它。

所以「從錯誤中恢復」「技能沒起效」「撞上已知弱點」這幾個信號,都明確把純瞬時錯誤擋在外面。反思的提示詞里也會再叮囑一遍:網路類的錯誤是環境問題,不要記成弱點、不要去動相關的技能。一套自我改進的系統,最怕的不是學得慢,而是學錯方向——這條豁免線擋的就是這個。

第三步:反思在後台跑,不在你面前跑

一個容易踩的坑是:檢測到「該反思了」,就當場停下來反思一把。這會讓使用者感覺 agent 時不時卡一下、走神去「想人生」,體驗很差。

Orkas 把反思挪到了後台,按一個固定節奏來。大致的調度規矩是:

  • 每隔一段時間(比如十幾個小時)起一個反思週期;
  • 同一個 agent 兩次反思之間有最短冷卻(比如幾小時),不會過於頻繁;
  • 但如果太久沒反思過了(比如超過一周),強制來一次,免得一直拖;
  • 一個週期里挑的 agent 數量有上限,避免一次性鋪太開。

還有一個我很喜歡的小設計叫髒檢查(dirty gate):起反思週期時,先看這個 agent 自上次反思以來到底有沒有新東西——有沒有新的信號、對話記錄有沒有更新過。要是壓根沒動靜,這次就直接跳過,不浪費一次(要花模型錢的)反思。簡單,但省得很實在。

第四步:反思具體怎麼做

到了真要反思的時候,流程是:先把最近這段時間的活動整理成一份「材料」,再配一段精心寫的提示詞,交給模型去讀、去總結。

材料這塊是有預算的:最多取最近的若干段對話,再加上幾類系統事件,按時間順序穿插起來,總量卡在一個 token 上限內(比如一萬多)。不是把所有歷史一股腦塞進去——既塞不下,信噪比也低。

真正講究的是提示詞。它要求模型產出的不是「描述」,而是可執行的祈使句。這個區別看著小,影響極大。對比一下:

✗ 「Agent 輸出有時過於冗長,應當注意。」

✓ 「回復家辦場景的問題時,絕不超過 5 個要點。」

✗ 「使用者似乎偏好簡潔的輸出。」

✓ 「當回復家辦場景時,永遠先給出結論,再講理由。」

提示詞明確引導模型用「絕不 / 永遠 / 當……就……」這種帶具體觸發條件的結構來寫。原因很實在:一條「應當注意簡潔」的筆記,下次 agent 讀到了也不知道該怎麼做;而一條「絕不超過 5 個要點」是能直接照著執行的。自我改進要有用,沈澱下來的東西必須是能落地的指令,不是正確的廢話。

反思完,模型可以做幾件事:新建或修改一個技能、更新對自己的認知、或者——如果這段時間確實沒什麼值得記的,就明說一句「沒什麼要存的」。允許它什麼都不做,本身也是個重要的設計:不強行湊學習成果,免得攢下一堆沒用的噪音。

沈澱成兩類東西

反思的產出落到兩個地方。

一類是技能。 每個技能就是一個帶元資訊的 Markdown 文件,開頭一段 frontmatter 記著名字、描述、建立和更新時間、被改過幾次、上次用是什麼時候,正文是具體的操作步驟或要點:

---
name: "Weekly Report Export"
description: "Compile this week's data into the standard weekly-report format"
createdAt: "2025-01-01T00:00:00Z"
updatedAt: "2025-01-08T00:00:00Z"
patchCount: 2
lastUsedAt: "2025-01-09T10:00:00Z"
---

## Steps
1. ...
2. ...

技能用檔案來存,是個很務實的選擇:人能直接看、能直接改,不鎖在某個不透明的資料庫里。

另一類是對自己的認知。 這部分更像 agent 寫給自己的備忘,分兩份:一份記「我擅長什麼、在哪兒容易翻車」,一份記「面對這個使用者、這個領域,我摸索出的打法」。兩份都有字數上限,逼著它保持精煉——不是越長越好,是越准越好。下一輪對話開始時,這些內容會注進系統提示詞,讓 agent 帶著「對自己的瞭解」上場。

技能不是只進不出

光會建立技能,攢著攢著就成了垃圾場。所以技能有完整的生命週期。

建立之外,更常用的其實是打補丁:在已有技能上改一小段,而不是推倒重來。每打一次補丁,計數加一、更新時間刷新。這讓技能能隨著經驗慢慢長,而不是動不動整篇重寫。

數量也有天花板。技能總數設了上限(比如兩百個),到頂了再加新的,就按 LRU(最近最少使用) 淘汰一個舊的騰位置。淘汰還有個偏好:優先踢那些建了之後就再沒被用過的——一個從沒被讀取過的技能,多半當初就沒沈澱對,留著不如讓位。

每次 agent 讀取一個技能,它的「上次使用時間」就刷新一下。這個時間戳既餵給 LRU 做淘汰判斷,也讓本地的機制能分清哪些技能真在用、哪些只是佔著位置。

怎麼知道技能到底有沒有用

這是很多「自動學習」系統會偷懶跳過的一環:學是學了,到底有沒有用?Orkas 在本地把它做成了幾個指標。這些指標算出來只給本機的演進機制自己用——判斷哪個技能該改、該刪,同樣不出這台機器。

機制是這樣的:每輪對話開始時,可用的技能會出現在系統提示詞的索引里,這叫一次「曝光」;如果 agent 這輪真的去讀取了某個技能,算一次「呼叫」。兩者一比,就有了第一個指標——

  • 呼叫率 = 被呼叫次數 / 被曝光次數。技能天天擺在那兒卻沒人用,呼叫率就低,說明它要麼沒用、要麼描述寫得讓人看不出該什麼時候用。
  • 改動率 = 呼叫了該技能、但使用者隨後又動手改了結果的比例。高,說明這技能給出的東西不太對使用者胃口。
  • 失效率 = 呼叫了該技能、這輪卻以(非瞬時的)錯誤收場的比例。高,說明技能本身可能有問題。

這裡又能看到那條豁免線的影子:算失效率時,瞬時錯誤同樣不算數,使用者中途主動喊停的也不算——總不能因為一次網路抖動,就給一個本來好用的技能記上一筆黑賬。

有了這幾個數,技能從「黑盒地攢著」變成了「能被評估、能被優化」的東西。哪個技能該改、該刪,不再靠拍腦袋。

閉環合上

把前面這些串起來,一次完整的循環是這樣走的:

agent 在一次次真實任務里乾活,順手在本地記下運行情況、就地標出信號。後台的反思週期到點了,挑出有新動靜、又過了冷卻期的 agent,把它最近的活動整理成材料,讓模型對照著自己當前的認知去復盤——該合併的合併、該淘汰的淘汰、該提煉成新技能的提煉。復盤的產出落成技能和自我認知。下一輪對話,這些技能進了提示詞索引,自我認知進了系統提示詞,agent 帶著上一輪學到的東西重新上場。然後這一輪又產生新的指標和信號,餵回最開始。

環就這麼一圈圈滾下去。每一圈不一定有驚天動地的進步,但方向是單向的:朝著更懂你、更少犯同樣的錯。

幾個值得說的取捨

回頭看,這套機制里有幾個決定挺關鍵。

自省必須便宜。 觀察自己用的是零模型成本的指標,真正費錢的反思被挪到後台、低頻、還要先過髒檢查。把「貴」的部分死死摁住,這套機制才跑得起。

寧可不學,不可學歪。 瞬時錯誤的豁免線、允許反思「什麼都不存」、寫成可執行祈使句而不是模糊描述——這幾條都指向同一個判斷:一個自我改進的系統,學錯方向比學得慢危險得多。

學到的東西要看得見、改得動、且就在你手上。 技能是明文件案,自我認知是明文備忘,技能有效性有指標可查,而且這些檔案全都躺在你自己的機器上,不上雲。整套機制沒有黑盒,人隨時能打開看、隨手能改。

給學習裝上剎車。 數量上限、LRU 淘汰、字數限制——沒有這些,「持續學習」遲早變成「持續膨脹」。會忘、會丟、會精簡,和會記一樣重要。

小結

Orkas 的自演進,本質上是給 agent 加了一條慢迴路:快迴路是每一次對話的即時響應,慢迴路是隔一段時間回頭看看、把經驗沈澱成下次能用的東西。難點不在「讓模型記住」,而在那些容易被忽略的工程判斷——怎麼判斷哪些經驗值得記、怎麼不被偶發故障帶歪、怎麼讓學到的東西真能執行、又怎麼在它膨脹之前及時修剪。

這些判斷合起來,讓「越用越順手」從一句產品宣傳,變成了一套真的在轉的機制。一個能從你身上學習、又不會學歪的助手,比一個單純更聰明的助手,可能更接近大多數人真正想要的那個東西。

想瞭解這條慢迴路所依託的專家 Agent,可以瀏覽 Orkas 的 Agent 團隊。