Ian Chou's Blog

The AI Copilot:打造智能電商後台

在這篇文章中,我們將深入探討這個 Astro EC Site 的「大腦」—— 後台 AI (The AI Copilot) 的設計思路。此系統專為 SOHO 電商(SKU < 100) 量身打造,我們的目標是協助這些精簡團隊從一個基礎的管理介面,進化為一個能夠理解自然語言、主動提供建議,甚至擁有「長期記憶」的智能助手中樞。

1. 基礎架構:從管理介面開始

任何電商系統的基礎都是一個堅實的管理後台 (Admin Panel)。在我們的架構中,前端使用了 Next.js,並搭配 Vercel AI SDK 來實現與管理者的自然語言互動。

為什麼選擇 Vercel AI SDK?

對於目前的需求——例如「查詢庫存」、「修改價格」、「統計營收」——Vercel AI SDK 展現了極大的優勢:

  1. Web 整合與精確控制:它與 Next.js 完美整合,並提供極佳的串流 (Streaming) 體驗。
  2. 結構化數據的操作能力:進銷存系統需要的是精確的操作。庫存不能算錯,價格不能亂改。
  3. Tools (Function Calling):我們透過定義明確的 Tools(如 listLowStockProducts, updateProductPrice),讓 AI 負責「決定何時呼叫」以及「提取參數」,而具體的 SQL 邏輯則由我們親自撰寫(使用 Drizzle ORM)。這保證了業務邏輯的正確性與安全性。

目前的架構證明,對於處理資料庫這類 結構化數據,Vercel AI SDK 是非常足夠且高效的。

2. 進階能力:LangChain 與網路爬蟲

雖然 Vercel AI SDK 在內部資料處理上表現優異,但當我們需要 AI 走出資料庫,去與外部世界互動時,LangChain 就派上了用場。

應用場景:競爭對手價格監測

試想這樣一個場景:給 AI 一個競爭對手的網頁,請它爬取價格並建議我們是否降價。

這是一個典型的 Agent (代理人) 任務,需要跨平台的複雜操作:

  1. 瀏覽網頁:AI 需要訪問外部 URL。
  2. 解析內容:從 HTML 中提取價格資訊。
  3. 邏輯判斷:比較我方成本與對手價格。
  4. 執行行動:建議調整價格或直接發送通知。

LangChain 的優勢在於它擁有現成的 WebBrowserGson 等工具,以及強大的 Chain of Thought (思考鏈) 編排能力。雖然這會增加一些 Bundle Size,但對於需要「幫我分析庫存,然後上網搜尋競爭對手價格,接著寫給特定客戶促銷 Email,最後串接 Gmail API 寄出」這類複雜任務,LangChain 是不二之選。

這些功能強化了銷售能力,但也增加了營運成本。因此,我們將 LangChain, LlamaIndex 定位為擴充功能,基礎系統並不包含此功能。我們選擇在確實有這些 Agent 需求時再進行掛載。

3. 記憶管理 (Advanced Memory):讓 AI 擁有長期記憶

目前的 Chat 大多是短暫的 (Session based)。使用者關掉視窗,AI 就忘記了剛剛的對話。但對於一個隨身助理來說,我們希望它擁有「長期記憶」:

「你記得上個月我說過不想再進貨這款商品了嗎?」

為了實現這一點,我們引入了 Vector Database (向量資料庫)。

實作原理

  1. Embedding:將使用者的每一次對話、決策(如「不再進貨某商品」)轉化為向量 (Vectors)。
  2. Storage:將這些向量儲存到 Vector DB 中。
  3. Retrieval:當使用者再次提問時,系統會先去 Vector DB 檢索相關的歷史記憶,將其作為 Context 餵給 AI。

LangChain 在這方面有很成熟的封裝,能協助我們輕鬆將對話歷史向量化並隨時檢索,讓 AI 真正「記得」你的偏好。

4. 擴展知識邊界:LlamaIndex 與 RAG

