- turn by turn 示範
[
'user: 你好',
'AI: hi how mayi help?',
'user: 講個笑話?',
'AI: 這是一個笑話。',
]
- messages[] 不斷累積,每一輪都帶有前面所有輪的歷史交談記錄,講越久資料越多
[
'user: 你好',
'AI: hi how mayi help?',
'user: 講個笑話?',
'AI: 這是一個笑話。',
...
...
...
...
'user: 這樣我明白了',
'AI: 很高興為你服務,再見!',
]
- tools (web_search, web_fetch...)
[
'user: 你好',
'AI: hi how mayi help?',
'user: 講個笑話?',
'AI: ....',
...
...
// 開始用到 tools 的場合
'user: 今天台北天氣?'
// AI 發出使用工具請求,並提供正確參數
'AI: 我要使用工具,名稱為 check_weather, 參數:台北'
// 工程師代為執行指定的工具並餵入參數,例如:
// check_weather({ city: '台北' })
// 然後返還結果
'tool_result: taipei, 10c, light rain',
// AI 拿到工具答案後用適當的方式回答用戶早先提問
'AI: 今天台北氣溫十五度且下小雨'
]
- RAG
- 最常使用的 tools 通常與檔案讀取或網路搜尋有關
- 常見模式如上面示範,透過操作工具取得外界資訊(例如氣溫)後再綜合發揮寫作文回應用戶
- 這個`先取得外部資訊再生成內容`的過程有個正式名稱叫:
- retrieval augmented generation (RAG)
- retrieval = 取得外部資訊
- augmented = 輔助/增強
- generation = 生成內容
- RAG 另個常見用例是搜尋自己的筆記
- 例如很多人愛用的 obsidian 就提供`與自己筆記交談`的功能
- 背後運作原理是先將每份筆記內容文字切段轉成數字(向量格式,例如 0.0237)
- 然後即可在向量空間做各種查詢與比較
- 這個`文字切段轉數字`的手續就叫`embeddings`
- embeddings 樣貌
[
// 這行原文可能是:台 北 捷 運
[-0.0123, 0.0841, -0.4432, 0.2219],
// 這行原文可能是:民 生 東 路
[-0.0109, 0.0827, -0.4418, 0.2193],
[ 0.9012, -0.3321, 0.1188, -0.7744],
[-0.3055, 0.4419, 0.0291, 0.1887]
]
- vector db
- 專門儲存巨量 embeddings 數字的地方
- 主要功能是可針對 embeddings 數字各種查詢
- 例如相似性(cosine distance)
- 例子:找出筆記中所有跟`帝國`有關的國家(答案:羅馬、希臘、日本...)
- 這裏的重點在於不是用`關鍵字`而是用`概念相似性`做比對
- 此時最常用的手法就是計算兩個 embedding 間的 cosine distance (下略三千字,有興趣自己問 chatgpt)
- 分群(clustering)
- temperature 是否與此`相似性比較`有關?
- 當天有人問到使用 LLM api 時可調整 temperature 來控制結果的隨機性,它是否與前面提到的 consine distance 比較類似?
- 一般操作 LLM api 時可調整的參數主要有兩個,分別是 temperature 與 top_p ,它們主要都是控制「模型回答時有多敢亂選字」這件事!
- temperature
- 控制整體隨機程度(randomness)
- 模型本來會對`下一個 token`算出一個機率分佈
- temperature 會重新`拉平`或`拉尖`這個分佈
- 低 temperature → 拉尖(更保守)
- 高 temperature → 拉平(更隨機)
- 常見範圍與效果
- 0.0 : 幾乎 deterministic (但仍會有小量不確定性存在)
- 0.2–0.4 : 穩定、適合 code / API / JSON
- 0.7–0.9 : 自然對話、一般推薦
- >1.0 : 發散、創作感強,但容易胡扯
→ temperature 是「全域影響」
- top_p
- 只從`累積機率夠高的一小撮 token pool`裡面選一個
- 例子
A: 0.60 → 累積 0.60
B: 0.25 → 累積 0.85 (0.6 + 0.25)
C: 0.10 → 累積 0.95 (0.85 + 0.1)
D: 0.05 → 累積 1.00
- 今天設定 top_p = 0.9 後的選取原理
| 累積到哪 | 累積機率 | 是否 ≥ 0.9 |
| --------- | ------ | ----------------|
| A | 0.60 | ❌ |
| A + B | 0.85 | ❌ |
| A + B + C | 0.95 | ✅ ← 到這裡就停 |
→ {A, B, C} 的累積機率 已經覆蓋 95%
→ 不需要 D 也能達到`至少 90%`
→ 因此最終只會從 {A,B,C} 三者間挑一個,等於排除掉 D
- 常見設定
- 1.0 不限制(等於沒開)
- 0.95 業界最常見預設
- 0.8 明顯保守
- `<0.7` 回答會開始變得很死板
→ 因此那個問題的答案是:
- 這兩者完全無關,temperature 是用於控制 LLM 內選取下個 token 的機率,而 embeddings 則是用 cosine distance 計算兩個元素間的距離,跟機率完全無關。
- 重要更正
- 當天會眾提問 temperature 時我講的答案其實是 top_p,因此造成不少人疑惑,現在特此更正啦~😅
- 順帶一提,自從 reasoning model 成為主流後(例如 gpt-5, claude sonnet-4, gemini-3),現在主已改成 reasoing.effort = low | medium | high 搭配 verbosity 參數來控制模型生成內容,非常少用到 temperature/top_p 等參數了,各位看一下 openai 的 `response api` 參數表就會明白。
- 絕對不要自己寫 prompt,你比不過 LLM 它本人的
- 絕對不要自己寫 prompt,你比不過 LLM 它本人的
- 絕對不要自己寫 prompt,你比不過 LLM 它本人的
- 標準起手式
- 直接跟 AI 講清楚你的目標(想完成的事)
the goal is: lookup Taipei weather so I can dress properly
- 善用`power prompt`咒語
write a "power prompt" that lookup weather in Taipei so that I can dress properly
- 適用情境
- 越會經常重複使用的 prompt 越值得用上面兩招讓 AI 幫你寫出完美提示
- 這絕對比你土砲自以為發揮創意手寫的一堆提示來的有效
- 業界案例
- claude code 的 auto-compact 壓縮功能就是傳送完整 context[] 給 LLM 讓它進行摘要
- 因為只有 LLM 它本人最清楚 context[] 內哪些資訊還有價值需要保留,或哪些不重要的可無情刪減與改寫
→ claude code 就靠 auto-compact 這招而敢宣稱它家 agent 已提供`無上限`的 context,現在你知道背後運作理就是`用魔法對付魔法`囉!
- 一句話:llm in a loop using tools
- 此時你已懂 llm 也知道 using tools 的方式
- 因此關鍵在 loop
- 前面 chatbot 範例是`你說一句、AI 回一句`,如果你不說話,它就不會有下一步
- agent 則是它會主動不斷走下一步,就算你不在電腦旁邊也一樣
- 而實現此事的手法就是靠 loop (迴圈)
- 兩行 pseudo code 示範 loop 原理
while(true){
// 做事
llm(`思考與做事`)
// 做完事判斷目標是否已達成
// 是 → break 結束迴圈
// 否 → 繼續跑下一輪 loop 直到達成為止
if(complete===true) break
}
- agent, agency, agentic 這些字都是同個意義
- 也就是能自主思考、決定下一步做什麼,以及判斷做完的結果是否達成目標,然後不斷嚐試各種手法直到成功
- 例子:你找房屋仲介尋房,只要跟他說`預算五千萬、目標大安區三房兩廳華廈`,他就會自己判斷該區哪些地點與物件可能適合,然後代為洽談屋主尋問價格與屋況,等蒐集足夠資訊後再向你匯報,此例中`房仲`就是一個 agent (差別只在於他是活體真人...)
- ReAct pattern
- ReAct = reason + act = A.先思考 + B.再行動
→ 然後觀察行動結果再回到`思考`這段決定下一步行動,如此不斷在 A/B 兩步間重複,直到達成目標
→ 這幾乎是所有 agent 背後運作的最基本原理,在它之上才衍生出各種花俏的 patterns
❌- prompt engineering
- 前面已提過現在沒人在手寫土砲提示了,都是直接叫 AI 幫忙寫
- 而且切記要寫成英文提示效果會更好(English prompt performs better)
- 目前最新的戰場在 context 管理
- 想像 context 就像個水杯,每一輪交談或 AI 使用工具,就會往杯裏加點水,當杯子滿了它就下課無法繼續工作了
- 哪些事會往杯子裏加水?(造成 context 肥大)
- system_prompt.md
- claude.md
- agent.md
- sdd.md
- mcp.md
- 這個最恐怖,能將簡單的 {name:string} 參數寫成五十行的 JSON schema 佔據大量 context 空間
- 而且巨量目錄內容需事先全送入 context 供 AI 參考,就算最後一個 MCP 也沒用但還是佔用空間了
- skills.md
- 這是 MCP 之後推出的手法
- 主要改良是只送輕量的目錄描述有哪些工具可用以及它們的文件路徑,請 AI 真正要用時再去讀取該工具的詳細文件即可
- 因此它立即解決上述 MCP 佔用巨量空間的問題
- pre training → foundation model
- pre training:將全世界所有文字內容丟給演算法去學習人類文字間的關聯,這稱為`預訓練`
- foundation model:`預訓練`的結果即是一顆內含大量參數(weights)的巨大模型,也就是 LLM (Large Language Model)
- LLM 最基礎的技能就是:next token prediction
this is a ______ (它知道下個字最可能是 cat 而非 opus 因為 a 後面不能接母音)
- 此時 LLM 已非常擅常做下列文字工作
- 翻譯、摘要、作文、分析...
- 然後可再透過不同強化訓練手段讓 LLM 能做更多事
- 例如 chatbot 就是強化它問與答的能力
- 例如 reasoning model
- 主要手法是透過 reinforcement learning (RL) + human feedback
- 強化 LLM 的邏輯推演能力(Chain of Thought, CoT)
- 簡單講就是在數千億次的學習過程中,做對了給獎賞、做錯了就懲罰,讓 LLM 不斷調整自已內部的 weights 直到最後可穩定做出合理、正確的選擇
→ LLM 橫空出世之處為何?
- 經典論文 `Attention is all you need` 引介了 transformer 架構一舉解決之前長文字串常見的梯度消失與爆炸問題
- 然後有人發現當訓練的資料量夠大時,模型就會湧現出智商 → 也就是所謂的` 大力出奇蹟`啦!
- 避免 context 增肥導致 agent 注意力渙散
- 絕不要人工去清理 compact,因為你不知道哪些東西真的可移除
- 善用 file system 將資料外部化是不二法門
- 三大心法
- fs
- bash is all you need
- 例如 reggrep/grep 在巨量檔案內搜尋關鍵字速度超快!
- sub-agent
- 將工作切小塊交給 subagent 去做完再回報成果就好
- 如此只有 subagent context 會髒掉,但主線程 agent 的 context 可保持乾淨
- 最近最熱門的應用當屬 ClawdBot/OpenClaw
- 基本上它就是個 agent
- 而 agent 的基礎原理仍然是 `llm in a loop using tools`
- tool: shell/bash
- grep/git
- tool: browser
- playwright_mcp
- tool: computer
- mouse, keyboard, vision
→ 同場加映
- claude code 是一種 coding agent 產品,它本身就是個 agent 應用(專長是寫程式)
- 而更精準來看
- claude code = claude agent sdk + Terminal UI (TUI)
- 也就是它內部真正做事的心臟是 claude agent sdk
- 只是外面包上一層漂亮的使用者介面(TUI)
- 如果想監看 claude code 通訊內容可安裝 CCR
- https://github.com/musistudio/claude-code-router
- 它同時也支援使用 cladue 以外的多家模型
- 也就是從此你的 claude code 也能搭配 gpt/gemini/deepseek 等各家模型來使用了
- 當然傳統上常用封裝監看程式例如 charles, wireshark 只要能 man in the middle 也都行,總之就是將封包攔下來偷看一下再轉手出去而已
- 可重複性
- 可觀察性
- 安全性
- prompt injection 是最大威脅且可能永遠無解
- lethal trifecta 介紹 agent 安全三本柱經典文章必讀
- https://simonwillison.net/2025/Jun/16/the-lethal-trifecta/
- 效率/正確率
- 成本(llm routing)
- 千古大哉問,我要是知道答案,還會有時間在這裏辦活動?😆
- 但總之我已逼問過多家 AI 數十次這問題,得到的答案永遠是下列三點
- 利基市場
- 垂直整合
- 高度客製化
- 例子:與其肖想做一個泛用的 agent 產品(例如 manus/openclaw),不如針對`貿易業`這個利基市場做垂直整合與高度客製化,這樣不但注意力能集中也更能累積 domain knowhow 做為 moat (投資有賺有賠本範例不代表創業建議採納前請詳閱天命說明書)
- 其實 AI 界的 first principles 就那幾個
- llm, tools, loop, prompt, context[]
- 一旦掌握這幾個最基礎概念,從此腦中有清晰的思考脈絡可冰雪聰明的獨立判斷各種新玩具是否真有價值
- 從此也就不會每天被網路上各種 AI 新聞吹的人心惶惶、東倒西歪而能笑看人生啦~
- 全民大 AI 時代後最重要的 mental model 就是
- 永遠保持 declarative mindset
- 也就是大膽許願
- 實作細節(implerative implementation details)外包給 AI
- 然後高明的驗收
→ 至於如何許願、外包與驗收,就是下場聚會的主題,敬請期待囉~😘