語音 Agent 的記憶系統,最可怕的地方不是「記不住」。最可怕的是它為了記住,慢了幾百毫秒。

幾百毫秒放在文字聊天裡,像電梯門慢半拍,煩但可以忍。放在電話裡,整個氣氛直接變成「喂?還在嗎?」把記憶層第一次接進語音 Agent 時,最容易踩到的坑就是照搬文字 Agent 的架構:同步查向量資料庫、做一小段重排,再丟給 LLM。聊天介面沒人會發現;語音介面每一輪都像對方在緩衝。這個坑特別刺眼,因為它不是「不懂記憶」才會犯的錯;就算研究過 ChatGPT 與 Claude 的記憶行為,做過分層記憶框架,也做過使用者自有記憶層,語音那條 800 毫秒的時鐘還是會把文字世界的習慣全部打回重練。

「語音 Agent 也需要記憶」當然正確,但真正殘酷的是下一句:語音記憶不是文字記憶加速版。它的時鐘緊到整條讀寫路徑都要倒過來設計。

Clawd 內心戲:

文字聊天像寄信,晚一秒還能說是系統在思考。語音聊天像兩個人面對面講話,停頓 800 毫秒就開始尷尬。記憶系統在文字介面是圖書館員,在語音介面比較像便利商店店員:客人話剛講完,資料最好已經在手邊,不能說「等一下,我去地下室查檔案」。

語音沒有等待的奢侈

文字 Agent 天生有緩衝。使用者打完字、看到載入圖示,等個一到三秒還算合理。這段空白可以塞很多工作:向量檢索、語意搜尋、摘要、重排、從過去對話挖相關片段。使用者早就被訓練成「打完字要等一下」。

語音沒有這個禮物。

語音 Agent 從使用者停止說話,到第一段音訊回來,通常希望落在 500 到 800 毫秒。這段時間還不是留給記憶系統爽爽用,而是 VAD、STT、記憶檢索、LLM 第一個 Token、TTS 第一段音訊,最後連音訊送到使用者耳邊的時間都要一起分:

先不要被縮寫嚇到。這裡其實只是在拆一通電話裡的「接球動作」:先判斷使用者講完了,再把聲音變文字,再找必要記憶,再讓模型開口,最後把文字變回聲音。每一段都很短,短到像在切一塊 800 毫秒的蛋糕,刀歪一點就沒了。

  • VAD 判斷使用者講完,大約 100 毫秒。
  • 串流 STT 送出最終文字稿,大約再 50 毫秒。
  • 記憶檢索插在中間,理想上只能吃 50 到 100 毫秒。
  • LLM 開始吐第一個 Token,大約 300 毫秒。
  • TTS 合成第一段音訊,大約 100 毫秒。
  • 音訊傳送也算在同一包延遲預算裡,不能假裝免費。

也就是說,記憶系統如果一上來就打一趟雲端向量資料庫,光網路來回就可能 20 到 80 毫秒。再加上向量化、近似最近鄰搜尋、重排、格式化,LLM 還沒看到 Prompt,記憶預算已經爆炸。Mem0 自家文件把語意搜尋描述成會依向量庫與基礎設施落在約 50 到 200 毫秒;另外兩個語音記憶整合案例則主打 P95 檢索低於 250 毫秒,單獨檢索的 P95 也可能低於 200 毫秒。這些數字對聊天產品很漂亮,對語音產品就是站在懸崖邊自拍。

換成白話:文字聊天可以慢慢去倉庫翻資料;語音電話只能伸手拿桌上的資料。任何需要「送出去、算一下、排一下、再送回來」的記憶動作,都不是不能做,而是最好別卡在使用者等回話的那一秒。

更不用說當輪摘要。LLM 摘要如果插在當輪回應前,可能吃掉 300 到 800 毫秒。這不是超時一點點,是整個語音回應預算被一口吞掉。

真正穩的路徑反而很無聊:本機快取或 Redis 做鍵值查詢,1 到 5 毫秒,預測性高,幾乎無感。

Clawd 畫重點:

向量資料庫在語音回應路徑裡常常像拿攻城器械處理桌上的小麻煩。器械很帥,問題也確實會消失,但校準、裝載、後座力一起來,整通電話的節奏也被轟爛了。(╯°□°)⁠╯ 語音 Agent 第一原則:會讓人聽到沉默的聰明,通常不如快速的笨。


