iT邦幫忙

2025 iThome 鐵人賽

DAY 10
0
生成式 AI

AI 產品與架構設計之旅:從 0 到 1,再到 Day 2系列 第 10

Day 10: 九天 ChatBot 煉成 - 從 0 到 1 的造物日誌

  • 分享至 

  • xImage
  •  

嗨大家,我是 Debuguy。

前面九天我們一路從最簡單的 Bot + LLM,逐步建構出一個具備多人協作、工具整合、透明思考的 Slack ChatBot。今天來回顧這個「從 0 到 1」的完整旅程,看看我們到底創造了什麼東西。

Why: 為什麼要做這個 Project?

真實的痛點

想像這個場景:公司有多個產品部門,每個部門都有自己的 domain 和資料。當發生跨部門的 issue 時:

  1. 開個會議,拉所有相關人員
  2. 各自查 log,每個團隊報告發現
  3. 拼湊問題,整個過程至少 2-3 小時

「LLM 最擅長的就是處理大量文字資料啊!如果每個產品部門都有自己的 Bot,專門負責分析自己的 log,然後讓這些 Bot 自己討論問題...」

從複製到創造的思維轉換

引用 Peter Thiel 的《Zero to One》:世界上的進步分兩種,從 1 到 n 是複製,從 0 到 1 是創造。

  • 第 n+1 個自動化工具:機械回應,執行指令
  • 真正的對話夥伴:理解脈絡,協作思考

架構設計的三個核心信念

  1. 讓專業的 Bot 做專業的事,然後讓它們協作
  2. 善用現有的基礎設施,而不是重新發明輪子
  3. 以終為始的產品思維,從未來願景回推設計

How: 我們是怎麼做的?

設計哲學:三個核心原則

原則一:配置外部化

所有容易變動的都外部化:

  • Prompt 和模型參數 → prompts/chatbot.prompt
  • MCP 工具配置 → config/mcp-config.json
  • 環境變數 → .env

原則二:責任分離,模組化設計

三層架構,各司其職:

  • Slack 層:處理訊息格式和社交邏輯
  • GenKit 層:處理 LLM 對話和工具整合
  • 配置層:定義 Bot 行為和可用工具

讓未來要實際部署時,可以依照需求拆成不同的 image 部署

原則三:讓複雜功能自然湧現

不寫複雜的協作系統,而是設計簡單的互動規則:

  • Bot 知道自己是誰 → 身份認知能力
  • Bot 會 tag 回使用者 → 創造互動循環
  • Bot 能讀懂對話歷史區別不同的人 → 自然形成協作

技術實現:三個關鍵設計

設計一:身份認知系統

從工具人到對話夥伴的關鍵:

Your Slack ID is {{botUserId}}.
You are not just executing commands; 
you are participating in conversations as a helpful team member.

設計二:天然對話容器

利用 Slack Thread 作為對話儲存:

  • 零維護成本:Slack 負責儲存和備份
  • 天然整合:符合使用者既有習慣
  • 歷史紀錄:透過 thread_ts 取得完整對話

省下的程式碼:

  • 不用設計資料庫 Schema
  • 不用處理對話狀態管理
  • 不用考慮分散式同步問題

設計三:透明思考過程

從黑盒子到玻璃屋:

thinkingConfig:
  includeThoughts: true    # 讓內心獨白現形
  thinkingBudget: -1       # 動態思考預算

讓焦慮等待變成有趣觀察,同時解決了除錯困難的問題。

架構演進:三個重要轉折

轉折一:從單輪到多輪對話

核心作法: 將 Slack Thread 轉換為 LLM 標準對話格式

// 訊息分組:處理連續訊息和角色識別
function organizeMessages(messages) {
  const role = m.user === process.env['SLACK_BOT_USER_ID'] ? 'model' : 'user';
  // 自動合併同角色的連續訊息
  // 轉換為 LLM 的對話格式
}

