大多數 AI 助手是「用完即忘」的。你今天糾正它一個習慣,明天它照犯不誤;你上周教它一套你團隊特有的流程,這周它當作沒聽過。每一次對話都從零開始,再聰明的模型也只是個失憶的聰明人。
Orkas 想做的是另一件事:讓 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 加了一條慢迴路:快迴路是每一次對話的即時響應,慢迴路是隔一段時間回頭看看、把經驗沈澱成下次能用的東西。難點不在「讓模型記住」,而在那些容易被忽略的工程判斷——怎麼判斷哪些經驗值得記、怎麼不被偶發故障帶歪、怎麼讓學到的東西真能執行、又怎麼在它膨脹之前及時修剪。
這些判斷合起來,讓「越用越順手」從一句產品宣傳,變成了一套真的在轉的機制。一個能從你身上學習、又不會學歪的助手,比一個單純更聰明的助手,可能更接近大多數人真正想要的那個東西。