&lt;?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Stan Wu 吳信典</title><link>https://blog.stanwu.org/tags/agent/</link><description>拆解被包裝過的東西、數位自主權實踐、非典型理財觀</description><language>zh-TW</language><lastBuildDate>Tue, 14 Apr 2026 21:50:30 +0800</lastBuildDate><atom:link href="https://blog.stanwu.org/tags/agent/feed.xml" rel="self" type="application/rss+xml"/><item><title>從文言文到 AST：AI Agent Memory 語義壓縮的可行性分析</title><link>https://blog.stanwu.org/posts/wenyan-to-ast-ai-memory-compression/</link><pubDate>Tue, 14 Apr 2026 00:01:00 +0800</pubDate><guid>https://blog.stanwu.org/posts/wenyan-to-ast-ai-memory-compression/</guid><description>&lt;p&gt;古代人刻竹簡、抄手稿，每個字的儲存成本都極高。這個物理限制直接塑造了文言文的語言風格——用最少的字，傳遞最密集的語意。&lt;/p&gt;
&lt;p&gt;這不只是文化，是工程決策。&lt;/p&gt;
&lt;p&gt;當我開始思考 AI agent 的 memory 管理問題，這個古老的邏輯突然變得非常現代。&lt;/p&gt;
&lt;h2 id="文言文是一種有損壓縮格式"&gt;文言文是一種有損壓縮格式&lt;/h2&gt;
&lt;p&gt;從資訊理論的角度看，文言文是一套&lt;strong&gt;高壓縮比、高解碼成本&lt;/strong&gt;的編碼系統。&lt;/p&gt;
&lt;p&gt;竹簡有重量，有體積，刻寫需要工時。這些都是實體成本。當儲存成本極高時，語言會朝向低熵方向演化：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;虛詞能省則省&lt;/li&gt;
&lt;li&gt;語境依賴極重（解碼需要大量背景知識）&lt;/li&gt;
&lt;li&gt;歧義換取密度（讀者端承擔解壓縮負擔）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;對比白話文：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;文言文&lt;/th&gt;
&lt;th&gt;白話文&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;壓縮率&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;自解釋性&lt;/td&gt;
&lt;td&gt;低（需訓詁）&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;儲存成本&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;解碼門檻&lt;/td&gt;
&lt;td&gt;高&lt;/td&gt;
&lt;td&gt;低&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;有趣的是，活版印刷大幅降低了複製成本，照理說語言應該走向白話——但文言文仍然主導書面世界數百年。因為&lt;strong&gt;寫作者的習慣與社會認可機制的慣性，遠比技術變革的速度慢&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;白話文運動最終發生，更多是政治與教育普及的需求，而非技術成本。&lt;/p&gt;
&lt;p&gt;這個觀察本身就是一個警示：即使最優解存在，系統切換的成本可能讓它長期無法落地。&lt;/p&gt;
&lt;h2 id="token-是現代的竹簡"&gt;Token 是現代的竹簡&lt;/h2&gt;
&lt;p&gt;AI agent 每次被呼叫，都需要把 memory 塞進 context window。Token 是直接成本：計費、速度、context 容量，都和 token 數量正相關。&lt;/p&gt;
&lt;p&gt;現有的 memory 格式大多長這樣：&lt;/p&gt;
&lt;blockquote class="callout callout-note"&gt;
&lt;div class="callout-title"&gt;memory 範例：prose 格式&lt;/div&gt;
&lt;div class="callout-body"&gt;
&lt;p&gt;&lt;strong&gt;name:&lt;/strong&gt; 回應風格偏好
&lt;strong&gt;type:&lt;/strong&gt; feedback&lt;/p&gt;
&lt;p&gt;使用者偏好簡潔回應，不喜歡在結尾加摘要總結。
&lt;strong&gt;Why:&lt;/strong&gt; 他說他可以自己讀 diff，不需要 AI 重複說明已完成的事。
&lt;strong&gt;How to apply:&lt;/strong&gt; 每次回應結尾不要加「以上是本次修改的摘要」之類的段落。&lt;/p&gt;
&lt;/div&gt;
&lt;/blockquote&gt;&lt;p&gt;這是白話文。結構清晰，人讀得懂，但對機器來說充滿冗餘。&lt;/p&gt;
&lt;p&gt;如果我們用文言文的邏輯重新設計：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;no-trailing-summary; trigger=response_end; reason=user_reads_diff
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同樣的語意，token 省了 70% 以上。&lt;/p&gt;
&lt;h2 id="關鍵洞察memory-的唯一讀者是-ai-agent"&gt;關鍵洞察：memory 的唯一讀者是 AI agent&lt;/h2&gt;
&lt;p&gt;這裡有一個根本性的問題值得釐清：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;memory 是為誰而寫的？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;傳統 memory 設計預設「人需要能讀懂」，所以用完整句子、加 Why 說明、保留上下文。但仔細想，memory 的實際讀者是 agent 本身。人審查 memory 是偶發需求，不是主流路徑。&lt;/p&gt;
&lt;p&gt;這意味著：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;human-readable 在大多數情境下是&lt;strong&gt;偽需求&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;壓縮的唯一硬性約束是：&lt;strong&gt;agent 能 100% decode&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;其餘的可讀性成本，都是在為一個低頻需求買單&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這個邏輯和 LLM embedding 是一樣的：向量記憶體對人完全不可讀，但 agent 的 retrieve 語意還原率反而更高。文字 memory 之所以還在用，是因為人需要 audit 能力，而不是因為它對機器更好。&lt;/p&gt;
&lt;h2 id="從-ast-借鑑結構化表示"&gt;從 AST 借鑑結構化表示&lt;/h2&gt;
&lt;p&gt;這時候自然會想到 AST（Abstract Syntax Tree，抽象語法樹）。&lt;/p&gt;
&lt;p&gt;在編譯器領域，AST 是把原始碼轉成**結構化中間表示（IR）**的標準手法。原始碼是給人讀的（高冗餘），AST 是給編譯器處理的（結構化、可操作）。&lt;/p&gt;
&lt;p&gt;把這個概念移植到 memory：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;flowchart TD
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; A[&amp;#34;自然語言 memory（原始碼）&amp;#34;] --&amp;gt;|encode| B[&amp;#34;AST memory node（IR）&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; B --&amp;gt;|retrieve + decode| C[&amp;#34;agent 行為&amp;#34;]
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;具體長這樣：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;behavior_rule&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;trigger&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;context&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;response_end&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;suppress&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;summary&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;condition&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nt"&gt;&amp;#34;user_action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;reads_diff&amp;#34;&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;confidence&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mf"&gt;0.95&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;raw&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user reads diff directly, finds summaries redundant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ast-相對於-prose-memory-的優勢"&gt;AST 相對於 prose memory 的優勢&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;可 diff&lt;/strong&gt;：兩條 rule 衝突時，agent 比較節點而非解析自然語言，衝突偵測可以程式化。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可 merge&lt;/strong&gt;：新 observation 進來時，patch 特定節點而非整段重寫，incremental update 成本低。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可 query&lt;/strong&gt;：&lt;code&gt;trigger.context == &amp;quot;response_end&amp;quot;&lt;/code&gt; 精確 retrieve，不依賴語義相似度，查詢結果確定。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可繼承&lt;/strong&gt;：子節點 override 父節點，類似 CSS cascade，可以做 context-specific 的行為覆寫。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;可版本化&lt;/strong&gt;：節點帶 schema version，memory 格式演化時可以做 migration 而非全部重寫。&lt;/p&gt;
&lt;h2 id="這個設計的根本張力"&gt;這個設計的根本張力&lt;/h2&gt;
&lt;p&gt;AST 設計看起來很美，但有一個繞不開的核心問題：&lt;/p&gt;
&lt;h3 id="張力一固定-schema-vs-表達彈性"&gt;張力一：固定 schema vs 表達彈性&lt;/h3&gt;
&lt;p&gt;程式語言的 AST 有嚴格 grammar，語義確定。Memory 的 schema 需要人工設計，而觀察的種類是開放的——你無法預先定義所有可能的 node type。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed ontology：查詢效率高，但遇到 schema 外的觀察無處放&lt;/li&gt;
&lt;li&gt;Emergent schema：表達彈性高，但查詢一致性差&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;這是一個目前沒有標準答案的開放問題。&lt;/p&gt;
&lt;h3 id="張力二壓縮率-vs-decode-完整性"&gt;張力二：壓縮率 vs decode 完整性&lt;/h3&gt;
&lt;p&gt;文言文的問題是「解壓縮密鑰丟失後語義崩潰」。過度壓縮的 memory：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;換模型或換 session 可能 decode 失敗&lt;/li&gt;
&lt;li&gt;Edge case 無法判斷適用性&lt;/li&gt;
&lt;li&gt;encode 錯誤無聲無息傳播&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;最優解不是最大壓縮，而是「&lt;strong&gt;剛好能讓同等智力的讀者正確 decode 的最小表達&lt;/strong&gt;」——這其實也是文言文的設計目標，只是它的「同等智力讀者」預設了四書五經作為共同解碼器。&lt;/p&gt;
&lt;p&gt;AI agent 的「共同解碼器」是 pre-training，這個基礎是穩定的，但並非無限可靠。&lt;/p&gt;
&lt;h3 id="張力三auditability-vs-壓縮上限"&gt;張力三：auditability vs 壓縮上限&lt;/h3&gt;
&lt;p&gt;如果完全移除「人要能審查」的約束，理論上可以讓 agent 自己設計一套極度壓縮的內部語言，壓縮率可以趨近理論上限。但你同時失去了：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;偵測 encode 錯誤的能力&lt;/li&gt;
&lt;li&gt;理解 agent 行為的能力&lt;/li&gt;
&lt;li&gt;手動修正錯誤 memory 的能力&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;auditability 的要求，決定了壓縮的上限。&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="hybrid-格式務實的折衷"&gt;Hybrid 格式：務實的折衷&lt;/h2&gt;
&lt;p&gt;考慮以上三個張力，純 AST 和純 prose 都不是最優解。Hybrid 格式更接近實際可落地的方向：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;behavior_rule&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;trigger&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;response_end&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;action&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;suppress_summary&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nt"&gt;&amp;#34;raw&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;user reads diff directly, finds summaries redundant&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;結構化 header 負責 routing 和 query，&lt;code&gt;raw&lt;/code&gt; 欄位保留自然語言作為 decode 邊界情況的 fallback。&lt;/p&gt;
&lt;p&gt;這類似文言文後來發展出的注疏傳統——正文高度壓縮，注疏提供解碼上下文，兩者合讀才是完整資訊。&lt;/p&gt;
&lt;h2 id="python-作為統一引擎"&gt;Python 作為統一引擎&lt;/h2&gt;
&lt;p&gt;如果要實作這個 memory 系統，Python 是自然的選擇。&lt;/p&gt;
&lt;p&gt;更進一步，可以設計&lt;strong&gt;單一引擎、雙介面&lt;/strong&gt;的架構：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-gdscript3" data-lang="gdscript3"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;memory_engine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;├──&lt;/span&gt; &lt;span class="n"&gt;CLI&lt;/span&gt; &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="err"&gt;←&lt;/span&gt; &lt;span class="n"&gt;Bash&lt;/span&gt; &lt;span class="k"&gt;tool&lt;/span&gt; &lt;span class="err"&gt;直接呼叫&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;memory_engine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;encode&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;...&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;memory_engine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;response_end&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;memory_engine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;merge&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;node_id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt; &lt;span class="n"&gt;python&lt;/span&gt; &lt;span class="n"&gt;memory_engine&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;py&lt;/span&gt; &lt;span class="n"&gt;audit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;│&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="err"&gt;└──&lt;/span&gt; &lt;span class="n"&gt;Skill&lt;/span&gt; &lt;span class="n"&gt;interface&lt;/span&gt; &lt;span class="err"&gt;←&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="err"&gt;透過&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="err"&gt;觸發&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="err"&gt;複合操作、判斷&lt;/span&gt; &lt;span class="n"&gt;subcommand&lt;/span&gt;&lt;span class="err"&gt;、串接多個操作&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;同一份邏輯，兩個 entry point，DRY 原則。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="vm"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;__main__&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;argparse&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ArgumentParser&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;command&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;encode&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;query&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;merge&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;audit&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_argument&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;input&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;nargs&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;&amp;#34;?&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;parser&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;parse_args&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;globals&lt;/span&gt;&lt;span class="p"&gt;()[&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;input&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="nb"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ensure_ascii&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="kc"&gt;False&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;encode 時需要 LLM 做語義解析，這裡有一個設計選擇：由 Python 內部發 API call，還是由 agent 自己解析後把結果傳給 script？前者讓引擎更自治，後者讓引擎更確定性。這個選擇影響整個依賴架構，值得獨立討論。&lt;/p&gt;
&lt;h2 id="可行性小結"&gt;可行性小結&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;面向&lt;/th&gt;
&lt;th&gt;結論&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;基本邏輯&lt;/td&gt;
&lt;td&gt;成立。memory 本來就是給 agent 讀的，改成更結構化、更省 token 的格式是合理方向&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;實作難度&lt;/td&gt;
&lt;td&gt;可控。LLM 已經能穩定輸出 structured output，Python 也足夠處理 encode、query、merge、audit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;主要風險&lt;/td&gt;
&lt;td&gt;encode 錯誤傳播、schema 太硬、壓得太短導致 agent decode 失敗&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;需要取捨的地方&lt;/td&gt;
&lt;td&gt;壓縮率、可讀性、可審查性三者不可能同時最大化&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;可參考方向&lt;/td&gt;
&lt;td&gt;MemGPT、Knowledge Graph + LLM、Minimum Description Length（MDL）&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;核心結論&lt;/strong&gt;：方向可行，但不適合一開始就追求極限壓縮。比較務實的做法，是先用 hybrid 格式保留必要上下文，再逐步把穩定、重複出現的 memory 壓成結構化節點。&lt;/p&gt;
&lt;h2 id="後記"&gt;後記&lt;/h2&gt;
&lt;p&gt;文言文撐了兩千年，不是因為它最好讀，而是因為它在當時的成本結構下是最優解。當成本結構改變（印刷術、白話文運動），語言才真正轉型。&lt;/p&gt;
&lt;p&gt;AI memory 目前的「白話文」格式，是在 context window 相對充裕、token 成本可接受的前提下成立的。當 agent 開始大規模運作、memory 數量指數成長，成本結構會變，最優解也會跟著變。&lt;/p&gt;
&lt;p&gt;現在思考壓縮，不是為了立刻重寫所有 memory，而是為了在成本結構改變的時候，不用從零開始想。&lt;/p&gt;</description></item></channel></rss>