如果說 Vercel AI SDK 是處理「資料庫」的專家,LangChain 是處理「外部工具」的行家,那麼 LlamaIndex 就是處理「非結構化文件」的王者。但在實際開發中,我們得問一個實際問題:「解析 PDF 真的需要這麼重的框架嗎?」

Vercel AI SDK 單獨解析足夠嗎?

對於 SOHO 電商(SKU < 100)的簡單需求,例如從發票 PDF 提取訂單號與金額,Vercel AI SDK 確實足夠。這屬於「單次提取」任務:上傳發票,用 generateObject 搭配 Zod schema 抓取資料,存入資料庫,結束。無需索引,成本極低。

// 純 AI SDK:單次提取
const { invoiceNumber, amount } = await generateObject({
	schema: zInvoiceSchema,
});

LlamaIndex 的真正價值:從「提取」到「洞察」

然而,當文件開始累積(每月 100+ 張發票/報價單),或者我們需要更深入的分析時,LlamaIndex 的價值就浮現了:

  1. 歷史查詢:不只是解析,還能問「查詢上個月所有發票的平均成本?」。這需要自動檢索 (Retrieval) 舊檔案,而非每次重新上傳。
  2. 複雜表格:標準 PDF 解析器(如 PyPDF)常漏掉表格數據,而 LlamaParse 能精準提取複雜的報價單表格。
  3. 競爭商品分析:這是 SOHO 最有感的應用。給 AI 一份「Amazon 競爭對手價格報告.pdf」,建立索引後,AI 能比較自家成本與對手報價,輸出如「建議降價 10% 以搶市占」的策略建議。
// LlamaIndex 輕量:提取 + 索引(只需加幾行)
const parser = LlamaParse();
const nodes = await parser.loadData(pdfPath);
const index = VectorStoreIndex.fromDocuments(nodes);

從 Vercel AI SDK 的輕量提取起步,隨著業務擴張再掛載 LlamaIndex 進行全文件問答,這是一條最適合個人開發者的演進路徑。

5. 全通路管理 (Omnichannel):把後台裝進口袋 (Telegram / Slack)

管理後台不應該只能在電腦前操作。為了讓管理者能更即時地掌握狀況,我們可以將這個 AI Copilot 整合進 TelegramSlack 等即時通訊軟體。

即時互動的新形態

透過整合 Chat App,我們的 AI 就不再是被動等待查詢的工具,而是主動彙報的貼身秘書:

  1. 主動警示 (Instant Alerts):「警示:商品 X 庫存告急(剩餘 5 件),建議立即補貨。」當系統偵測到異狀,直接推送到你的手機。
  2. 快速決策 (Quick Actions):你可以直接回覆:「/restock 50」,AI 就會呼叫後端的 updateStock tool 執行補貨,完全不需要打開網頁後台。
  3. 每日晨報 (Daily Briefing):每天早上通勤時,Telegram 會自動跳出昨天的營收報表與今日的待辦事項。

技術實作

這部分的技術堆疊非常輕量且現代:

這讓你的進銷存系統真正實現了「把後台裝進口袋」,隨時隨地都能運籌帷幄。

總結與技術選型分析

綜上所述,我們的技術選型策略如下:

  1. Vercel AI SDK + Drizzle ORM

    • 核心強項:Web 整合與精確控制。
    • 定位:專案的基石。負責所有與「進銷存資料庫」直接相關的操作(查詢、修改、統計)。輕量且高效。
  2. LangChain

    • 核心強項:通用代理人 (Agents) 與複雜邏輯編排。
    • 定位:外掛模組。當需要跨平台任務(爬蟲、Email、整合第三方 API)時引入。
  3. LlamaIndex

    • 核心強項:資料檢索 (RAG) 與非結構化資料處理。
    • 定位:知識庫引擎。當系統需要處理 PDF、Word 等非結構化文件,或建立企業知識庫時引入。

這樣的層次化架構,確保了我們既能擁有極致的效能與控制力,又能在未來靈活擴展出超強的 AI 能力。