About

Something can't be found in first page of Google search

Monday, April 6, 2026

AI (Claude) 怎麼運作:給有 CS 背景但不寫程式的人的操作型定義

AI 怎麼運作:給有 CS 背景但不寫程式的人的操作型定義

用系統思維理解現在的大型語言模型
by Claude and Human


定義與範疇說明

本文所稱的「AI」,專指 Anthropic 對外公開提供的 AI 服務,涵蓋兩個產品:

  • claude.ai:網頁與行動端的對話介面,一般使用者透過瀏覽器或 App 與 Claude 模型互動的入口。
  • Claude Code:以命令列為核心的開發者工具,讓使用者在終端機環境中將程式碼任務委派給 Claude 執行。

兩者底層共用同一系列的 Claude 語言模型(如 Claude Sonnet、Opus、Haiku),但在工具呼叫能力、記憶管理、操作介面上有明顯差異,本文會在適當之處加以區分。

本文不涉及 OpenAI、Google、Meta 等其他廠商的 AI 產品,亦不討論透過 Anthropic API 自行建置的第三方應用。所有操作型定義均以 2026 年 4 月 Anthropic 公開服務的實際架構為準。不過,本文描述的核心運作原理——無狀態推論、上下文視窗、工具呼叫——同樣適用於同代的其他主流 LLM(GPT、Gemini 等),差異主要在實作細節與產品包裝。


一、AI 的本質:一個沒有記憶的函數

現今的 AI(以大型語言模型 LLM 為代表)在操作層面,其實就是一個無狀態的數學函數

f(輸入文字) → 輸出文字

每一次呼叫都是獨立的。模型沒有記憶、沒有意識、也沒有在「背景執行」。當你不跟它說話,它根本不存在。它的實體是大量浮點數組成的權重檔案——呼叫時載入、推論、輸出、停止。

這不是缺陷,這是架構本身的設計。所有「像人一樣」的行為,都是外層系統疊出來的幻覺。

值得注意的是,這個無狀態設計並非唯一可能的選擇,它的形成至少有三股力量共同作用:

Transformer 的架構本質。 Transformer 在設計上就是對一段固定長度的序列做注意力計算,天然適合「給我一個完整輸入、我給你一個完整輸出」的批次推論模式。有狀態的設計在理論上並非不可行,但需要額外的工程投入,與模型的原始訓練方式也不一致。

二十年網路服務的路徑依賴。 自 REST 架構在 2000 年代初期確立以來,無狀態、可水平擴展的後端服務就成為網路產業的預設正確答案。這套基礎設施(負載均衡、CDN、Kubernetes 等)都是為無狀態服務優化的。當 LLM 推論需要大規模部署時,直接套用這套成熟架構是阻力最小的路徑。

ChatGPT 的初始實作定錨。 2022 年底 ChatGPT 公開發布時,採用的就是「每輪把完整對話歷史重送」的設計。這個實作選擇快速成為整個產業的事實標準——後進者在 API 設計、開發者工具、使用者期待上,都不自覺地向它對齊。路徑依賴在此又疊加了一層。

因此,當前的無狀態設計是架構取捨、產業慣性與早期市場定錨三者共同鎖定的結果,而非純粹的技術必然。


二、「對話記憶」是怎麼來的?

你以為 AI 記得你說過什麼,其實是客戶端(瀏覽器、App、API)在每一輪對話時,把整段歷史記錄打包重送給模型。

第 1 輪:[系統提示] + [你的訊息]
第 2 輪:[系統提示] + [你的訊息] + [AI 回應] + [你的新訊息]
第 3 輪:[以上全部] + [你的又一則訊息]

模型每次看到的是一份越來越長的文件,然後預測「接下來最可能出現的文字」。所謂的「記憶」,是客戶端維護的對話陣列,不是模型本身記住了什麼。

關鍵認知:你在對話框裡感受到的連貫性,是 UI 層的工程,不是 AI 的內在狀態。