語音輸入本身就比較髒

延遲只是第一刀。第二刀是輸入格式。

文字 Agent 拿到的是使用者整理過的句子。語音 Agent 拿到的是人類即興說話的殘酷現場:嗯、呃、講到一半重來、代名詞沒有指涉對象、前一句否定後一句修正。原本在聊天介面跑得很漂亮的事實抽取,搬到語音稿上可能開始亂記。

第三刀是每輪資訊密度。語音對話每一輪通常短、快、資訊密度低,大約 10 到 30 個英文詞。一通 10 分鐘電話很容易有 40 到 60 輪,文字稿大約 1500 到 2000 個 Token。聽起來不多,直到模型直接吃音訊。

OpenAI 即時語音 API 範例文件的說法很直白:同一句話,用音訊表示時,實務上常常會比文字多出約 10 倍 Token;同份文件也寫到 gpt-realtime 支援 32k Token 視窗。32k 看起來很大,但語音 Token 膨脹後,一通普通客服電話就可能把系統推到不舒服的位置。

第四刀最常被忽略:冷啟動。

聊天產品通常一開始就知道使用者是誰,因為有登入狀態。電話不一定。很多語音系統起手只有一組電話號碼,還要在前幾百毫秒內判斷來電者身份。任何預設「第一輪就知道使用者是誰」的記憶架構,在電話世界都很脆。比較健壯的設計會把未知來電者當成主路徑,而不是邊角案例。


三種真正重要的記憶

語音 Agent 的記憶可以拆成三層。這個切法很實用,因為每層的延遲要求、儲存方式、失敗代價都不同。它也對得上更廣的 Agent 記憶文獻:有些研究把演進講成儲存、反思、經驗;有些產品文件則切成核心記憶、回想記憶、封存記憶。名稱不同,但核心問題一樣:哪一些資訊要立刻在手上,哪一些可以慢慢查,哪一些應該變成長期經驗。

第一層是通話記憶。 這是目前通話中的逐字稿、輪次順序、當前上下文,通常住在 LLM 的 上下文視窗 裡。問題是長通話會比想像中更快撞到實務限制:實務上 4k 到 8k 的可用視窗可能很快就被塞滿,就算現代模型名義上支援 128k 以上 Token,也不代表可以把整段逐字稿硬塞進去。那會拖慢生成,注意力也會開始散掉。長上下文很像大冰箱,能塞很多東西,不代表每次找蛋都找得到。

第二層是通話事實。 這是當前通話中已經建立、後面還需要用到的工作記憶。例如來電者叫小雅、帳號是 4821、目前很生氣、正在處理某個未解決問題。這一層沒做好,Agent 五輪後又問一次名字,信任感會瞬間蒸發。電話裡的金魚記憶特別致命,因為使用者沒有聊天紀錄可回看,只會感覺「這客服是不是完全沒在聽」。

第三層是使用者檔案。 這是跨通話保存的長期資料:姓名、偏好、上次通話摘要、未結案件、關係脈絡。這一層做得好,回訪者會覺得被認得;做不好,每次都像重開遊戲新手村。

真正難的是中間兩層:如何在一通電話內抓住通話事實,又如何在多通電話之間讀寫使用者檔案,而且不能拖慢對話節奏。

Clawd 內心戲:

記憶不是越多越好。語音 Agent 亂記一堆沒用細節,效果像客服打開十個試算表分頁,然後在使用者面前一格一格找。聰明的記憶系統不是倉庫,是秘書:只把未來真的會改變回應方式的東西留下來。


四個問題決定整套架構

任何語音記憶架構最後都會回到四個問題。這一段最容易寫成架構報告,所以先把畫面拉回電話現場:每個問題其實都在問同一句話,到底誰要為那 800 毫秒負責?

什麼時候寫入? 可以每一輪對話後抽取事實,也可以通話結束後一次批次整理。通話後整理比較便宜,也比較乾淨,因為模型看得到完整脈絡。但電話很常異常中斷:WebRTC 連線掛掉、使用者直接掛電話、通話結束抽取失敗。只靠通話後整理,可能整通電話什麼都沒留下。多數正式上線的語音部署最後會接受成本,採用逐輪寫入,因為「通話紀錄整包遺失」是非常難看的失敗模式。

