Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
WebConf 2025 - 工程師和 AI 小隊
Search
Neo Kusanagi
January 20, 2026
26
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
WebConf 2025 - 工程師和 AI 小隊
Neo Kusanagi
January 20, 2026
More Decks by Neo Kusanagi
See All by Neo Kusanagi
Claude Cowork for Begineers
neokn
0
140
使用 Genkit 以及 Gemini 打造你的 Agentic ChatBot
neokn
0
65
Chat Bot 的隱藏知識庫 - RAG 外的第二種選擇
neokn
0
120
From Commit to Mulitverse
neokn
0
240
From Traditional Web to Modern Web
neokn
0
200
AUGM 2017 Electron talk
neokn
0
110
Featured
See All Featured
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
WCS-LA-2024
lcolladotor
0
830
Design in an AI World
tapps
1
310
The agentic SEO stack - context over prompts
schlessera
0
930
The Spectacular Lies of Maps
axbom
PRO
1
990
Automating Front-end Workflow
addyosmani
1369
210k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
What does AI have to do with Human Rights?
axbom
PRO
1
2.4k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
23k
The Hidden Cost of Media on the Web [PixelPalooza 2025]
tammyeverts
2
500
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.3k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Transcript
Jrting, 新加坡商鈦坦科技 Tech Manager @ Dec. 2025 工程師和 AI 小隊
是合作、競爭、混亂?
On Call:每個工程師都有的 PTSD
None
None
為什麼 On Call 會讓人這麼有壓力?
開電腦, 連 VPN, 收兩階段驗證, 找插座 ...
「匆匆忙忙,連滾帶爬」
None
「從從容容,游刃有餘」
1 目前所有的警報都是彙整到 Slack
1 Slack 有 Bot 可以接
💡
接 Slack Bot
Slack Bot 接 LLM
LLM + MCPs
搞定!?
並沒有
接下來會分三大主題
Slack Bot 互動設計
Slack Bot 互動設計 Prompt Engineering
Slack Bot 互動設計 Prompt Engineering Context Engineering
Slack Bot 的互動設計
•互動設計 •Human in the Loop •User Experience Task Bot (只能完成當下的任務)
•互動設計 •Human in the Loop •User Experience Task Bot -
> ChatBot (可以連續對話並保留 context)
•互動設計 •Human in the Loop •User Experience Task Bot -
> ChatBot - > Agent (不只對話還能做事)
Bot: 第一次的 report
Bot: 第一次的 report 工程師: 深入追查問
Bot: 第一次的 report 工程師: 深入追查問 Bot: 提供細節
•互動設計 •Human in the Loop •User Experience 執行具有風險 的指令時需要 approve
•互動設計 •Human in the Loop •User Experience
•互動設計 •Human in the Loop •User Experience 解決等待時間的黑箱狀態 - 等待動畫
- 思考過程的串流 - @Mention 通知完成
•互動設計 •Human in the Loop •User Experience
•互動設計 •Human in the Loop •User Experience
讓 AI 在 Slack 中和人類 流暢的互動以及取得信任感
Prompt Engineering
少了任務指示 AI 根本不知道他要做什麼
Persona: 值班工程師,協助排查 root cause
Task: 會收到什麼樣類型的 Alert 會有什麼資訊 需要遵循怎樣的 SOP ... 可以使用哪些工具 ...
Context: 相關的系統知識以及「時間」
Format: 你希望的報告格式需要包含哪些訊息 (同時可以避免幻覺)
AI 需要理解工程師的思維脈絡 才能真正的解放工程師的雙手
Context Engineering
如果 Context 不足怎麼 Engineering
AI 這麼強 我全部權限開給他查總可以吧?
當然可以 AI 總是能回覆你的任何訊息
「在非洲,每六十秒,就有一分鐘過去」
沒有足夠的 Context 以及任務目標 AI 只會把收到的 Alert 換句話說
查 issue 三本柱 traces, metrics, logs.
Trace
引入 OpenTelemetry 加強跨服務、跨部門的追蹤
Metrics
Alert 有兩大類
Infra: CPU, Memory, Status Code …
Biz: 線上人數、訂單量 ...
現有的 metrics 大部分已經是結果
>> 難以推論更深的 root cause
E.g. 線上 user 掉了 x%
登入服務的 Infra Metrics 都沒有異常
登入服務的 Log 都沒有異常
所以發生什麼事了?
有沒有可能忘記密碼的服務壞了? 導致一定比例忘記密碼的 User 無法登入
新增 Domain 類型的 Metrics
不會被記為 Error Log 的 行 為 但數量異常就不太對 - 密碼錯誤 -
Token 過期 - …
甚至要分出更多維度如: GeoIP Country
「賦予資料意義,AI 才好教」
Logs
採用 Structure Log
提升 Log 可提供的 context 豐富度
E.g. 當下執行的 code 是哪一個 commit 或 image tag
還有一些被遺忘的 context
Jul. 19, 2024
Jul. 19, 2024 一個已經有 ChatGPT 4o 的時代 這是一張手寫的登機證 現場採用「真。人工劃位」
None
Deploy 的時間點也是一個關鍵 Context
自 定義 Annotation: Deploy Record
讓 ChatBot 成為 Agent
把 MCP 裝上去就好嗎?
理想很豐滿,現實很骨感
ElasticSearch MCP
{ "name": "search", "inputSchema": { "properties": { "query_body": { "additionalProperties":
true, "description": "Complete Elasticsearch query DSL object", "type": "object" } } } } LLM 會寫出 一 些 syntax error 查詢語法
解法 1
Alert 本身自帶 Kibana Link
(columns:!(),dataSource:(dataViewId:'filebeat- *',type:dataView),filters:!(),interval:auto,query: (language:kuery,query:'log.level: %20%22error%22%20'),sort:!(!('@timestamp',desc))) { "columns": [], "dataSource": { "dataViewId":
"filebeat-*", "type": "dataView" }, "filters": [], "interval": "auto", "query": { "language": "kuery", "query": "log.level:%20%22error%22%20" }, "sort": [ [ "@timestamp", "desc" ] ] } 1. RISON to JSON
(columns:!(),dataSource:(dataViewId:'filebeat- *',type:dataView),filters:!(),interval:auto,query: (language:kuery,query:'log.level: %20%22error%22%20'),sort:!(!('@timestamp',desc))) { "columns": [], "dataSource": { "dataViewId":
"filebeat-*", "type": "dataView" }, "filters": [], "interval": "auto", "query": { "language": "kuery", "query": "log.level:%20%22error%22%20" }, "sort": [ [ "@timestamp", "desc" ] ] } 1. RISON to JSON 2.KQL to ElasticSearch Query DSL {"bool":{"filter":[{"bool":{"should":[{"term":{ “log.level":{ "value":"error" } }}]}}]}}
Kibana URL ↓ 解析 hash fragment URL Parameters (_g, _a)
↓ Rison decode JSON Objects ↓ 提取時間範圍 (_g.time) Time Range Filter ↓ 提取查詢條件 (_a.query) KQL Query String ↓ KQL → DSL 轉換 ElasticSearch Query DSL ↓ 組合完整查詢 Final Query with filters, time range, sorting
Kibana URL ↓ 解析 hash fragment URL Parameters (_g, _a)
↓ Rison decode JSON Objects ↓ 提取時間範圍 (_g.time) Time Range Filter ↓ 提取查詢條件 (_a.query) KQL Query String ↓ KQL → DSL 轉換 ElasticSearch Query DSL ↓ 組合完整查詢 Final Query with filters, time range, sorting
Kibana URL ↓ 解析 hash fragment URL Parameters (_g, _a)
↓ Rison decode JSON Objects ↓ 提取時間範圍 (_g.time) Time Range Filter ↓ 提取查詢條件 (_a.query) KQL Query String ↓ KQL → DSL 轉換 ElasticSearch Query DSL ↓ 組合完整查詢 Final Query with filters, time range, sorting
Kibana URL ↓ 解析 hash fragment URL Parameters (_g, _a)
↓ Rison decode JSON Objects ↓ 提取時間範圍 (_g.time) Time Range Filter ↓ 提取查詢條件 (_a.query) KQL Query String ↓ KQL → DSL 轉換 ElasticSearch Query DSL ↓ 組合完整查詢 Final Query with filters, time range, sorting
Kibana URL ↓ 解析 hash fragment URL Parameters (_g, _a)
↓ Rison decode JSON Objects ↓ 提取時間範圍 (_g.time) Time Range Filter ↓ 提取查詢條件 (_a.query) KQL Query String ↓ KQL → DSL 轉換 ElasticSearch Query DSL ↓ 組合完整查詢 Final Query with filters, time range, sorting
解法 2
Alert 來自 Grafana
Grafana MCP
Grafana URL ↓ 解析 URL 取出 Dashboard ID, Panel ID
↓使用 Grafana MCP 抓出 Datasource 的 ElasticSearch DSL ↓ 呼叫 ElasticSearch MCP 查詢 LOG
「不要仰賴 AI 的推理,該寫工具的就寫工具」
Kubectl AI MCP
•bash •kubectl
需要人為介入
Issue Report: 讓 LLM 用你聽得懂的話講
給 LLM 足夠的 Domain 知識以及 System Architecture
公司內有很多的 Domain Term LLM 如果不知道就容易有幻覺
最後 你可以得到像這樣的 issue report
就算這些做完了 ... 其實還是有一些 ... 坑
Context 根本是錯的!!!
Case 1. 工程師複製貼上,修改了邏輯 但沒有改 Exception 時的 Error Log 內容
Case 2. 使用者看到 404 畫面 但 log status code 是
200
Future & Feature
AI 小隊在哪?
@Mention 的魔法
🧑💻 @Bot 幫我… 🤖 Justin Bot
🧑💻 @Justin 這是 ... 🤖 Justin Bot
🧑💻 @Bot 這裡還有些 額外資訊 ... 🤖 Justin Bot
🧑💻 @Justin 根據新的 資料我發現 ... 🤖 Justin Bot
你看到未來的可能性了嗎?
🧑💻 🤖 Justin Bot
🤖 🤖 Bot J Bot B A2A @BotJ … @BotB
…
🧑💻 👩💻 👨💻 大 Issue 時 Dept. A Dept. B
Dept. C
🤖 🤖 🤖 AI Squad Team Dept. A Dept. B
Dept. C
Slack ChatBot 玩 Avalon
滿意度調查
Junior 滿意度遠大於 Senior
現在的 Agent 還是在整理資訊 足夠經驗的 Senior 可能一看到 Alert 就知道該做什麼了
下一步需要讓 Agent 真的能「修」 Senior 作為把關者確保東西不會改壞
總結
AI 很厲害 但它就像一個剛到職的 Super Junior 看得懂錯誤訊息,可以解釋錯誤訊息 可是對系統一點都不了解
希望它能在值班時幫上忙 還是回歸工程本質 用現代化的技術讓 AI 可以取得足夠的 Context
Threads & Medium: debuguy.dev 如果想看開發過程的細節故事 歡迎閱讀鐵人賽 30 天 - AI
產品與架構設計之旅:從 0 到 1,再到 Day 2 系列 願大家面對 issue 都能 『從從容容,游刃有餘』