轉折二:從單人到多人協作

核心作法: System Prompt 的社交智慧

- Identify who mentioned you in the latest message
- Consider the conversation history between you and that user  
- Other users' messages provide context but use careful judgment

無心插柳,柳橙汁: N-N 多 Bot 協作,完全沒有額外的協作程式碼!

轉折三:從聊天到行動

核心作法: MCP 工具生態系統整合

const tools = await host.getActiveTools(ai);
const resources = await host.getActiveResources(ai);
// LLM 自動決定是否使用工具
toolChoice: 'auto'

從「我無法查看網頁」到直接提供颱風假查詢結果。

What: 我們創造了什麼?

產品層面:三個核心價值

價值一:AI 協作夥伴

不是工具,是夥伴:

  • 有身份認知,知道自己是誰
  • 有社交能力,能處理多人場景
  • 有協作能力,能與其他 Bot 配合

價值二:可觀測的 LLM 系統

透明的思考過程:

  • 使用者能看到 LLM 如何分析問題
  • 開發者能即時診斷推理問題
  • 團隊能學習更好的提問方式

bonus: 看 LLM 思考其實滿有娛樂性的,等待變成了享受

價值三:零學習成本的 AI 工具

像跟同事聊天一樣簡單:

  • 使用既有的 Slack 介面,不用學習新工具
  • 自然語言互動,不用記憶複雜指令
  • 透明的思考過程,不用猜測 AI 在做什麼

降低 AI 使用門檻:

  • 任何會用 Slack 的人都能立即上手
  • 不需要技術背景就能享受 AI 協助
  • 從 mention 一個 Bot 開始,就能獲得服務

技術層面:三個關鍵成果

成果一:零維護的基礎設施

我們不用管理:

  • 對話儲存和備份(Slack 負責)
  • 認證和權限(Slack 負責)
  • 各家 LLM API 的呼叫和重試(GenKit 負責)

節省的工作量: 相當於一個完整的後端服務 + 資料庫 + 認證系統

成果二:可擴展的工具生態

MCP 標準化整合:

  • 工具配置外部化
  • 自動工具發現和註冊
  • 統一的錯誤處理機制

成果三:可成長的架構

同樣的 code,不同的能力:

  • 新增工具 → 只需修改配置檔
  • 調整行為 → 只需修改 Prompt
  • 增加 Bot → 複製環境變數即可

架構的可持續性:

  • 只有配置在變化,為將來使用容器化部署鋪路
  • 模組化設計讓團隊能獨立開發不同功能
  • 責任分離讓系統能隨業務需求進化

下一階段:從原型到生產

「從 0 到 1」的原型階段已經完成,但真正的挑戰才開始:

接下來要面對的現實:

  • 如何將本地開發的 ChatBot 部署到生產環境?
  • 如何處理 API Key 安全性和成本控制?
  • 如何監控 LLM 的行為和效能表現?

小結

九天來,我們創造的不只是程式碼,而是一套完整的原型和方法論:

Why: 解決真實的跨部門協作痛點
How: 讓複雜功能自然湧現的設計哲學
What: 會思考、會協作、會成長的夥伴原型

現在我們有了一個可運作的原型,接下來就是面對生產環境的現實挑戰,進入到 Day 1 了。


完整的實驗記錄都在這個 GitHub Repo 中,歡迎大家下載來玩!


AI 的發展變化很快,目前這個想法以及專案也還在實驗中。但也許透過這個過程大家可以有一些經驗和想法互相交流,歡迎大家追蹤這個系列。

也歡迎追蹤我的 Threads @debuguy.dev


上一篇
Day 9: 讓 AI 思考過程透明化 - 從黑盒子到玻璃屋
下一篇
Day 11: 從原型到產品 - 檢視原型缺陷規劃生產環境
系列文
AI 產品與架構設計之旅:從 0 到 1,再到 Day 212
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言