寫入什麼? 過濾問題可以很簡單:這個事實會不會改變未來通話的回應方式?不會,就只是噪音。使用場景越專門,過濾越要兇。一般助理可以讓 LLM 抽取比較泛用的記憶;醫療收案 Agent 應該寫進型別明確的資料格式,不符合格式的內容直接拒絕。

怎麼取回? 結構化的使用者檔案用鍵值查詢就好。過去通話這種情節式記憶,才需要語意檢索、圖譜或其他比較重的路徑。但重點仍然是:不要在使用者等回應的那一刻才做昂貴檢索。

工作在哪裡發生? 放在回應路徑裡、跟語音流程平行跑,或通話後再處理。語音世界的答案通常是:寫入平行做,讀取先預載,只有最小必要內容留在阻塞路徑上。

實務上會看到很多名字,但不用急著背。先抓住一件事:每種架構都只是在替電話現場分工,決定哪些記憶要在桌上、哪些可以放倉庫、哪些乾脆等客人掛電話再整理。


四種工具箱,不是四份考卷

接下來名字會變多,但這裡不是要讀者背架構考古。把它想成四個工具箱:第一箱管「這通電話現在講到哪」、第二箱管「把記憶交給外部服務」、第三箱管「把人與事整理成關係圖」、第四箱管「讓系統在電話之外慢慢反思」。名字只是品牌貼紙,真正要看的是每箱解哪個電話現場的痛。

第一種是 框架內建狀態。每個正經語音 Agent 框架都會在通話期間維持對話狀態,端到端語音 API 也會在自己那側保留通話上下文,通常還會內建截斷策略。這一層能處理「通話內」狀態,但通話結束就沒有了。它是地板,不是房子。

端到端語音模型把 STT、LLM、TTS 收進同一個有狀態的通話,可以直接解掉串接式管線本身的延遲問題,但不會自動解決長期記憶。OpenAI 的即時語音 API 有 32k Token 的通話限制;Google 的即時語音模型狀態也不是跨通話持久化的記憶系統。原本串接式管線外面需要接的讀寫架構,端到端模型外面還是要接。比較真實的好處是 多模態模型 能直接處理音訊,事實抽取不必完全依賴文字稿,這對語氣、停頓、情緒會影響回應的場景很重要。

第二種是 外掛式記憶服務。很多團隊起步會走這條路:把第三方記憶服務接進語音流程,設定使用者或實體 ID,讓它處理讀寫。先不用比較每個名字,核心形狀比較重要:它們通常在背景寫入,讀取則盡量預先載入。差異在底層用向量、圖、SQL,還有抽取事實時有多積極。電話現場只在乎一件事:這些服務不能每輪都讓使用者聽見等待。

第三種是 知識圖譜記憶。這一派最有意思,因為它改變的不只是查得快不快,而是「記憶」本身的形狀。傳統向量檢索像在一堆紙條裡找相似句;知識圖譜比較像把人、事件、偏好和時間寫成關係表。模型看到的不是三段鬆散對話,而是「阿明從 2024-01-15 起最喜歡某首老歌」這種結構化事實。

正式上線環境裡常見的是圖譜型記憶服務;學術上也有把每段記憶寫成類似 Zettelkasten 卡片的做法,新的記憶會更新舊記憶。翻成產品語言就是:系統不只記「阿明說過某件事」,還會在新資訊進來時改寫「阿明現在到底偏好什麼」。代價也很現實:圖譜更難除錯、更難淘汰舊資料、建置成本也比扁平向量索引高。但如果同一個使用者會跟語音 Agent 講好幾年電話,長期答案很可能在這裡。

第四種是 認知式架構。這一派不把記憶當資料庫,而是當認知過程。幾篇經典 Agent 記憶研究給出的形狀很像:先保留一條記憶流,再定期反思,最後用新近程度、重要性、相關性挑出值得帶回來的記憶。大家最愛抄的是反思,因為它讓 Agent 看起來不是鸚鵡複誦,而是真的逐漸理解一個人。

也有研究加入類似艾賓浩斯遺忘曲線,讓老舊且少用的記憶淡出;還有做法讓系統每輪決定要查記憶、先反思,還是直接回答。這些名字本身不是重點;可以偷的是三個習慣:定期反思、重要記憶加權、太久沒用的記憶慢慢降權。正式上線時,它們通常會接回前面那幾箱工具,而不是單獨變成一套魔法產品。


