iT邦幫忙

2026 iThome 鐵人賽

DAY 1
1

這一年我每天都在用 AI 代理(AI Agent):會自己讀檔案、自己查資料、自己決定下一步要做什麼的那種工具。從以前卡住就翻 Stack Overflow,到現在直接把需求丟給一個會自己動手的東西,中間這幾年,抽象層一層一層往上疊,LangChain、各種代理框架、各種工具,好像每個月都有更高的一層冒出來。

用是用得很順,但身為一個軟體工程師,我想把它拆開來看。


這個系列要拆的是什麼

先講結論:代理不是某一天突然發表的一種新模型。

它是在一個什麼都不記得的大型語言模型(LLM)外面,一層一層疊上去的工程。中間那幾層:怎麼跟它講話、怎麼把你的資料塞給它、怎麼讓它記得上次聊過什麼、怎麼讓它真的動手做事、怎麼讓它自己決定下一步,每一層都在補上一層補不了的洞。

這個系列就照這個順序走七層:原始提示 → 結構與範例 → 外部知識 → 記憶 → 工具與技能 → 自主代理 → 多代理協作。


大型語言模型可能比你還老

現在講 AI,大家的體感好像是 2022 年底才開始的,但這條線拉得比想像中長很多:

  • 1958 年,Frank Rosenblatt 發表了感知器(perceptron),第一個會「從範例裡學權重」的神經網路模型。單層、只能做線性分類,但方向已經定了。
  • 1986 年,Rumelhart、Hinton 與 Williams 在 Nature 發表反向傳播,多層網路終於訓得動。
  • 2012 年,AlexNet 在 ILSVRC 影像辨識競賽拿下 15.3% 的 top-5 錯誤率,比第二名低了大約 10.8 個百分點。這個差距大到讓整個領域轉向。
  • 2017 年,Vaswani 等八位作者發表 Attention Is All You Need,Transformer 架構出現,今天所有的大型語言模型都站在這篇上面。
  • 2020 年GPT-3 發表,1750 億參數。最重要的發現不是它有多大,而是:不用重新訓練,光在輸入裡舉幾個例子,它就會照著做。
  • 2022 年 11 月 30 日,ChatGPT 上線。

換句話說:如果你今年還不到 68 歲,感知器比你老。 這條路走了六十幾年,只是最後這三年才走到我們手機上。


聊天機器人這個介面,決定了我們怎麼跟 AI 說話

這裡有個我覺得最有意思的巧合。

1966 年,MIT 的 Joseph Weizenbaum 發表了 ELIZA。做法非常陽春:把你的句子做模式比對,再套回一個反問句。你說「我最近很累」,它回「你為什麼覺得自己很累?」就這樣,裡面完全沒有任何理解。

結果連 Weizenbaum 自己都感到不安:人們開始對它掏心掏肺,甚至要求跟它單獨相處。這個現象後來被叫做「ELIZA 效應」,一個對話介面,光靠「可以對話」這件事本身,就足以讓人覺得對面有個懂你的東西。

六十年後,我們還在同一個框框裡。你今天打開任何一個 AI 工具,看到的還是一個輸入框、一則一則往下排的訊息。

補一個 2025 年的後續:大家一直以為 ELIZA 的原始碼早就失傳了,結果有人在 Weizenbaum 留在 MIT 的檔案裡,把 1965 年的 MAD-SLIP 原始碼翻了出來,還讓它在模擬的 IBM 7094 上重新跑起來(論文程式碼)。想知道六十年前的「聊天機器人」長什麼樣子,你現在可以自己跑一次。

這個介面之所以關鍵,是因為它決定了我們要把需求翻譯成什麼形式送進去,一段文字。

那段文字,就是提示詞(prompt)。整個系列的第一層,就從這裡開始。


大型語言模型跟 AI,其實不是同一件事

這是我覺得最該先講清楚的一組詞,因為後面七層全部建立在這個分別上。

面向 大型語言模型(LLM) 我們口中的「AI 工具」
是什麼 一組訓練好的權重,本質上是一個函式 一整套產品:模型 + 外面那幾層工程
輸入與輸出 文字進去,文字出來 對話、檔案、搜尋、操作,輸出也不只是文字
記憶 沒有,每次呼叫都是獨立的 有,但那是外面的程式幫它存的
你的資料 不知道 知道,因為有人把資料查出來塞進去了
動手做事 不能,它只會產生文字 可以,因為外面接了工具
變動速度 慢,以模型版本計 快,每隔幾週就多一個功能

順帶一提,把左邊那一欄做出來的人裡,最有名的一位是 Geoffrey Hinton,英裔加拿大籍、多倫多大學,上面 1986 年的反向傳播和 2012 年的 AlexNet 都有他。他在 2018 年與 Yoshua Bengio、Yann LeCun 共同獲得圖靈獎,2024 年又與 John Hopfield 共同獲得諾貝爾物理獎(是物理獎,這點不少報導寫錯)。大家叫他「AI 教父」。

