從零開始學習 AI 代理程式的六階段路徑
從基本概念到安全性,依序親手建立 AI 代理程式:先寫出約 30 行迴圈,再加入工具、記憶與錯誤停止機制,每階段都有可完成的成果。
六個階段的學習路徑
若要從零開始學習 AI 代理程式,請依序完成六個階段:基本概念、第一個迴圈、工具、記憶、迴圈設計,以及安全性。每個階段都要求您親手建立一項成果。跳過前面的階段,是最常見的停滯原因,因為框架會隱藏您正需要理解的部分。
AI 代理程式是圍繞語言模型建立的迴圈,而且允許該模型呼叫工具。這句話就是整個主題。後續內容只是詳細說明迴圈包含哪些部分、工具可以存取哪些項目,以及迴圈發生錯誤時如何停止。如果您能向他人解釋這個迴圈,就表示您已經學會核心概念。如果您只能說出各種框架的名稱,就還沒有學會。
以下計畫假設您透過實作學習。閱讀一個階段、建立其中的小項目、刻意讓它發生錯誤,然後再繼續下一個階段。只讀過的階段,並不代表您已經完成。
第 1 階段前真正需要的條件
實際的先備條件很少,通常比多數課程頁面所列的更少。
- 您能以撰寫 50 行腳本的程度讀寫 Python 或 TypeScript。
- 您熟悉 Linux shell:安裝套件、編輯檔案及讀取日誌。
- 您擁有代管模型的 API key,或有一台能執行本機模型的機器。
這就是完整清單。您不需要機器學習理論,也不需要曾經訓練過模型。代理程式工作不涉及梯度或訓練資料。只有在您決定自行執行模型時,顯示卡才會派上用場;這是另一項技能,之後可以透過 在 VPS 上代管 Ollama 以自行代管 LLM 學習。
人們低估的是 shell 這一部分。代理程式會因權限、路徑、環境變數,以及無聲終止的程序而失敗。如果看到與 PATH 或檔案模式相關的堆疊追蹤就想關閉終端機,請先花一個週末學習 Linux 基礎。這能為您日後節省一個月的時間。
第 1 階段:agent 是什麼,以及它不是什麼
先執行 1 次 API 呼叫,不使用迴圈。傳送提示,列印回覆,查看回應中的 token 數量。現在你已了解成本單位與延遲單位。
接著學習工具使用方式,這是整個領域中唯一真正的新概念。你要將函式描述為名稱、說明,以及用於輸入的 JSON(JavaScript object notation)結構描述。模型不會執行任何動作。它會回覆結構化要求:使用這些引數呼叫 run_command。你的程式碼執行該函式,將輸出作為訊息傳回,然後再次要求模型回覆。模型是讀取文字並寫入文字的規劃器。你的程式碼才是實際執行工作的部分。
聊天機器人在 1 次回覆後結束。agent 會重複這項交換,直到模型停止要求使用工具。這種重複就是兩者的全部差異,也因此失敗模式有所不同。聊天機器人可能只產生 1 次錯誤答案。agent 則可能根據錯誤答案採取多次行動,直到有人察覺。
階段 2:自行撰寫一次迴圈
不要先使用框架。先撰寫約 30 行 Python,讓這個程式的結構由你自行決定。
sudo apt update && sudo apt install -y python3-venv
python3 -m venv ~/agent
source ~/agent/bin/activate
pip install anthropic
export ANTHROPIC_API_KEY=your-key-hereimport subprocess
import anthropic
client = anthropic.Anthropic()
tools = [{
"name": "run_command",
"description": "Run a read only shell command and return its output.",
"input_schema": {
"type": "object",
"properties": {"command": {"type": "string"}},
"required": ["command"],
},
}]
messages = [{"role": "user", "content": "How much disk space is free here?"}]
while True:
response = client.messages.create(
model="claude-opus-5",
max_tokens=4096,
tools=tools,
messages=messages,
)
if response.stop_reason != "tool_use":
break
messages.append({"role": "assistant", "content": response.content})
results = []
for block in response.content:
if block.type == "tool_use":
done = subprocess.run(
block.input["command"], shell=True,
capture_output=True, text=True, timeout=10,
)
results.append({
"type": "tool_result",
"tool_use_id": block.id,
"content": done.stdout or done.stderr,
})
messages.append({"role": "user", "content": results})
print(next(b.text for b in response.content if b.type == "text"))使用 python3 agent.py 執行。正常執行時會輸出一個段落,列出你的檔案系統及其可用空間。這是因為模型要求執行 df -h,你的程式執行了該命令,第二次傳遞則將該表格轉換為句子。如果沒有任何輸出,表示迴圈在收到文字區塊前就結束了。將 print(response.stop_reason) 加入迴圈內,觀察數值的變化。
現在刻意製造錯誤。刪除 tool_use_id 行並讀取錯誤訊息。API 會拒絕沒有相符 id 的工具結果,這也是初學者最常犯的錯誤。提出需要執行兩個命令的問題,觀察迴圈執行兩次。提出無法完成的問題,觀察它是放棄,還是無限執行。
請注意這個範例的一項問題。它使用 shell=True 將模型輸出直接傳入 shell。這只適用於可重新建置的測試機器,在其他環境中則是不安全的做法。階段 6 會修正這個問題。迴圈背後的概念會在 在 VPS 上建立自己的 AI 代理程式 中進一步說明。
第3階段:代理程式原本沒有的工具
您的 run_command 工具可以運作,但實際的代理程式需要能存取系統外部的工具,例如工單系統、資料庫和程式碼儲存庫。為每項服務及每個代理程式各自撰寫專用包裝程式,無法擴充。
業界最後採用 Model Context Protocol (MCP) 作為解決方案。MCP 伺服器會透過標準傳輸公開一組工具,任何支援 MCP 的代理程式都能使用這些工具,不需要自訂整合程式。參考用的檔案系統伺服器只需執行一個命令:
npx -y @modelcontextprotocol/server-filesystem /home/you/projects這需要先安裝 Node,而目錄引數是伺服器唯一會存取的路徑。這正是該安全性模型的簡化示例:邊界由伺服器決定,而不是由模型決定。將用戶端指向該伺服器後,代理程式就能讀寫檔案,即使您未撰寫這些功能。如何在服務帳戶下正確執行這些伺服器,以及如何選擇傳輸方式,請參閱在 VPS 上執行供 AI 程式碼代理程式使用的 MCP 伺服器。
本階段的重點是,工具設計才是真正的工作。描述含糊時,模型會自行猜測。工具若回傳四萬個字元,會耗盡上下文視窗。能夠刪除項目的工具,最終一定會刪除項目。
階段 4:記憶,主要就是檔案
初學者通常會在這裡使用向量資料庫。先不要這麼做,至少目前不要。
Agent 在不同呼叫之間不會保留記憶。您每次都必須重新傳送完整對話,因此長工作階段每回合的成本會高於短工作階段。記憶因此分成兩個問題。第一個問題是目前內容視窗能容納哪些內容。您可以透過摘要、刪減較早的工具輸出,以及快取提示的穩定前綴來管理,從而只需支付其中一小部分的費用。第二個問題是重新啟動後仍能保留哪些內容,這部分需要儲存空間。
對於第二個問題,讓 Agent 讀寫一個純 Markdown 檔案,幾乎比向量資料庫更適合所有初期專案。提供一個檔案,告訴它檔案格式,要求它在開始前讀取該檔案,並在學到新資訊時更新檔案。您可以獲得大部分效益,也能直接開啟檔案,查看 Agent 的認知內容。等到筆記無法再容納於內容視窗時,再使用嵌入和擷取功能,不要更早使用。
階段 5:迴圈就是產品
現在,你應該已經能建立一個在你監看時正常運作的代理程式。階段 5 的目標,是讓它在你不介入時也能運作。
有 4 個問題決定了無人值守的代理程式是否可以安全地獨立運作。什麼會觸發它,才能避免它無故執行。它在哪個界線內運作,才能讓錯誤的影響維持在最小範圍。如何驗證結果,因為讓代理程式自行批改作業,結果一定會通過。什麼預算能限制它,包括 token 數量或實際經過時間。在 迴圈工程,以及該定義涵蓋的內容 中,說明的就是如何刻意設計這 4 個要素。
練習:使用你的階段 2 代理程式,指派一項需要 4 或 5 個步驟的工作,並加入嚴格的迭代上限。接著移除上限,觀察無限制迴圈如何增加你的 token 費用。先以小額預算執行一次,避免日後在大額預算下意外執行。
階段 6:安全性、密鑰與成本
此階段不可省略。它之所以最後執行,只是因為您必須先建立可運作的系統,才能感受到其中的風險。
讓 agent 以專用的非特權使用者執行。不要使用 root,也不要使用您自己的帳戶。如此一來,受影響範圍會限制在某個目錄,而不是整台機器。不要讓模型接觸憑證,因為內容視窗中的任何資料,都可能透過工具呼叫被原樣輸出。解決方式是依照 讓密鑰遠離您的 AI agents 所述,透過 helper 使用範圍明確且存留時間短的 token。設定明確的支出上限,因為無人監看的迴圈會在每次迭代產生成本。維持成本可控所需的上限與批次處理方式,請參閱 在持續運作的 VPS 上控管 AI agent 成本。
成本需要一個具體數字。截至 2026 年 7 月,Claude Opus 5 的費用為每 1 million 個輸入 token $5,以及每 1 million 個輸出 token $25。持續重新傳送逐漸增長的對話內容時,互動頻繁的 agent 可能在單一工作中處理數十萬個 token。Prompt caching,以及在例行步驟中使用較小的模型,對成本計算的影響遠大於調整 prompt。
這裡也必須處理 prompt injection。如果您的 agent 會讀取網頁、issue tracker 或收件匣,撰寫這些內容的人也同時在向您的 agent 提供指示。防禦方式不是撰寫更複雜的 system prompt,而是設定邊界。無法刪除 repository 的 agent,就不會被誘導刪除 repository。
應該遵循哪一份學習地圖?
選擇一套課程並完成,不要只挑選六套課程各看一點。Microsoft ai-agents-for-beginners repository 是最完整的免費課程,包含 18 堂課程;截至 2026 年 7 月,該 repository 已獲得超過 70,000 顆星,而且能與上述階段清楚對應。熱門 agent repository 的整理文章有助於了解現有哪些專案,但不適合作為課程大綱,因為依星數排序代表依熱門程度排序,而不是依教學順序排序。
需要實際專案進行練習時,coding agent 是最適合的起點:回饋立即可得、工具用途明確,而且錯誤容易復原。在 VPS 上執行 coding AI agent 會逐步說明一個完整流程。如果想研究已在運作的系統,而不是從零開始建置,最佳的 self-hosted AI agent 中的比較會說明數個專案如何以不同方式處理相同的迴圈。
這需要多久?
對已具備程式設計能力的人而言,第 1 和第 2 階段只需一個晚上。第 3 階段需要一個週末,其中大部分時間花在工具說明,而不是通訊協定。第 4 和第 5 階段需要幾週的實際使用,因為只有觀察代理程式忘記某些內容,才能了解它會忘記什麼。第 6 階段不會真正結束,因為每次授予新的功能,都會重新引發這項工作。
持續利用晚間投入 2 個月,大多數人就能建立可運作、範圍受控且實用的代理程式。花費 1 年的人,通常是持續閱讀而不是動手建立。
FAQ
我需要了解機器學習,才能建置 AI agent 嗎?
不需要。建置 agent 是透過 API 呼叫模型,並將模型的工具請求連接至實際函式,這屬於一般應用程式設計。您不需要處理訓練、梯度或資料集。決定 agent 能否正常運作的技能,是工具的結構描述設計、錯誤處理和 Linux 權限。只有在您進一步微調模型時,機器學習理論才會變得重要;那是不同的工作,也有不同的先備條件。
我應該從 LangChain 或 CrewAI 這類框架開始嗎?
先撰寫一個原始迴圈,再採用框架。框架會將第 2 階段的 30 行程式碼替換成組態物件。當您了解它取代的內容後,這很方便;在此之前則容易造成混淆。agent 發生異常時,您必須直接分析訊息清單和工具結果。如果您從未看過這些內容,處理起來會困難得多。先自行完成一個迴圈後,框架就能節省時間,而不是掩蓋運作機制。
學習 AI agent 需要多少費用?
如果設定上限,費用會比多數人預期的低。託管 API 金鑰和一台小型 VPS,就足以涵蓋這 6 個階段。真正的風險不是每小時費率,而是無限制的迴圈在您睡覺時持續執行,並為每次疊代計費。第一天就為 API 帳戶設定嚴格的支出上限,為您撰寫的每個迴圈加入疊代上限,並在例行步驟使用較低成本的模型。在本機執行模型可以取消 token 費用,但需要相應的硬體。
AI agent 和 chatbot 有何不同?
chatbot 只回答一次。agent 會重複執行一個循環:模型要求使用工具,您的程式碼執行工具,結果傳回模型,模型再決定下一步。這種重複執行讓 agent 能夠完成包含多個步驟的工作,也因此 agent 需要 chatbot 不需要的界線。chatbot 的錯誤回答是一段不正確的文字。agent 的錯誤回答則是一段不正確的文字,以及它針對該回答所執行的任何操作。