真正可行的模式:把讀寫路徑倒過來

語音記憶在正式上線環境裡反覆出現的有效模式,是把所有工作分成兩類:回應前必須完成的讀取,以及回應後才做的寫入。

回應前只留最必要的讀取,而且最好在通話開始前就預載。

電話接起來、WebRTC 連線、音訊初始化、編解碼協商,這些連線準備期間其實有幾百毫秒可用。這段時間應該拿來抓使用者檔案、上次通話摘要、未結案件,放進通話本地快取。第一輪真正到來時,所謂「記憶檢索」只是查一個已經在手邊的表,不是打一趟遠端服務。

冷啟動是這個設計的考驗。如果來電者匿名,系統沒有使用者專屬檔案可預載。這時只能在前一兩輪內完成身份確認,例如帳號、電話號碼查 CRM,或接受第一通電話上下文比較薄,並讓 Prompt 優雅處理未知身份。最常見的錯誤,是把已驗證來電者當正常路徑,把匿名來電者當例外。電話系統裡,匿名常常是熱路徑。

寫入則反過來:每次 Agent 回答完,就丟一個不用等結果的背景任務,從最新一輪抽取新事實並持久化。通話結束時,用 2 到 3 秒逾時上限等正在跑的任務收尾,因為使用者已經掛了,這時沒有回應延遲要守。最後再對完整逐字稿做一次總結,存成權威紀錄:這通電話在講什麼、是否解決、關鍵事實、後續追蹤。

這份通話摘要會成為下次預載的 last_interaction。它是語音記憶系統裡最被低估的產物。ChatGPT 與 Claude 的文字記憶系統也可以讀成同一種精神:檢索時,一份整理過的摘要,通常比原始逐字稿更好用。

Clawd murmur:

原始逐字稿像監視器錄影,什麼都有,但每次要找重點都痛苦。通話摘要像值班主管交接本:誰打來、氣在哪、事情卡哪、下次誰接手。語音 Agent 真正需要的是交接本,不是把整捲錄影帶塞進腦袋。


兩個上線後才會咬人的問題

第一個問題是預載可能跟上一通電話的寫回賽跑。

假設使用者上一通電話說「之後請稱呼 Alex」。逐輪抽取抓到了,正在寫入。結果下一通電話太快進來,預載讀到的是幾秒前的舊快照,Agent 開口又叫舊名字。這種錯比完全沒有記憶更糟,因為它看起來像系統記得,但記錯版本。

修法聽起來很直覺:永遠優先服務最新寫回,即使快照比較舊。但這種失敗模式往往要有真實使用者才會浮出來。

第二個問題是成本。逐輪抽取等於每一輪多一次 LLM 呼叫。以 40 到 60 輪的 10 分鐘電話來算,如果每輪抽取都要花幾美分,光抽取就可能到幾美元。高價值客服電話可以接受,免費消費者助理大規模跑起來會哭。

比較誠實的做法是:事實抽取用便宜的蒸餾模型,像 7B 到 8B 通常就夠;或把抽取改成較長的滑動視窗;低毛利場景則偏向通話後抽取。技術架構不能脫離商業模型,不然就是把成本藏在 Prompt 裡,月底帳單再出來復仇。


通話內歷史要壓縮,不要全塞

就算只看單通電話,也很快會撞到實務上的上下文限制。一般 10 分鐘通話文字稿大約 1500 到 2000 Token;原生語音通話又有音訊 Token 膨脹問題。名義上的大上下文視窗不等於可以無腦塞全部。

可行做法是 滑動視窗加摘要:最近 N 輪保留全文,更早的輪次壓成摘要。例如逐字稿到 20 輪時,非同步壓縮前 10 輪成 3 到 4 句。這種工作可以用小模型,像同機 GPU 上的蒸餾 1B 到 3B 模型,或 CPU 上微調過的摘要器。50 到 150 毫秒的壓縮延遲放在非同步流程可以接受,放在回應路徑就會變痛。

另一個槓桿是選擇性保留。不是每一輪都有價值。「好」「了解」「嗯嗯」這種低訊號回合幾乎沒有保存意義。簡單的長度與停用詞規則,或小分類器,就能丟掉很多噪音。逐字稿應該被整理,不是被當神主牌供起來。


長期情節式記憶要慢一拍

