- 個內部服務
- 9
- 行 Python 程式碼
- ~175K
- 種語言,共用一個知識庫
- 9
- 個白名單助理工具
- 10
- 每次 AI 回答的成本(牌價)
- US$0.004
- 的程式碼屬於 AI 層
- ≈3%
客戶
從客戶退貨,到貨退客戶
Atravesar Services 是一家加拿大電子產品維修、翻新與逆物流公司,辦公室位於列治文山,維修中心與倉庫位於萬錦,並透過快遞服務全加拿大。公司為製造商與零售商提供 B2B 代管維修與退貨方案,也提供直接面向消費者的郵寄維修;同時是 Narwal(雲鯨)在加拿大的獨家授權售後服務商,並支援 ECOVACS(科沃斯)與 Segway/Ninebot。
團隊每天回答同樣的問題:我的包裹在哪裡?錯誤代碼 E12 是什麼意思?在魁北克含稅要多少?我的工單開始維修了嗎?這些答案全都已經存在——在某份文件、某個資料庫,或某家貨運業者的 API 裡。需求很明確:讓軟體安全地、全天候、用客戶的語言回答這些問題。
-
列治文山辦公室 · 萬錦維修中心與倉庫 · 透過快遞服務全加拿大
-
Narwal(雲鯨)加拿大獨家授權售後服務商 · 支援 ECOVACS(科沃斯)與 Segway/Ninebot
-
掃地機器人 · 電動滑板車 · 智慧型手機 · 平板 · 筆電 · 遊戲機 · 小家電
-
EN简体繁體日本語한국어Tiếng ViệtESITFR
設計原則
AI 負責閱讀、理解與對話。軟體負責決策、記錄與付款。
整個架構畫出一條明確的界線。AI 助理層位於日常工作流程之上,只能透過窄而具名、有日誌的門——工具與 API——接觸業務系統。底層則是具備身分驗證、授權與稽核記錄的一般軟體,負責決定價格、記錄工單與移動金錢。
-
AI 助理層
閱讀、理解、查詢、回答——用對方的語言,全天候服務。
-
窄而具名、有日誌的門
訂單、付款、倉儲、運送、追蹤與客服,只能透過附 JSON schema 的白名單工具存取。模型從不碰資料庫。
-
安全與控管
身分驗證(你是誰?)、授權(你可以看什麼、做什麼?)與稽核記錄(發生了什麼——有日誌、可稽核)。
原本就在運作這家公司的系統
九個服務、約 17.5 萬行 Python
網站只是看得見的部分。在它背後,SolvoSync 設計並維運著支撐整家公司的平台——倉儲與 RMA 管理、多家貨運業者的運送、付款與稅額、身分、設備檢查與製造商系統整合。AI 層約占整個程式碼庫的 3%;其餘的一切,都是它所繼承的紀律。
-
7.7K LOC
www · 公開網站
9 種語言 · 服務頁面與指南 · 保固外(OOW)線上表單 · 聊天機器人元件 · 管理端知識上傳 · llms.txt
-
59.5K LOC
Flow · WMS / RMA
收貨 · 庫存 · 零件 · RMA · 出貨單 · 棧板 · ECOVACS ESB · Mammotion FS Cloud · LSS · 31 個測試檔
-
50.6K LOC
Fulfill · 運送
UPS · Canpar · Canada Post · Purolator(ShipEngine)· Freightcom · 運費、標籤、取件、艙單、追蹤 · EDI 210 帳單稽核
-
5.2K LOC
Payment · 付款與稅額
Stripe Checkout + webhooks · 依郵遞區號計算加拿大稅額(GST/HST/PST/QST)· 發票存至 S3 · 每週報表
-
2.6K LOC
SSO · 身分
帳號 · OAuth2 client-credentials · 角色 ADMIN、CUSTOMER、DEALER、RECEIVER、REPAIR、TECH、SHIPPER · 廠商範圍
-
35.4K LOC
Track · 數位系統
早期的庫存/RMA 系統 · React + TypeScript 前端
-
10.0K LOC
Maintain · 設備檢查
檢查表、照片、簽名、排程報表
-
2.8K LOC
Mammotion · 製造商腳本
FS Cloud 送修、備品、RMA 與待出貨匯出
-
0.6K LOC
盤點
掃描 AVS 標籤 ↔ EAN、標記缺少的機台、匯出 Excel
- AWS EC2 (Ubuntu)
- RDS MySQL
- S3
- Redis
- nginx + gunicorn
- Flask
- React + TypeScript
- Qdrant
- Gemini API
- Stripe
- Google Places
LOC = Python 行數,不含虛擬環境、migration 與第三方套件(2026 年 10 月統計)。
AI 助理層
Gemini + RAG + MCP:AI 助理接在哪裡
AVS 助理部署於 www.atravesar.ca,受工作階段權杖與速率限制保護。它以 Gemini Flash 搭配函式呼叫運作(每個回答最多四輪工具呼叫),從 Qdrant 向量資料庫檢索知識,並透過 MCP 與函式端點查詢運送、稅額與身分——每個端點都有自己的驗證、限制與日誌。
-
1
知識助理(RAG)
員工在管理頁面上傳 PDF、Markdown 或純文字。文件被分段(每段約 1,000 字元、重疊 150 字元),以 gemini-embedding-001 嵌入為 768 維向量並儲存在 Qdrant。每個問題依餘弦相似度檢索前五個段落,模型據此回答並註明來源。英文文件就能回答九種語言的問題。
-
2
工具型助理(函式呼叫與 MCP)
工具 = 名稱 + 說明 + JSON schema。模型選擇工具與參數,我們的程式碼以 OAuth2 服務權杖執行,模型再解釋結果。貨件 MCP 伺服器採用 MCP over Streamable HTTP(JSON-RPC 2.0),因此同一個整合今天服務網站聊天機器人,明天服務桌面 AI 用戶端中的員工助理,之後再服務持有限定金鑰的合作夥伴代理。
-
3
流程自動化(沒有模型)
付款確認 → 建立標籤 → 建立工單 → 寄送電子郵件。價格、稅額、編號與階段轉換的規則都寫在確定性、有測試的程式碼裡——金錢與紀錄在這裡流動。
實際部署的工具目錄
設計規則 #1:模型從不碰資料庫——它只能請求工具。
| 工具 | 執行位置 | 功能 | 防護欄 |
|---|---|---|---|
| search_knowledge_base | www → Qdrant | 語意搜尋,回傳前五個段落並附來源與標題。 | 唯讀;要求模型註明來源、絕不捏造。 |
| share_oow_webform | www | 以使用者的語言回傳保固外表單的網址。 | 模型不得在聊天中收集表單欄位。 |
| list_provincial_tax_rates calculate_tax |
Payment | 依省份或郵遞區號計算 GST/HST/PST/QST;區分商品與服務。 | 確定性的 Decimal 運算;模型從不計算稅額。 |
| rate_shipment track_shipment |
Shipment MCP (fulfillapi) | 貨運業者運費;以 UPS 1Z/Canpar D/Canada Post PIN 或客戶參考編號追蹤。 | OAuth2 服務權杖;唯讀。 |
| email_waybill validate_address |
Shipment MCP (fulfillapi) | 將標籤重新寄到檔案中的地址;以 Google 驗證地址。 | 只寄給該貨件的聯絡人;僅限加拿大/美國。 |
| get_account_info get_account_access |
SSO MCP | 帳號資料,以及使用者可查看哪些廠商的資料。 | 伺服器端權杖;限定廠商範圍。 |
| clear_chat_history | www | 清除此瀏覽器的對話。 | 僅限本工作階段。 |
限制:每個回答最多 4 輪工具呼叫 · 每個工具結果 ≤ 12,000 字元 · 每次搜尋 5 個段落 · 沒有任何工具寫入資料庫 · 沒有任何工具移動金錢。
一個流程,端到端
保固外(OOW)維修旅程
AI 在開頭與結尾——負責對話。中間是普通、可測試的軟體。由小團隊在公司既有的系統上建成。
-
客戶問助理:「我的 Narwal 過保了——可以修嗎?」share_oow_webform 工具以客戶的語言回傳表單連結;聊天中不收集任何個人資料。
-
四步驟線上表單收集裝置、問題與地址(經 Google Places 驗證),可選擇自行送件或寄件。
-
報價由程式碼計算:$40 檢測費、由付款服務依郵遞區號計算的稅額,以及最低的即時快遞運費(並行查詢各貨運業者)加上固定加成。
-
以 Stripe Checkout 支付檢測費與運費;PDF 發票(15 天付款條件)以電子郵件寄出。
-
經驗證的 webhook 建立工單 AVSOOW{YYMMDD}####,並在 Flow 中開啟為「Receiving」階段;以最便宜的貨運業者建立寄件標籤,連同 QR code 寄給客戶。
-
收到裝置並檢測後發出維修報價,透過第二筆 Stripe 付款完成,工單進入「Repair」階段。
-
修好的裝置寄回,追蹤號碼以電子郵件寄出——全程由助理透過貨件 MCP 回答「我的貨件在哪裡?」。
大部分價值來自平凡的自動化
我們刻意不用 AI 的地方
- 定價與稅額
- 付款服務中的 Decimal 運算、銀行家捨入法,以及依郵遞區號前綴套用的各省規則。
- 貨運業者選擇
- 規則:郵政信箱 → Canada Post;特定製造商 → Canpar;UPS 達速率限制 → 備援;其餘取最低即時運費。
- 工單與階段
- Flow 中的唯一編號與階段狀態機(Receiving → Repair → ……),由 31 個測試檔覆蓋。
- 帳單稽核
- 每晚解析 EDI 210 帳單(UPS、Canpar)並與報價比對,自動產生超收報告。
- 付款與身分
- Stripe Checkout 搭配經驗證的 webhooks,發票與收據存至 S3;SSO 含角色、服務間 OAuth2 client-credentials 與員工 MFA。
- 排程作業與製造商系統整合
- 每個工作日追蹤兩次、每週寄出警示郵件、每天匯入製造商工單三次;ECOVACS SEEBURGER ESB、Mammotion FS Cloud 與 LSS——靠契約,不靠對話。
經驗法則:如果輸出必須完全正確、可重複,而且要能向會計師或律師解釋——那就是程式碼的事。AI 在旁邊負責解釋與導引。
底層的安全與控管
身分驗證、授權、稽核記錄
身分驗證——你是誰?
- 員工與合作夥伴使用 SSO;運送系統登入需 MFA。
- 服務之間使用 OAuth2 client-credentials 權杖(Fulfill、Payment、SSO)。
- 聊天機器人工作階段:綁定 IP 與瀏覽器的 HttpOnly JWT,30 分鐘有效;同源檢查與 Redis 黑名單防濫用。
授權——你可以看什麼、做什麼?
- 角色 ADMIN、CUSTOMER、DEALER、RECEIVER、REPAIR、TECH、SHIPPER;合作夥伴只看得到自家的資料。
- 模型不持有任何憑證——只有白名單上的工具。
- 工具皆為唯讀,例外只有:把標籤寄給該貨件自己的聯絡人;清除自己的聊天紀錄。
稽核記錄——發生了什麼?
- 每一輪對話都記錄:工作階段、問題、回答、使用的工具、模型版本;可匯出 CSV。
- Stripe webhooks 經驗證;付款事件與發票皆儲存於 S3。
- 每晚以 EDI 210 對帳貨運帳單與報價;每週自動報表。
這些都不是 AI 專屬的。這是你本來就該有的紀律——AI 層只是直接繼承。
成果
它帶來了什麼
-
客戶能以九種語言、全天候取得關於保固、錯誤代碼、稅額、貨件與維修流程的答案,並附上來源。
-
保固外收件從第一個問題一路跑到已付款的工單,員工不必再手動輸入報價、標籤或電子郵件。
-
同一個 MCP 整合今天服務網站助理,也已準備好服務員工與合作夥伴的助理——不需要第二套整合。
-
每次回答的成本以美分計:依牌價約 US$0.004,每月 10,000 個回答約 US$45。
-
每一輪對話都記錄使用的工具與模型版本——品質靠閱讀日誌與修正文件提升,而不是重新訓練。
誠實的工程:我們預先規劃的故障模式——以及實際發生了什麼
- 幻覺
- 以檢索到的段落為依據、事實一律強制查詢、溫度 0.4、轉交電子郵件。實際發生:早期營業時間與地址的回答來自一般知識——以強制查詢規則修正。
- 提示詞注入
- 政策式提示詞與受 schema 約束的工具;沒有敏感功能可解鎖——沒有電話名單,也沒有付款工具。實際發生:有人嘗試;因為能力範圍窄,拒絕都守得住。
- 服務中斷
- 工具錯誤以資料形式回傳,機器人繼續依知識庫回答;並行查詢各貨運業者並有規則式備援。實際發生:貨運業者 API 達速率限制 → 切換備援業者。
- 模型漂移
- 浮動的模型別名會在你不知不覺中改變語氣、長度與工具使用。每一輪都記錄模型版本,並在每次變動時重跑一組真實問題的回歸測試集。
如果能回到一年前,我們會告訴自己的事
九個工程教訓
-
01
從收件匣裡已有的問題開始——而不是從技術開始。
-
02
工具優先於提示詞:當模型需要「知道」動態資訊時,加一個工具,而不是加一段文字。
-
03
讓知識庫保持平凡:就用員工本來就在維護的 PDF 與 Markdown。
-
04
鎖定模型、記錄版本——浮動別名會在你不知不覺中改變行為。
-
05
優雅降級:工具錯誤就是資料;依賴服務當機時機器人仍要能運作。
-
06
所有東西都設上限——輪數、字元、token、速率。無上限的消耗是一張真實的帳單。
-
07
金錢放在 Stripe 與表單後面,絕不放在聊天視窗後面。
-
08
採用標準:MCP + OAuth2 讓整合能被我們還沒做出來的用戶端重複使用。
-
09
先做管理頁面:上傳文件、閱讀日誌——品質就是從這裡來的。
免費附贈第十條:把系統提示詞當政策來寫——版本化、審閱、像程式碼一樣測試。
現場發表
NATEA 多倫多 · AI 在中小企業的用武之地
- 60 分鐘 · 演講與現場示範 · 線上
講者:Nelson Lai — SolvoSync · Atravesar Services 技術長
2026 年 10 月 21 日(線上)的 60 分鐘演講與現場示範,實地看一家零售企業如何在 atravesar.ca 上運作,以及 AI 真正派上用場的地方:2026 年加拿大統計局關於中小企業 AI 採用的數據、三種模式——知識、工具、自動化——兩場正式環境示範、加拿大的安全與隱私檢查清單,以及四週入門計畫。
19% 的加拿大企業使用 AI,25% 計畫使用,40% 認為與自己無關。真正的關聯,就在你的收件匣裡。
關於這個專案,大家常問的問題
如何防止助理捏造答案?
事實只來自檢索到的段落或工具,絕不來自模型的記憶:系統提示詞強制地址、營業時間與政策一律查詢知識庫,溫度設為 0.4,工具無法回答時助理會轉交電子郵件。早期關於營業時間的回答來自一般知識;強制查詢規則修正了這個問題。
一次 AI 回答要花多少錢?
依 2026 年 10 月牌價,一次回答(約 12,000 個輸入 token 加 300 個輸出 token)約 US$0.004,因此每月 10,000 個回答約 US$45。真正的成本是工程與內容維護,而不是 token。
我的公司能重複使用這套做法或 MCP 伺服器嗎?
可以。工具層建立在開放標準上——MCP over Streamable HTTP 搭配 OAuth2 client-credentials——因此同一組伺服器可以服務任何助理。SolvoSync 為其他中小企業打造同樣的模式:從收件匣裡已有的問題開始,四週內上線一個管道,先衡量再宣稱。
個人資料如何處理?
個人資料遠離聊天視窗。助理把使用者導向附同意條款、驗證與 Stripe 的表單;機密只留在伺服器端;工作階段是綁定 IP 與瀏覽器的 HttpOnly 權杖;每一輪對話都連同模型版本記錄。設計遵循 PIPEDA 與魁北克第 25 號法案的原則:模型不做決定——程式碼與人才做。