$ openclaw start --course agent-bootcamp # 4 個主題,從零到上線

OpenClaw × Atlas

把一段對話,變成一個會自動分析行情、主動推 Telegram 通知的真實系統。
給 IT 新手的 AI Agent 實戰課
itkai · homelab 工作坊
2026 · 課程總覽 · agent / skill / tool / hook / memory
Why this course

不是教你寫 App,
是教你指揮一個 AI 員工幫你做事。

你只要會用「白話文」描述工作,剩下的交給 Agent:它會自己查資料、做判斷、把結果整理好傳給你。這堂課用我們真的在跑的 Atlas 系統當教材,一步步拆給你看。

對象:IT 新手 不需要:先會寫程式 學完會:看懂 + 動手改一個 Agent
OpenClaw × Atlas · 課程介紹
Course map · 4 個主題

我們會走過的 4 站

01 · 6/17
OpenClaw 基礎架構與生態
框架是什麼、設計理念、五大核心元件(Agent / Skill / Tool / Hook / Memory)、架構解析、Telegram 整合。
02 · 6/19
LLM 程式設計與 Context Engineering
怎麼呼叫 LLM(Claude API / OpenRouter)、Prompt、RAG 檢索、上下文管理、Structured Output。
03 · 6/24
Agent 設計與 Harness Engineering
Agent 執行循環、工具設計與註冊(Tool Use)、Context 管理策略、輸出驗證與自我修正。
04 · 6/26
Skill 設計與進階生態
Skill 模組設計原則、Agent 工具生態、Skill 開發實戰,並用 Atlas/OpenClaw 專案實際示範。
OpenClaw × Atlas · 課程地圖
The end result

成品:每天自動產生
一份晚報,傳到你手機

每天收盤後,系統自己跑完整條分析流程,把結論寫成一則訊息,19:15 準時推到 Telegram。沒有人按按鈕,這就是 Agent 在工作。

Telegram · Atlas Bot · 19:15
📊 市場總覽
狀態: risk-on | 曝險: 100%
VIX 18.5 | SPY>SMA20 ✅ | SOX>SMA20 ✅

🎯 今日重點
• 2330 台積電 — 進場 1010
• 訊號: 外資 × 量增 × ROC60

— 由 Atlas 自動產生,無人工介入
OpenClaw × Atlas · 成品預覽
01
6/17 · Foundations

OpenClaw 基礎架構與生態

框架介紹與設計理念 · 開發環境建置 · 五大核心元件導覽 · 架構解析 · Telegram 整合實作
What is OpenClaw

OpenClaw 是「AI Agent 的作業系統」

它幫你接好所有麻煩事:讓 AI 收得到 Telegram 訊息、能呼叫工具、記得住事情、照表操課。
你只專心寫「它該怎麼做事」。

💬
用講的就行
使用者傳一句白話訊息,框架負責收訊、理解、回覆。
🧩
能力可插拔
要新功能就加一個 Skill,不用動核心,像裝 App。
🔁
會自己運轉
排程到了自動執行,產出主動送到你面前。
01 · OpenClaw 基礎 · 設計理念
Environment setup

開始前,你只需要這幾樣

  • 1
    一台會一直開著的電腦我們用一台小主機 NUC(Linux)+ 一台 Mac。你練習時用自己的筆電就行。
  • 2
    Python + OpenClaw安裝框架本體,它就是跑 Agent 的引擎。
  • 3
    一隻 Telegram Bot 與一把 LLM 金鑰Bot 是對外的嘴巴與耳朵;LLM 金鑰是 Agent 的大腦(Claude API/OpenRouter)。
課程原版寫 Discord 我們整套改用 Telegram——觀念完全一樣,只是把「對外的聊天平台」換掉。
01 · OpenClaw 基礎 · 環境建置
The 5 building blocks

五個零件,拼出一個 Agent

🧠
Agent
那個「會思考、會決定下一步」的主角。
🧩
Skill
一項專長:什麼時候出手、出手做什麼。
🔧
Tool
真正動手的工具:查資料、算數、發訊息。
🪝
Hook
關鍵時刻的攔截點:自動檢查、加防護。
📒
Memory
長期記憶:把該記住的事寫下來,下次還記得。
01 · OpenClaw 基礎 · 核心元件總覽
① Agent · 主角

Agent=會編排流程的大腦

在 Atlas 裡,一個 Agent 負責把一天的工作「照順序串起來」:先看大盤 → 算訊號 → 讓 LLM 選股 → 產生報告。
它決定先做什麼、再做什麼

src/scheduler.py
def run_pipeline_job(config):
    # 排程到了,Agent 開始幹活
    engine = TradingEngine(config)
    success = engine.run_pipeline()
    # ↑ 一個指令,串起 6 個步驟
    log.info("pipeline done: %s", success)
