OpenClaw × Atlas
給 IT 新手的 AI Agent 實戰課
不是教你寫 App,
是教你指揮一個 AI 員工幫你做事。
你只要會用「白話文」描述工作,剩下的交給 Agent:它會自己查資料、做判斷、把結果整理好傳給你。這堂課用我們真的在跑的 Atlas 系統當教材,一步步拆給你看。
我們會走過的 4 站
成品:每天自動產生
一份晚報,傳到你手機
每天收盤後,系統自己跑完整條分析流程,把結論寫成一則訊息,19:15 準時推到 Telegram。沒有人按按鈕,這就是 Agent 在工作。
📊 市場總覽 狀態: risk-on | 曝險: 100% VIX 18.5 | SPY>SMA20 ✅ | SOX>SMA20 ✅ 🎯 今日重點 • 2330 台積電 — 進場 1010 • 訊號: 外資 × 量增 × ROC60 — 由 Atlas 自動產生,無人工介入
OpenClaw 基礎架構與生態
OpenClaw 是「AI Agent 的作業系統」
它幫你接好所有麻煩事:讓 AI 收得到 Telegram 訊息、能呼叫工具、記得住事情、照表操課。
你只專心寫「它該怎麼做事」。
開始前,你只需要這幾樣
- 1一台會一直開著的電腦我們用一台小主機 NUC(Linux)+ 一台 Mac。你練習時用自己的筆電就行。
- 2Python + OpenClaw安裝框架本體,它就是跑 Agent 的引擎。
- 3一隻 Telegram Bot 與一把 LLM 金鑰Bot 是對外的嘴巴與耳朵;LLM 金鑰是 Agent 的大腦(Claude API/OpenRouter)。
五個零件,拼出一個 Agent
Agent=會編排流程的大腦
在 Atlas 裡,一個 Agent 負責把一天的工作「照順序串起來」:先看大盤 → 算訊號 → 讓 LLM 選股 → 產生報告。
它決定先做什麼、再做什麼。
def run_pipeline_job(config): # 排程到了,Agent 開始幹活 engine = TradingEngine(config) success = engine.run_pipeline() # ↑ 一個指令,串起 6 個步驟 log.info("pipeline done: %s", success)
Skill=一張「技能說明書」
最上面寫名字+一句它會做什麼,下面寫什麼話該觸發它。
使用者打「推薦」就叫出選股、打「買了 2330」就叫出記帳——全是純文字規則。
--- name: atlas-quant description: 台股量化助手 — 推薦、 個股分析、持倉狀態、大盤總覽。 --- # 什麼時候啟動 • 出現「推薦 / 選股」 → 今日推薦 • 出現「持倉 / 部位」 → 投組狀態 • 出現股票代號 → 個股分析
Tool=Agent 真正動手的那雙手
LLM 只會「想」,不會自己查資料庫。Tool 就是一個個函式:給它輸入、回給它結果。
在 Atlas,每個工具是一個 HTTP 入口,Agent 用網路呼叫它。
# 註冊給 Agent 用的工具入口 POST /skill/query # 問量化問題 POST /skill/trade # 記一筆交易 POST /skill/lookup # 代號↔名稱 GET /healthz # 還活著嗎 def lookup_stock(registry, q): return registry.get_name(q)
Hook=在關鍵動作前
自動跳出來把關
「在 Agent 真的執行某動作之前,先檢查一下」。
我們用它擋下危險操作——例如跑回測卻忘了開平行運算,就跳出來問你一聲。
# PreToolUse:執行 Bash 前先攔 if grep -q "ProcessPoolExecutor" "$script"; then exit 0 # 有平行,放行 fi # 否則 → 跳出來「⚠️ 要不要先開平行?」 echo '{"permissionDecision":"ask"}'
Memory=Agent 的筆記本
LLM 每次對話結束就「失憶」。Memory 把重要的事寫成檔案存起來,
下次先看一份索引(每條一行),需要才翻開細節——省腦容量。
# Memory Index ## 工作守則 - [改報告先 render 給看才上線] (feedback_show_render…md) - [回測一定要平行] (feedback…md) ## Atlas 策略 - [S2 四重 gate 配置] (project…md) # ↑ 一行一條,要用才開檔讀全文
這些零件,實際跑在哪?
把結果送出去:
Telegram 整合實作
所有對外訊息只走一個函式 _send_telegram():負責重試、退避、跟踩過的坑。
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) # 失敗就退避重試,不靜默死
LLM 程式設計與 Context Engineering
呼叫 LLM=寄一封信,等它回信
你給它一段文字(prompt),它回你一段文字。就這麼單純。
Atlas 還做了三層備援:雲端主帳號 → 雲端備帳號 → Mac 本地,倒一個自動換下一個。
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)
寫 Prompt=把工作交代清楚
RAG=先翻書,再回答
LLM 不可能記得你公司所有資料。RAG 的做法:先把相關片段找出來,塞進 prompt,再讓 LLM 根據它回答——答案就有依據、不亂編。
- ①把資料切塊、轉成「向量」存進向量資料庫在我們架構裡這個角色是 Qdrant(:6333)。
- ②使用者提問時,撈出最相關的幾段一起餵給 LLM
上下文管理=控制 AI「看得到什麼」
LLM 一次能讀的字有上限(叫 context window)。Context Engineering 就是精挑該放進去的東西——放對了它聰明,塞太多它分心。
Structured Output=
要 AI 回填好的表格
不要它寫一段散文,而是回一份固定欄位的資料,程式才接得住。
Atlas 用 Pydantic 先定好「表格長相」,LLM 照著填。
class Candidate(BaseModel): symbol: str # 2330 name: str # 台積電 score: float # 綜合分數 entry: float # 建議進場價 reason: str # 一句理由 # LLM 回的東西一定長這樣 → 不會崩
Agent 設計與 Harness Engineering
Agent 怎麼「想到做完」?一個迴圈
好工具,要讓 AI
看名字就會用
- 清楚的名字+說明lookup_stock:查代號↔名稱。AI 靠這段描述決定何時呼叫。
- 明確的輸入/輸出給什麼、回什麼,定死,AI 才不會用錯。
- 一個工具做一件事查資料、記帳、發訊息各自獨立。
# 每個入口 = 一個 Agent 能呼叫的工具 POST /skill/query POST /skill/trade POST /skill/lookup POST /jobs/trigger # 手動觸發排程 # Agent:「我需要查名字」 # → 自動挑 /skill/lookup 來用
別讓 Agent 被資訊淹死
輸出驗證=交件前先自己檢查
AI 會出錯。所以產出後先過一關檢查:格式對不對、欄位齊不齊、會不會炸掉?
不過就退回去重做,過了才送出。
result = agent.run(task) if not is_valid(result): # 格式不符 / 缺欄位 / 會 400 result = agent.retry(hint=錯在哪) send_telegram(html.escape(result)) # ↑ 真實的一道驗證關(#137)
Skill 設計與進階生態
一個好 Skill 的三件事
- 1身分:name + 一句 description框架靠這句話判斷「這次該不該叫它」。
- 2觸發:什麼話該啟動列關鍵詞與例句,越具體誤判越少。
- 3分流:不同意圖走不同處理「推薦」「持倉」「大盤」各自對到一個函式。
# 依優先序判斷意圖
1. 像別的 skill → 不要啟動
2. 評估字 + 代號 → 個股評估
3. 「推薦/選股」 → 今日推薦
4. 「持倉/部位」 → 投組狀態
5. 「大盤/市場」 → 大盤總覽
6. 都不是 → 交還
五個零件,合體成一個生態
動手做一個 Skill:4 步
- 1寫 SKILL.md:取名字、寫一句說明、列觸發關鍵詞
- 2接一個 Tool:例如一個查資料的 HTTP 入口
- 3本地測一句話curl 打進去,看回傳對不對——先別接 Telegram。
- 4掛上去、用真實訊息跑一次在 Telegram 真的傳一句,確認整條路走得通。
範例:把這份投影片
自己部署上線
剛剛那幾步,我們固化成一個可重用的 Skill deploy-static-k8s。下一個指令,它就自動把網頁上線。
# 一個指令,五件事自動做完 ① 🔒 掃機敏資訊 # token/IP/帳密 ② ⚙️ 產生 k8s 設定並套用 ③ 📄 把 HTML 包進去 → 上線 ④ ✓ 驗證真的開得起來 # HTTP 200 ⑤ 🌐 告訴你要加哪筆 DNS
全部接起來:Agent 的一天
同一套,換個領域照用
Atlas 做的是「自動分析 → 產報告 → 通知」。把「股票」換成你的題目,整套骨架不變:
四站走完,你手上有什麼
最好的學法,是
改一行,跑一次,看它變了沒
- ▸挑一個現有 Skill,改一句觸發詞或回覆文案
- ▸在 Telegram 真的傳一句話觸發它,看結果
- ▸不懂的地方,直接問 Agent「這段在做什麼」
謝謝,換你了
都可以直接丟進 Telegram 問 Agent。