三、Context Window:模型的工作記憶上限

模型在單次推論中能「看到」的全部內容,稱為 Context Window(上下文視窗)。這是它的工作記憶——超出就看不到了。

  • 目前主流模型約 200K~1M tokens(1 token ≈ 0.75 個英文字;中文則反過來,1 個中文字 ≈ 1~1.5 tokens,視用字而異)
  • 當視窗快滿,系統會進行壓縮(Compaction):把前面的對話摘要成更短的版本,再繼續
  • 壓縮是有損的——你早先無意間決定的事情,可能在壓縮後消失

實務含義:重要的指令、背景資訊,應該存在外部持久層(檔案、設定),而不是只說過一次就算數。

另一個少有文件記載的現象是:Context Window 存在一個「甜蜜點」,塞太少或塞太滿都不是最佳狀態。普遍的使用者經驗顯示,當上下文接近上限時,模型對視窗中段的內容注意力會下降(俗稱「中間遺失」問題);但視窗過空時,模型又缺乏足夠的背景做出準確判斷。甜蜜點的位置因模型版本而異,且會隨每次模型更新悄悄位移。

目前 Anthropic 並未就此發布正式操作準則。現有的參考依據主要來自兩個管道:一是重度使用者在論壇、社群的非正式分享(通常帶有強烈的個人使用情境偏差);二是各種基準測試的間接推算,但這些測試設計本身也存在爭議。換句話說,在正式文件跟上實際模型能力之前,這個甜蜜點只能靠口耳相傳和自己踩雷來校準

還有一個常見的直覺陷阱:**「Context Window 這麼大,把整本書丟進去翻譯一次,應該可以吧?」**表面上推算成立——一本 20 萬字的中文書約 30 萬 tokens,看起來塞得進 1M 的視窗。但實際上有兩道牆擋在前面:

技術層面有三道牆,不只是帳面上的 max_tokens 上限:

第一道:輸出長度硬上限。 以 2026 年 4 月的 Claude 為例,同步 API 單次呼叫的輸出上限為 64K(Sonnet)至 128K(Opus)tokens;批次 API 可延伸至 300K tokens。一本 20 萬字中文書的譯文同樣約 30 萬 tokens,帳面上似乎勉強塞得進批次 API——但這只是第一道牆。

第二道:輸出品質隨長度衰退。 即使帳面上限夠用,模型在長篇生成過程中會出現可觀察到的品質下降——重複用語、前後不一致、遺漏先前建立的脈絡。這不是偶發 bug,而是當前架構的結構性限制:隨著已生成的內容佔據越來越多上下文視窗,模型對早期內容的注意力會下降(與前述「中間遺失」問題同源)。實務上,即使用最高規格的付費方案,連續生成超過數萬 tokens 後品質就會明顯滑坡。

第三道:政策與速率限制。 Anthropic 在服務條款與速率限制上對超大輸入/輸出有額外門檻,部分行為(如批次長文處理)在 claude.ai 介面層也刻意設限,需走付費 API 或企業方案。

換句話說,帳面上限、實際品質上限、商業政策上限是三個不同的數字,而你真正能用的是三者中最小的那個。全書單次翻譯目前不是一個可直接操作的功能,而是需要分段、編排、品質校驗、後處理的工程問題。


四、工具(Tools)與 Agent:讓 AI 能執行動作

純粹的 LLM 只能輸出文字。讓 AI 能「做事」的方式是給它工具定義——一組結構化的 JSON Schema,描述它可以呼叫的功能。

流程如下:

  1. 模型讀到工具的自然語言描述,判斷該不該呼叫
  2. 模型輸出一個結構化的「呼叫請求」
  3. 外部程式(不是模型)執行實際邏輯
  4. 結果回傳給模型,模型繼續推論

模型不執行程式碼,它只輸出「要叫誰做什麼」的指令。 真正執行的是外圍系統。

Agent 是什麼?

Agent = 模型 + 工具執行器 + 迴圈控制器