結構化的使用者檔案,例如姓名、偏好、已知案件,用鍵值儲存是正解。無聊、快速、可預測,這種無聊很珍貴。

非結構化的情節式記憶就不同了。過去某通電話的細節、歷史互動、特定脈絡,遲早需要語意檢索。但問題不是要不要檢索,而是什麼時候檢索。答案仍然是:不要在使用者等回應時檢索。

可行模式是 背景相關性準備。系統維護目前對話主題的表示方式,實務上可能是最近一兩輪使用者話語合成一個查詢向量,再加上一個小分類器產生的主題標籤。每 3 到 5 輪,或主題向量明顯漂移時,非同步去過去對話裡查相關內容。找到的內容不是塞進當前回合,而是先暫存,下一輪再注入上下文。

這會讓情節式上下文慢一拍,但通常是對的取捨。使用者不太會注意 Agent 晚一輪提到過去對話;但每輪多停 200 毫秒,電話另一端一定會感覺到。

真正麻煩的是快速轉換主題。使用者每一輪都轉彎,暫存好的檢索結果就會一直過期。務實修法是用便宜方式偵測主題轉移,例如連續查詢向量的餘弦相似度大幅下降,就走「沒有情節式上下文」路徑。過期上下文比沒有上下文更糟,因為它會讓 Agent 很有自信地講昨天的事。


睡眠時計算:把整理工作移到通話之外

逐輪寫入加通話結束摘要可以處理基本盤。更進階的做法,是在通話之間、系統閒置時做記憶整併。

這種做法可以稱為睡眠時計算:另外開一個背景 Agent,跟面向使用者的 Agent 共享記憶區塊,在背景整理、合併、重組記憶。相關論文頁面提到,在選定評測上,睡眠時計算可以用約 5 倍較少的 測試時運算 成本達到相同準確率,並在可預測查詢上帶來 13% 到 18% 準確率提升。這些是論文在特定任務上的數字,不應直接拿來保證語音產品成效。對電話系統來說,重點簡單很多:白天不要邊接客邊整理倉庫,晚上整理好,明天查起來就順。

同一條線索也出現在 SP-191:Claude Dreams 怎麼整理 Agent 記憶垃圾山:文字 Agent 可以離線清理記憶;語音場景的限制更尖,因為白天多停 200 毫秒,使用者就會聽見那個尷尬。

語音情境的直覺很簡單:逐輪寫入會累積成一條事實流水帳。幾週、幾個月後,裡面一定會有重複、矛盾、過期資訊。例如「使用者偏好電子郵件」跟「使用者要求改成電話聯絡」同時存在。夜間整併可以合併重複、用較新的訊號解決矛盾、刪掉低重要度記憶,甚至整理出更高階的判斷,例如「這位使用者通常是在東西壞掉時才打來,不是來問一般問題」。

這對語音特別重要,因為這類整理絕對不能放在回應路徑。睡眠時計算是整個架構唯一幾乎沒有延遲預算壓力的地方。白天電話裡不該做的事,晚上慢慢做。


乾淨訊號:逐字稿與多人說話

前面所有設計都有一個隱含前提:記憶管線拿到的輸入還算乾淨。現實通常不是。

第一個問題是逐字稿髒。使用者會停頓、重啟句子、說「那個上次講的東西」。原始逐字稿很容易讓事實抽取變吵。解法是一個輕量的逐字稿清理步驟:移除語助詞和口吃式重啟,正規化指涉,然後再送進記憶管線。這一步非同步跑,不碰回應流程。LLM 回應仍看原始逐字稿,因為清理會加延遲;記憶抽取才看清理後版本。

第二個問題更麻煩:房間裡常常不只一個人。

家裡打客服電話時,旁邊可能有配偶或小孩;醫療電話可能有照護者在場;小公司打進客服時,也可能有人從辦公室另一端補充資訊。說話者分離,也就是分辨誰說了什麼,會直接影響記憶準確度。沒有說話者分離,事實抽取器可能把「來電者配偶討厭現在方案」寫進來電者檔案。下次 Agent 自信地提起這件事,信任感當場裂開。

開源工具與較新的 LLM 輔助系統都在改善重疊語音,但即時分辨說話者的成本很真實,阻塞路徑每輪可能多 200 到 400 毫秒。因此,多數正式上線的語音 Agent 不會在即時路徑裡做這件事。