但請注意:他們做的是左邊那一欄。右邊那一欄(我們每天在用的東西)是這幾年才疊上去的,而且疊的人不只是研究員,更多是寫應用的工程師。


先做一個 30 秒的實驗

不用寫程式,打開 Claude 就可以做。

第一步:開一個新對話,跟它說「我叫 Jim,請記住這件事」。它會很客氣地答應。

第二步再開一個全新的對話,只問一句:「我叫什麼名字?」

它不知道。

這不是模型不夠聰明,而是它從一開始就沒有記憶。每一次請求都是獨立的:你送什麼進去,它就只看得到什麼。我們在同一個對話框裡體驗到的「它記得我剛剛說的話」,是程式每一輪都把整段對話重新送了一次,那個「記憶」是工程做出來的,不是模型本身有的。

同樣的道理再往下推兩層:它不知道你的事(沒有人把你的文件放進去,它就是不知道),而且它不能做任何事(它只會輸出文字,不會真的去改檔案、寄信、查你的行事曆)。

沒有記憶、不知道你的事、不能動手。

你今天用的每一個代理功能,本質上都是在補這三個洞。


原始提示

第一層|原始提示
什麼都還沒補,就是一個乾淨的新對話。

把剛剛那個實驗講得再白一點:當你在一個全新的對話裡打下一句話,實際被送出去的,就只有那句話。

當然,中間還有大量工程在跑:切詞、編碼、矩陣運算、各種最佳化,但從「你到底餵了什麼給它」這個角度看,送出去的東西結構上就是這麼簡單:

{
  "model": "claude-opus-5",
  "max_tokens": 1024,
  "messages": [
    { "role": "user", "content": "我叫 Jim,請記住這件事。" }
  ]
}

一個模型名稱、一個長度上限、一個訊息陣列。你在介面上做的所有事:換模型、上傳檔案、開新對話,最後都會被壓成這個形狀送出去。這個結構會跟著我們走完七層,後面每加一層,都是在這個 messages 陣列裡多塞一點東西,或是在外面多包一層流程。

還有一件事:那句中文也不是以「字」的形式進去的。它會先被切成詞元(token),一串整數。要知道一段文字到底佔多少,最可靠的方式是直接問 API:

POST /v1/messages/count_tokens

回來的 input_tokens 就是它真正的長度。這個數字同時決定三件事:你多快撞到用量上限、一次塞得進多少東西、以及它回得多快。後面會有一篇專門拆這件事。

模型拿到之後做的事,說穿了是一路猜下一個字,根據訓練時看過的海量文字,算出「接在這串字後面最可能出現什麼」,吐出來,再把吐出來的接回去繼續猜。如此重複,直到它判斷該停了。

而這裡就是大型語言模型跟 AI 工具分岔的地方:

  • 模型那一層只做這件事。它沒有查任何東西、沒有打開任何檔案、沒有記得任何事。
  • 工具那一層做的是,在你按下送出之前,偷偷把別的東西也一起放進那段文字裡:你的系統設定、你上傳的檔案片段、你上一輪講過的話。

所以「模型變聰明了」跟「工具把更對的東西塞進去了」,是兩種完全不同的進步。

原始提示好用在哪、又卡在哪

好用在哪:門檻是零。不用設定、不用上傳、不用接任何東西,打開就能用。而且對於「不依賴你私有資料」的任務:翻譯、改寫、解釋一個通用概念、把一段結構鬆散的文字整理順,這一層其實就夠了,再往上疊都是多的。

卡在哪:也正是那三個洞。

  • 你問它「我上個月那份報告的結論是什麼」,它不知道,然後它有可能編一個給你,這才是真正危險的地方。
  • 你每次都要把背景重講一次,因為它不記得。
  • 你叫它「幫我把這個寄出去」,它只會回你一段信的內容,不會真的寄。

這三件事,沒有一件能靠「把提示詞寫得更用力」解決。它們需要的是外面再加一層。

而下一層(結構與範例)要加的,是最便宜、也最有感的一層:把話講清楚的方法。


延伸閱讀

下面是這一篇用到、以及我自己覺得值得往下鑽的材料。

想搞懂詞元

  • minbpe:最小的 BPE 分詞器實作,附練習。

想看懂 Transformer

原始論文(想直接讀一手的)


下一篇

同一件事,換個問法,差在哪裡。

我會拿同一個需求,用兩種寫法各問一次,把兩邊的結果並排放上來,然後回答一個更重要的問題:為什麼「把話講清楚」這件事,對一個什麼都不記得的模型來說,會差這麼多。


下一篇
在黑盒子裡找確定性:同一件事,換個問法,差在哪裡
系列文
從 LLM 到 Agent:用 Claude 拆解現代 AI 工程的每一層8
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言