把上面的流程放進一個迴圈:模型推論 → 呼叫工具 → 結果回填 → 模型再推論 → 直到產出最終回應。這個系統整體就稱為 Agent。模型本身仍然是無狀態的;「自主性」是迴圈賦予的,不是模型內建的。


五、多個實例之間:沒有心靈感應

每一個對話視窗、每一次 API 呼叫,都是完全獨立的實例。它們唯一能共享的是檔案系統——透過讀寫同一份檔案來傳遞資訊。

實例 A 的上下文 ──────────────────────┐
實例 B 的上下文 ──────────────────────┤  彼此不相通
實例 C 的上下文 ──────────────────────┘
         │
         └── 共同的檔案系統(唯一的真實共享狀態)

這對架構設計有直接影響:如果你想讓多個 AI 流程協作,溝通媒介必須是明確的外部儲存,而非期待它們「感知彼此」。

用 Unix 管線類比:兩個程序可以透過 stdin/stdout 串接。在 claude.ai 的網頁介面中,實例之間沒有管線;但 Claude Code(命令列工具)透過 -p 旗標,可以真正作為 Unix 管線的一環運作——從 stdin 讀入、結果寫到 stdout:

# 傳統 Unix 管線
$ process_A | process_B

# Claude Code 可以直接參與管線(-p 旗標 = 非互動模式,stdin in / stdout out)
$ cat code.py | claude -p "review this code" | claude -p "turn the review into a checklist"

# 實務範例:把 git diff 餵給一個實例做分析,再串給下一個實例產出文件
$ git diff main | claude -p "summarize changes" > /tmp/summary.txt
$ cat /tmp/summary.txt | claude -p "write release notes from this summary"

# 也可以一行串完,每個 claude -p 都是獨立的無狀態實例
$ grep -rn "TODO" src/ | claude -p "prioritize these TODOs" | claude -p "format as markdown table"

但即使有了管線能力,每個 claude -p 呼叫仍然是獨立的無狀態實例——前一個實例的上下文不會自動帶到下一個,傳遞的只有 stdout 的文字內容。

對於不支援管線的場景(例如 claude.ai 網頁介面、多個並行實例協作),溝通方式退回到檔案系統:

# 虛擬碼:透過檔案系統協調多個實例
實例 A:讀取任務 → 推論 → 將結果寫入 /shared/output_A.json
實例 B:讀取 /shared/output_A.json → 推論 → 將結果寫入 /shared/output_B.json

關鍵認知:不論是 CLI 管線還是檔案中繼,每個實例都是無狀態的。管線讓串接更優雅,但本質沒變——AI 不記得上一個實例做了什麼,它只看到這次收到的輸入。


六、記憶的四個層次

層次 存活範圍 特性
上下文視窗 單次對話 最快、最直接;壓縮後有損失,對話結束即消滅
明確指令層(如 CLAUDE.md) 跨對話持久 每次對話開始時注入;必須保持精簡,因為會消耗 token
自動記憶(Auto-memory) 跨對話持久 AI 自己摘要寫入,下次啟動時載入前 N 行
檔案系統 永久 唯一真正共享的狀態;所有實例、所有工具都能存取

越高層越快,越低層越確定。設計系統時,要清楚每一條關鍵資訊該放在哪一層。


七、確定性層:從「AI 判斷」到「系統保證」

LLM 有一個根本特性:它的行為是機率性的,不是確定性的。「告訴 AI 記得做某件事」,本質上是在做機率賭注。

要把特定行為從 AI 判斷層移到確定性層,可以使用:

  • Hooks(生命週期鉤子):在 AI 執行前後觸發固定的 shell 指令,不經過 LLM 判斷
  • 排程(Cron):時間觸發,完全確定性
  • 檔案監控:事件觸發,確定性接近系統層級

確定性由高到低:

最確定:  檔案系統事件、Hooks(shell 指令)、排程器
較不確定:工具呼叫(LLM 決定何時用)
最不確定:用自然語言叫 AI「記得去做某事」