01 · 核心元件 · Agent
② Skill · 專長

Skill=一張「技能說明書」

最上面寫名字+一句它會做什麼,下面寫什麼話該觸發它
使用者打「推薦」就叫出選股、打「買了 2330」就叫出記帳——全是純文字規則。

openclaw-skills/quant/SKILL.md
---
name: atlas-quant
description: 台股量化助手 — 推薦、
  個股分析、持倉狀態、大盤總覽。
---

# 什麼時候啟動
• 出現「推薦 / 選股」 → 今日推薦
• 出現「持倉 / 部位」 → 投組狀態
• 出現股票代號     → 個股分析
01 · 核心元件 · Skill
③ Tool · 工具

Tool=Agent 真正動手的那雙手

LLM 只會「想」,不會自己查資料庫。Tool 就是一個個函式:給它輸入、回給它結果。
在 Atlas,每個工具是一個 HTTP 入口,Agent 用網路呼叫它。

關鍵原則 股票代號↔名稱一律查工具,不准 LLM 憑記憶亂講(#382)。
services/skill_http_server.py
# 註冊給 Agent 用的工具入口
POST /skill/query   # 問量化問題
POST /skill/trade   # 記一筆交易
POST /skill/lookup  # 代號↔名稱
GET  /healthz       # 還活著嗎

def lookup_stock(registry, q):
    return registry.get_name(q)
01 · 核心元件 · Tool
④ Hook · 攔截點

Hook=在關鍵動作前
自動跳出來把關

「在 Agent 真的執行某動作之前,先檢查一下」。
我們用它擋下危險操作——例如跑回測卻忘了開平行運算,就跳出來問你一聲。

.claude/hooks/backtest-parallel-check.sh
# PreToolUse:執行 Bash 前先攔
if grep -q "ProcessPoolExecutor" "$script"; then
  exit 0          # 有平行,放行
fi
# 否則 → 跳出來「⚠️ 要不要先開平行?」
echo '{"permissionDecision":"ask"}'
01 · 核心元件 · Hook
⑤ Memory · 記憶

Memory=Agent 的筆記本

LLM 每次對話結束就「失憶」。Memory 把重要的事寫成檔案存起來,
下次先看一份索引(每條一行),需要才翻開細節——省腦容量。

memory/MEMORY.md
# Memory Index

## 工作守則
- [改報告先 render 給看才上線]
  (feedback_show_render…md)
- [回測一定要平行] (feedback…md)

## Atlas 策略
- [S2 四重 gate 配置] (project…md)
# ↑ 一行一條,要用才開檔讀全文
01 · 核心元件 · Memory
Architecture · 架構解析

這些零件,實際跑在哪?

NUC · 區網主機
一直開著的小主機
OpenClawTelegram 入口
Hermes排程器
Atlas:8765
Qdrant:6333
HTTP
Mac
本地 LLM
OMLX:8080
經 Tailscale 連線
NFS
TrueNAS
資料倉庫
Vault筆記/報告
真相來源
記住一句 OpenClaw 找 Atlas 一律走 HTTP localhost:8765,零件彼此用網路講話、互不綁死。
01 · OpenClaw 基礎 · 架構解析
Telegram integration

把結果送出去
Telegram 整合實作

所有對外訊息只走一個函式 _send_telegram():負責重試、退避、跟踩過的坑。

真實踩雷 #137 訊息含 < > & 會讓 Telegram 回 400 整則被吞掉,所以一律先 html.escape()
services/notification_service.py
def _send_telegram(self, message):
    payload = {
      "chat_id": self._chat_id,
      "text": html.escape(message),
      "parse_mode": "HTML",
    }
    for attempt in range(retries):
        r = client.post(url, json=payload)
        # 失敗就退避重試,不靜默死
01 · OpenClaw 基礎 · Telegram 整合
02
6/19 · LLM + Context

LLM 程式設計與 Context Engineering

呼叫 LLM(Claude API / OpenRouter)· Prompt Engineering · RAG 檢索增強 · 上下文管理 · Structured Output
Calling an LLM

呼叫 LLM=寄一封信,等它回信

你給它一段文字(prompt),它回你一段文字。就這麼單純。
Atlas 還做了三層備援:雲端主帳號 → 雲端備帳號 → Mac 本地,倒一個自動換下一個。

services/inference_router.py
def generate_commentary(self, context):
    # Tier 0:雲端主帳號(Claude/Ollama)
    # Tier 1:雲端備帳號
    # Tier 2:Mac 本地 OMLX
    if self._should_use_cloud():
        return self._cloud_first_path(context)
    return self._local_first_path(context)
02 · LLM 程式設計 · 呼叫 LLM
Prompt Engineering

寫 Prompt=把工作交代清楚

🎭
給角色
「你是一位謹慎的台股分析師。」先定身分,語氣與重點就對了。
📋
給規則
「只根據我給的數據,不要臆測。」把界線講死。
🧾
給格式
「用三個重點條列回我。」指定輸出長相,後面才好用。
心法 對 AI 說話,就像帶一個聰明但第一天上班的新人——交代得越具體,做得越準。
02 · LLM 程式設計 · Prompt Engineering
RAG · 檢索增強生成

RAG=先翻書,再回答

LLM 不可能記得你公司所有資料。RAG 的做法:先把相關片段找出來,塞進 prompt,再讓 LLM 根據它回答——答案就有依據、不亂編。

  • 把資料切塊、轉成「向量」存進向量資料庫在我們架構裡這個角色是 Qdrant(:6333)。
  • 使用者提問時,撈出最相關的幾段一起餵給 LLM
誠實說明 Atlas 目前 Qdrant 先停用(#44),資料用 DuckDB;等實單記錄累積夠多,再開來做「交易日記記憶」。
02 · LLM 程式設計 · RAG
Context Engineering

上下文管理=控制 AI「看得到什麼」

LLM 一次能讀的字有上限(叫 context window)。Context Engineering 就是精挑該放進去的東西——放對了它聰明,塞太多它分心。

🎯
只放相關的
這次任務用得到的數據與規則,其它別塞。
🗜️
長了就摘要
對話太長,先濃縮成重點再繼續,省空間。
📒
記憶當外援
細節寫進 Memory/Vault,要用才撈,不佔視窗。
02 · LLM 程式設計 · Context Engineering
Structured Output

Structured Output=
要 AI 回填好的表格

不要它寫一段散文,而是回一份固定欄位的資料,程式才接得住。
Atlas 用 Pydantic 先定好「表格長相」,LLM 照著填。

models/trading.py
class Candidate(BaseModel):
    symbol: str      # 2330
    name: str        # 台積電
    score: float     # 綜合分數
    entry: float     # 建議進場價
    reason: str      # 一句理由
# LLM 回的東西一定長這樣 → 不會崩
02 · LLM 程式設計 · Structured Output
03
6/24 · Agent + Harness

Agent 設計與 Harness Engineering

Agent 執行循環 · 工具設計與註冊(Tool Use)· Context 管理策略 · 輸出驗證與自我修正
The agent loop · 執行循環

Agent 怎麼「想到做完」?一個迴圈

觀察
收到任務與目前狀態
思考
LLM 決定下一步
行動
呼叫一個 Tool
檢視
看結果,夠了沒?
還沒完成 → 回到「思考」再來一輪 ⟲  完成 → 收工、輸出結果
03 · Agent 設計 · 執行循環
Tool Use · 工具設計與註冊

好工具,要讓 AI
看名字就會用

  • 清楚的名字+說明lookup_stock:查代號↔名稱。AI 靠這段描述決定何時呼叫。
  • 明確的輸入/輸出給什麼、回什麼,定死,AI 才不會用錯。
  • 一個工具做一件事查資料、記帳、發訊息各自獨立。
把工具「註冊」給 Agent
# 每個入口 = 一個 Agent 能呼叫的工具
POST /skill/query
POST /skill/trade
POST /skill/lookup
POST /jobs/trigger  # 手動觸發排程

# Agent:「我需要查名字」
#   → 自動挑 /skill/lookup 來用
03 · Agent 設計 · Tool Use
Context 管理策略

別讓 Agent 被資訊淹死

💰
把視窗當預算
字數有上限,花在最關鍵的資訊上。
✂️
舊的就摘要
前面的對話濃縮成重點,騰出空間給新任務。
🔎
用到才撈
細節放外部(DB/Memory),需要時才取,而非全塞。
真實做法 Atlas 把策略細節寫進 Memory 索引,每條一行;Agent 先掃索引,要用才開全文
03 · Agent 設計 · Context 管理
Validation Loop · 自我修正

輸出驗證=交件前先自己檢查

AI 會出錯。所以產出後先過一關檢查:格式對不對、欄位齊不齊、會不會炸掉?
不過就退回去重做,過了才送出。

validate → retry 的概念
result = agent.run(task)

if not is_valid(result):
    # 格式不符 / 缺欄位 / 會 400
    result = agent.retry(hint=錯在哪)

send_telegram(html.escape(result))
# ↑ 真實的一道驗證關(#137)
03 · Agent 設計 · 輸出驗證
04
6/26 · Skill + Ecosystem

Skill 設計與進階生態

Skill 模組設計原則 · Agent Tool Ecosystem · Skill 開發實戰 · 用 Atlas/OpenClaw 專案實際示範
Skill 模組設計原則

一個好 Skill 的三件事

  • 1
    身分:name + 一句 description框架靠這句話判斷「這次該不該叫它」。
  • 2
    觸發:什麼話該啟動列關鍵詞與例句,越具體誤判越少。
  • 3
    分流:不同意圖走不同處理「推薦」「持倉」「大盤」各自對到一個函式。
quant/SKILL.md · 分流規則
# 依優先序判斷意圖
1. 像別的 skill → 不要啟動
2. 評估字 + 代號  → 個股評估
3. 「推薦/選股」  → 今日推薦
4. 「持倉/部位」  → 投組狀態
5. 「大盤/市場」  → 大盤總覽
6. 都不是        → 交還
04 · Skill 設計 · 設計原則
Agent Tool Ecosystem

五個零件,合體成一個生態

🧠 Agent
收到訊息
決定要不要出手
🧩 Skill
挑對技能
把意圖分流
🔧 Tool
真的執行
查資料 / 算 / 發送
全程 🪝 Hook 把關安全、📒 Memory 提供長期記憶 — 缺一不可
04 · Skill 設計 · 工具生態
Skill 開發實戰

動手做一個 Skill:4 步

  • 1
    寫 SKILL.md:取名字、寫一句說明、列觸發關鍵詞
  • 2
    接一個 Tool:例如一個查資料的 HTTP 入口
  • 3
    本地測一句話curl 打進去,看回傳對不對——先別接 Telegram。
  • 4
    掛上去、用真實訊息跑一次在 Telegram 真的傳一句,確認整條路走得通。
鐵則 改完一定要用真實路徑跑一次才算數——靜態看程式碼不算驗證。
04 · Skill 設計 · 開發實戰
真實範例 · live demo

範例:把這份投影片
自己部署上線

剛剛那幾步,我們固化成一個可重用的 Skill deploy-static-k8s。下一個指令,它就自動把網頁上線。

會心一笑現在看到的這份投影片,就是被這個 Skill 部署上線的。
/deploy-static-k8s
# 一個指令,五件事自動做完
 🔒 掃機敏資訊 # token/IP/帳密
 ⚙️ 產生 k8s 設定並套用
 📄 把 HTML 包進去 → 上線
  驗證真的開得起來 # HTTP 200
 🌐 告訴你要加哪筆 DNS
04 · Skill 設計 · 實戰範例
Putting it together · 一天的 Atlas

全部接起來:Agent 的一天

06:00
更新股票名冊抓最新台股清單,名稱代號才不會錯
18:00
蒐集市場情報整合多個資料來源
18:30
跑量化訊號計算各種選股指標
19:00
LLM 選股排序大腦根據數據給出信心分數
19:15
產生晚報 → 推 Telegram + 存 Vault一則訊息送到你手機,全程無人介入
22:00
社群動態摘要Hermes 排程,LLM 重新摘要後推送
04 · 進階生態 · 排程串接
科研應用整合

同一套,換個領域照用

Atlas 做的是「自動分析 → 產報告 → 通知」。把「股票」換成你的題目,整套骨架不變:

🔬
研究助理
每天掃新論文,摘要重點,推到群組。
📈
數據監控
盯實驗數據,異常就主動示警。
📰
情報彙整
追蹤特定主題,定時整理成日報。
重點 你學的不是「股票系統」,是一套能套到任何重複性腦力工作的方法。
04 · 進階生態 · 科研應用
Recap · 回顧

四站走完,你手上有什麼

01
看懂 OpenClaw
五大元件+架構+Telegram 整合,知道整台機器怎麼組起來。
02
會用 LLM
呼叫、寫 Prompt、RAG、上下文管理、要結構化輸出。
03
懂 Agent 怎麼想
執行循環、工具註冊、Context 策略、輸出驗證。
04
能自己做 Skill
設計原則+實戰四步,並懂整個工具生態怎麼合體。
OpenClaw × Atlas · 回顧
Your next step

最好的學法,是
改一行,跑一次,看它變了沒

  • 挑一個現有 Skill,改一句觸發詞或回覆文案
  • 在 Telegram 真的傳一句話觸發它,看結果
  • 不懂的地方,直接問 Agent「這段在做什麼」
OpenClaw × Atlas · 下一步
course complete # 接下來換你動手

謝謝,換你了

問題、想做的點子、卡住的地方——
都可以直接丟進 Telegram 問 Agent。
itkai · homelab 工作坊
OpenClaw × Atlas · Q&A
← → 翻頁 · F 全螢幕 · E 編輯