跳到主要內容
yoAkyoku
← Work

民宿 AI 客服與知識庫平台

以 LINE OA 為入口的多租戶 AI 客服。LangGraph 做意圖路由,向量加 BM25 做混合檢索,沒有證據就轉人工。

  • AI / LLM
  • RAG
  • Agents
Contents

概述

商業專案,工作室負責 AI 應用與後端。這是一套以 LINE 官方帳號為入口的民宿客服:使用者問房型、房間細節、聯絡方式、預約或一般問題;明確要求真人或系統找不到足夠資料時,轉給人工客服,不讓 Agent 硬湊答案。

問題

三件事同時要成立。第一,房型名稱、政策名稱這類專有名詞,只靠向量搜尋不一定抓得準。第二,同一句話在不同民宿有不同答案,租戶不能只在登入時判斷一次。第三,AI 沒有證據時,需要一條安全的退路。

解法

FastAPI 接 LINE Webhook 並處理重複事件。LangGraph 把訊息分到房型、房間詳情、聯絡、預約、一般問題或人工轉接。檢索走向量搜尋加 BM25,再用 Weighted RRF 合併。Tenant Context 沿著整條路由往下傳。

系統架構
LINE Messaging API ──▶ FastAPI Webhook(驗證、去重)
                            │
                            ▼
                     LangGraph Agent ──▶ Intent Routing
                       │        │            │
                  民宿資料工具   RAG        人工轉接
                       │        │
                       ▼        ▼
                  PostgreSQL   pgvector + BM25 + RRF

主要功能

  • LINE Webhook 接收、驗證與重複事件處理
  • 意圖路由:房型、房間詳情、聯絡、預約、一般問題、人工轉接
  • 民宿資料工具與知識庫分離,房型與聯絡資訊不塞進 Prompt
  • 文件解析、Chunking、PII Masking、Embedding 與索引
  • 向量搜尋、BM25 與 Weighted RRF 在同一條檢索流程
  • Tenant Context、權限與 Provider 錯誤狀態

架構

RAG Pipeline
PDF / DOCX / Markdown ──▶ Parse ──▶ OCR 噪音過濾 / PII 處理 ──▶ Chunking ──▶ Embedding ──▶ pgvector
                                                    └──────────────────────────────────▶ Lexical Index

使用者問題 ──▶ Query Rewrite ──┬──▶ Vector Search ──┐
                               └──▶ BM25 ───────────┴──▶ Weighted RRF ──▶ Grounded Context ──▶ Agent
LINE Agent 流程
訊息進來
  ├─ 要求真人?──────────────────────▶ 人工客服
  ├─ 房型 / 房間 / 聯絡 / 預約 ──▶ 民宿資料工具 ──▶ 回覆
  └─ 一般問題 ──▶ RAG
                    ├─ 證據足夠 ──▶ 回覆(附來源)
                    └─ 證據不足 / Provider 失敗 ──▶ 安全 fallback ──▶ 人工客服

工程決策

混合檢索不是為了好看

向量搜尋對語意好,對精確字詞弱。房型名稱、政策名稱和民宿自己的用語,BM25 抓得比較穩。兩邊各取前 N 再用 RRF 合併,補的正是 semantic search 會漏的那一段。

租戶要跟著每一則訊息走

Webhook 收到訊息後,租戶、使用者、知識來源與工具沿著同一條路由傳到底。少傳一段,就可能拿到另一間民宿的房型或政策。

沒有證據時,轉人工比亂答好

檢索結果不足、Provider 失敗,或使用者直接要求真人,回覆進入安全 fallback。用一段看起來很確定的文字蓋過問題,對民宿來說是負債。

畫面

房源名稱、帳號頭像與其他識別資訊已遮罩。

LINE 房型列表回覆
房型列表與房間資訊
LINE 景點與入住資訊回覆
景點、交通與入住資訊

技術

Python、FastAPI、LangGraph、PostgreSQL、pgvector、BM25、RRF、LINE Messaging API、LLM。

結果與心得

  • 文件先切分、處理敏感資料、再 Embedding,查詢流程就不必回頭擔心資料品質。
  • 文件匯入規模再增加時,背景處理要改成持久化 Queue 與獨立 Worker。

公開範圍

不含正式流量、第三方 SLA 或客服準確率數字。