設計原則:把必須發生的事放到確定性層;把需要判斷和推理的事留給 LLM 層。


八、MCP:外部工具的標準協定

MCP(Model Context Protocol)是讓 AI 連接外部工具的標準介面。架構上類似 REST API,但方向相反——永遠由 AI 主動發起呼叫,外部工具無法主動推送訊息給 AI。

要實現「事件驅動」行為(例如有新郵件時 AI 自動處理),觸發機制必須在 MCP 之外——排程器、webhook、檔案監控——由這些機制去啟動一個新的 AI 實例。

MCP 解決了工具定義的互通性問題:同一個工具伺服器,可以被不同的 AI 客戶端使用。


九、一張圖理解整體架構

你的輸入(自然語言)
        ↓
[客戶端] 組合整段對話歷史 + 系統提示 + 工具定義
        ↓
[LLM 推論] 無狀態函數,token in → token out
        ↓
輸出:純文字 or 工具呼叫指令
        ↓(若為工具呼叫)
[外部執行器] 執行實際動作(讀檔、搜尋、呼叫 API…)
        ↓
結果回填至上下文 → 重新推論
        ↓(重複直到輸出純文字)
你看到的最終回應

十、隱藏成本:你燒掉的 token 遠多於你看到的

前面的架構圖揭示了一個不直覺的經濟現實:你最終看到的有用輸出,只是整個推論過程中消耗的 token 的極小比例。

每一輪互動,系統都在重送完整的對話歷史、系統提示、工具定義、檔案內容。一個「改這個檔案裡的一行」的請求,背後可能消耗 5 萬到 15 萬 tokens 的輸入。隨著對話進行,到第 10 輪時,每則訊息已經帶著 8 萬+ tokens 的歷史上下文。

粗略的數量級估算:

互動模式(人類在迴圈中):
  有用輸出 : 總消耗 ≈ 1 : 500~1,000
  一天產出幾百行程式碼,燒掉 1~2M tokens

自主 Agent 模式(無人值守長時間執行):
  有用輸出 : 總消耗 ≈ 1 : 5,000~10,000
  Agent 大量讀檔(佔 60% 時間)、試錯、回溯、重讀修改後的檔案
  多 Agent 協作時成本不是線性增長,而是倍數堆疊(5 個 Agent ≈ 20 倍單一 Agent 的成本)

根據 Anthropic 公開數據,Claude Code 平均每位開發者每天消耗約 $6 美元(90% 的使用者低於 $12)。這個數字背後,隱藏開銷(系統提示、歷史重送、工具定義)佔了總 token 消耗的 60~80%。

這不是浪費,這是無狀態架構的必然代價。 模型沒有記憶,所以每次都得把完整背景重新餵給它——這正是本文第一節描述的核心設計。理解這個成本結構,才能合理規劃 AI 輔助流程的預算與架構。


十一、給 CS 背景人士的速查對照表

你熟悉的概念 AI 的對應本質
Stateless REST API LLM 推論本身
客戶端維護 Session 對話歷史的「記憶」
工作記憶 / 快取大小 Context Window
函數呼叫 / RPC 工具呼叫(Tool Use)
事件迴圈 + Callback Agent 的運作模式
中介軟體 / Hook 生命週期 Hooks
唯一真實來源(Single Source of Truth) 檔案系統
機率 vs. 確定性 LLM 層 vs. 系統層

結語

現今的 AI 不是一個在某處持續思考的存在。它是一個被反覆呼叫的無狀態函數,由外層的工程系統——客戶端、工具執行器、持久儲存、排程器——共同撐起「有記憶、有自主性」的幻覺。

理解這個架構,能讓你在設計 AI 輔助流程時,把對的事情放在對的層次,而不是把該確定執行的邏輯交給機率決定。


基於 2026 年 4 月的 Anthropic Claude 架構。核心原理亦適用於同代其他主流 LLM。

No comments:

Post a Comment