比較能落地的折衷是:通話中接受一定歸因噪音;通話後對錄音非同步跑說話者分離,再把事實歸到正確說話者後持久化。這種錯誤不一定常發生,但一旦發生會很傷,所以系統至少要有應對故事。


三層正式上線架構

把整篇拼起來,語音記憶系統不是按資料類型分層,而是按延遲分層。

第一層:熱快取,1 到 5 毫秒。 通話開始時預載,內容包含使用者檔案、上次通話摘要、未結案件。它住在行程記憶體裡,服務每一輪幾乎即時查詢。

第二層:背景檢索,50 到 150 毫秒,非同步。 在回合之間做情節式搜尋,結果先暫存,下一輪再注入。它永遠不阻塞回應。

第三層:非同步寫入,延遲不重要。 事實抽取、使用者檔案更新、通話結束摘要、睡眠時計算的記憶整併都在這裡。每輪之後、通話之後、系統閒置時處理,餵回第一層給下一通電話使用。

核心不對稱非常清楚:阻塞路徑上只剩快取查詢。 向量化、檢索、摘要、寫回、整併這些昂貴工作,全都被推到回合之間、通話之後,或系統閒置時。

Clawd 想補充:

這套架構的精神很像餐廳備料。客人點菜時才開始洗米、切菜、熬高湯,廚師再神也會被客訴。語音 Agent 的記憶也是一樣:該熬的湯在前一天晚上熬,現場只負責舀。


研究座標,不要讀成書單

語音記憶不是單點經驗談,背後其實踩著一串 Agent 記憶研究。但這一串不該讀成書單。讀成書單就會開始數名詞;讀成四個老問題,才會回到電話裡那個 800 毫秒。

第一個問題:長上下文真的能救一切嗎? 經典的長上下文研究答案是不能。模型就算名義上吃得下很長輸入,也不保證能穩定抓到中間那段關鍵資訊。這解釋了為什麼語音 Agent 不能把整通電話逐字稿當成萬靈丹硬塞進去。

第二個問題:記憶要怎麼像經驗,而不是像資料夾? 認知式 Agent 研究給了一個經典答案:記憶流、定期反思,再用新近程度、重要性、相關性幫候選記憶打分。另一條研究線接上遺忘曲線,提醒系統不是只有記住,也要懂得讓舊記憶淡出。

第三個問題:正式上線時要怎麼查、怎麼寫? 有些系統代表可產品化的記憶層;有些研究把記憶寫成會互相更新的卡片網路;也有做法讓系統每一輪決定要查記憶、先反思,還是直接回答。這些名字各自很硬,但放在語音場景裡,核心都在問同一件事:哪個記憶值得現在拿,哪個記憶可以晚點整理。

第四個問題:整理工作能不能移到通話之外? 睡眠時計算說可以,另一份綜述則把整條演進整理成一句話:好的 Agent 記憶不是倉庫容量競賽,而是把原始紀錄慢慢變成可用經驗。

下一個自然問題是語音 Agent 評估,因為一般 LLM 評測與長記憶評測,通常抓不到語音實務部署裡最痛的東西:每輪多停 200 毫秒造成的遲疑感、錯把旁邊的人當成使用者、前一通電話寫入還沒完成就被下一通讀到。語音 Agent 的評估不能只問答對幾題,還要問「節奏有沒有像真人」。


結語

語音 Agent 的記憶仍然沒有被完全解決。跨很多次對話、像人一樣自然回想的能力,還是很難。但工程基礎已經很清楚:快取、非同步抽取、結構化使用者檔案、通話後摘要、知識圖譜、睡眠時計算的記憶整併,都已經是今天可以做的東西。語音 Agent 框架加上外部記憶服務,也讓團隊不必從零手刻讀寫迴圈。

真正的手藝不在「把資料存起來」,而在判斷什麼值得記、什麼時候拿出來、怎麼講得像理解脈絡,而不是照著檔案唸。這件事靠的是 Prompt 設計、記憶篩選與嚴格整理,不是更大的向量資料庫。

最後那句可以直接刻在語音 Agent 架構圖旁邊:

In a voice agent, the speed of memory is set by what you have already prepared, not by what you can fetch in the moment.

在語音 Agent 裡,記憶的速度不是取決於當下能抓多快,而是取決於前面準備得多好。

電話那端的沉默,不會等架構師解釋。