前言

ChingTech OS 是一個功能完整的企業內部管理平台,但它太重了——要有帳號系統、NAS、專案管理,不適合拿來給一般人當 AI 助理用。

ctos-lite 是它的輕量獨立版,專注在一件事:讓每個 LINE 使用者加好友就能擁有自己的 AI 助理。 不需要註冊、不需要密碼、不需要設定——傳第一則訊息的瞬間,系統就幫你建好帳號、知識庫、記憶空間。

核心功能:

  • AI 對話:Claude 驅動,可自訂名字、語風、人設
  • 個人知識庫:Markdown 格式的筆記系統,AI 隨時查閱
  • 長期記憶:AI 主動記住你的偏好和習慣
  • 語音互動:語音訊息自動轉文字,也能叫 AI 唸給你聽
  • 媒體下載:貼 YouTube/TikTok 連結,AI 幫你下載和轉錄
  • 群組支援:群組裡每個人有各自獨立的 AI

零註冊怎麼做到的?

LINE user ID 就是帳號。使用者傳第一則訊息時,系統自動建立一切:

# upsert:有就更新,沒有就建立
await conn.execute("""
    INSERT INTO users (line_user_id, display_name, picture_url)
    VALUES ($1, $2, $3)
    ON CONFLICT (line_user_id) DO UPDATE
    SET display_name = $2, picture_url = $3, last_active_at = NOW()
""", user_id, display_name, picture_url)

同時自動建立使用者的檔案目錄:

data/{line_user_id}/
├── profile.json      # AI 人設(名字、語風、暱稱)
├── knowledge/        # 個人知識庫(Markdown 檔案)
├── memory/           # 長期記憶
├── uploads/          # 上傳的檔案
├── tts/              # 語音快取
└── media/
    ├── downloads/    # 下載的影片
    └── transcriptions/  # 轉錄文字

所有檔案操作都經過 safe_resolve() 路徑檢查,確保使用者只能存取自己的目錄,防止 path traversal 攻擊。


架構

技術 說明
LINE Bot line-bot-sdk v3 Webhook 接收、回覆
API FastAPI LINE webhook + Web 管理後台 + Auth
AI claude-code-acp (ClaudeClient) In-process Claude 呼叫
語音 faster-whisper + Edge TTS STT (CPU int8) + TTS (免費)
搜尋 txtai + sentence-transformers 公司知識庫 RAG
資料庫 PostgreSQL 16 (asyncpg) 使用者、訊息、AI 紀錄
部署 Docker Compose + systemd PostgreSQL 容器 + FastAPI 服務

資料庫有 6 張表:

用途
users LINE 使用者資料、最後活動時間
messages 對話歷史(支援群組/私訊分離)
ai_logs Token 用量、模型、耗時、成功/失敗
bot_groups 群組追蹤、AI 開關
media_tasks 下載/轉錄任務狀態
sessions Web 後台登入 session

AI 對話設計

動態 System Prompt

每次對話都會組合一份客製化的 system prompt:

你是「{agent_name}」,{user_nickname} 的個人 AI 助理。
語言風格:{language_style}

你可以使用以下工具:
- 知識庫(新增/搜尋/更新/刪除筆記)
- 記憶(儲存/搜尋/更新/刪除記憶)
- 對話歷史搜尋
- 公司知識庫搜尋
- 媒體下載與轉錄
- 個人檔案設定
...

新用戶引導

第一次對話時,AI 會自然地引導使用者設定人設:

profile.json 初始值:
{
    "agent_name": "小助",
    "user_nickname": "",
    "language_style": "輕鬆友善",
    "custom_instructions": "",
    "profile_complete": false
}

profile_complete 為 false 時,system prompt 會附加引導指令,讓 AI 在聊天中自然地問使用者「你想叫我什麼名字?」、「你希望我用什麼風格跟你說話?」使用者回答後,AI 呼叫 update_profile 工具寫入設定。

也可以用指令直接設定:

指令 功能
/名字 小明 設定 AI 的名字
/叫我 阿澤 設定使用者暱稱
/風格 專業正式 設定語言風格
/人設 查看目前設定
/後台 取得 Web 管理後台連結
/help 顯示說明

工具權限

AI 只能使用白名單內的工具,所有 shell/bash 類工具永久封鎖:

allowed_tools = [
    "knowledge_add", "knowledge_search", "knowledge_update", "knowledge_delete",
    "knowledge_list",
    "memory_save", "memory_search", "memory_update", "memory_delete",
    "message_search",
    "rag_search",
    "run_skill_script_tool",
    "update_profile_tool",
]

速率限制

每位使用者每天預設 100 次 AI 呼叫,可在設定中調整。


個人知識庫

使用者可以請 AI 幫忙存筆記,也可以在 Web 後台管理。

「幫我記一下,下週三下午兩點要去看牙醫」
→ AI 呼叫 knowledge_add 工具
→ 存為 data/{user_id}/knowledge/{uuid}.md

知識庫用 Markdown 檔案儲存,UUID 命名,支援全文搜尋。AI 在對話中可以隨時 knowledge_search 找相關筆記。


長期記憶

跟知識庫不同,記憶是 AI 主動管理的——它會判斷對話中有沒有值得記住的資訊,自動呼叫 memory_save

記憶格式:

tags: 飲食偏好, 個人習慣
---
使用者喜歡吃豚骨拉麵,每週至少吃一次

每次對話開始時,AI 會自動搜尋相關記憶,融入回應。比如你之前提過喜歡拉麵,下次聊到晚餐時 AI 可能會說:「要不要去吃你最愛的豚骨拉麵?」


語音互動

語音轉文字 (STT)

使用者傳語音訊息時,自動用 faster-whisper 轉成文字再餵給 AI:

model = WhisperModel("base", device="cpu", compute_type="int8")
segments, _ = model.transcribe(audio_path, language="zh")
text = "".join(seg.text for seg in segments)

用 CPU int8 量化,不需要 GPU,一般的 VPS 就能跑。

文字轉語音 (TTS)

偵測到使用者要求語音回覆時(「唸出來」、「用說的」、「說給我聽」等 9 種觸發詞),用 Edge TTS 合成語音:

communicate = edge_tts.Communicate(text, voice="zh-TW-HsiaoChenNeural")
await communicate.save(output_path)

Edge TTS 是微軟的免費 TTS 服務,不需要 API key,音質不錯。語音檔會快取在使用者目錄下,24 小時後自動清理。


媒體下載與轉錄

貼一個 YouTube 或 TikTok 連結,AI 會幫你下載:

使用者:「幫我下載這個影片 https://youtube.com/watch?v=...」
AI:「開始下載了,大約需要幾分鐘,下載完我會通知你」
使用者(幾分鐘後):「好了嗎?」
AI:「下載完成!要不要我幫你轉錄成文字?」

背後的流程:

  1. AI 呼叫 get-video-info.py 取得影片資訊(時長、標題、格式)
  2. AI 呼叫 download-video.py 開始下載,回傳 job_id
  3. 下載腳本用 os.fork() 在背景執行,不阻塞對話
  4. 使用者詢問進度時,AI 呼叫 check-download.py 查狀態
  5. 下載完可以接著轉錄,轉錄結果可存入知識庫

支援 yt-dlp 能下載的所有平台。


群組支援

在群組中,AI 不會回覆每一則訊息。觸發條件:

  • @提及 Bot
  • 回覆 Bot 的訊息
  • 叫 AI 的名字profile.json 中設定的 agent_name
def should_respond_in_group(event, bot_id, agent_name):
    return (
        is_bot_mentioned(event) or
        is_reply_to_bot(event, bot_id) or
        is_agent_name_called(event.message.text, agent_name)
    )

群組中每個人有各自獨立的 AI——用訊息發送者的 user_id 去取 profile、memory、knowledge。回覆時會 @提及發問者,避免搞混。

所有群組訊息都會記錄 sender_name,讓 AI 知道群組裡的對話脈絡。


公司知識庫 RAG

除了個人知識庫外,ctos-lite 也支援公司級的共用知識庫:

  1. 上傳文件:管理員透過 Web 後台上傳 PDF、DOCX、XLSX、CSV、Markdown
  2. 自動索引:用 sentence-transformers 的 multilingual MiniLM 產生 embedding,txtai 建索引
  3. 自動注入:每次對話自動搜尋 top 3 相關段落,注入 system prompt
def chunk_text(text, chunk_size=500, overlap=50):
    """將文件切成有重疊的段落"""
    chunks = []
    start = 0
    while start < len(text):
        end = start + chunk_size
        chunks.append(text[start:end])
        start = end - overlap
    return chunks

啟動時只索引新文件(用 metadata.json 追蹤已索引檔案),不會每次重建。


安全設計

輸入驗證

多層防護:

LIMITS = {"message": 3000, "title": 200, "content": 50000, ...}

_INJECTION_PATTERNS = [
    re.compile(r"ignore\s+(all\s+)?previous\s+instructions", re.I),
    re.compile(r"you\s+are\s+now\s+", re.I),
    re.compile(r"無視.*規則", re.I),
    re.compile(r"忽略.*設定", re.I),
    # ... 共 13 種 pattern
]

Webhook 驗簽

每個 LINE webhook 都用 HMAC-SHA256 驗證,搭配 hmac.compare_digest() 防止 timing attack。

Session 安全

Web 後台的 session token 以 SHA-256 雜湊儲存,7 天自動過期。登入走 LINE Login OAuth 流程——使用者點「後台」連結後跳轉到 LINE 授權頁面,授權完自動建立 session。


Web 管理後台

使用者透過 /後台 指令取得連結,用 LINE Login 登入後可以管理:

  • 個人設定:AI 名字、暱稱、語風
  • 知識庫:瀏覽、編輯、刪除筆記
  • 記憶:查看和清理 AI 的記憶
  • 對話歷史:回顧過去的對話
  • 媒體任務:查看下載/轉錄進度

管理員另有 Admin 面板,可以管理使用者、查看 AI 呼叫紀錄、管理群組、上傳公司知識庫文件。

前端用純 HTML/CSS/JavaScript,沒有框架。


部署

功能模組化,按需安裝(在 backend/ 目錄下執行):

cd backend
uv sync               # 基本(AI 對話 + 知識庫 + 記憶)
uv sync --extra voice  # + 語音互動(faster-whisper + Edge TTS)
uv sync --extra media  # + 媒體下載(yt-dlp + 轉錄)
uv sync --extra rag    # + 公司知識庫 RAG(txtai + 文件解析)
uv sync --extra all    # 全部功能

啟動服務:

# 啟動 PostgreSQL
docker compose -f docker/docker-compose.yml up -d

# 初始化資料庫
alembic upgrade head

# 安裝 systemd 服務
bash scripts/install-service.sh

# 設定每日清理 cron(凌晨 3:00)
bash scripts/install-cron.sh

LINE Webhook 設定為 https://your-domain.com/api/bot/line/webhook


小結

ctos-lite 的設計理念是最低門檻的 AI 助理——使用者不需要學任何東西,加 LINE 好友、傳訊息就能用。

技術上的幾個選擇:

  • claude-code-acp in-process:直接在 Python 中呼叫 Claude,不需要額外的 API server
  • 檔案式 profile + DB 式歷史:profile 用 JSON 檔案(簡單、好改),對話和 log 用 PostgreSQL(可查詢、可統計)
  • 模組化安裝:語音、媒體、RAG 都是可選的,基本版只需要 Claude + LINE SDK
  • 工具白名單:不是什麼都讓 AI 做,只開放安全的操作

如果你想讓身邊的人用 LINE 就能跟 AI 聊天、存筆記、聽語音,ctos-lite 可以直接拿來用。

想先體驗看看?直接加好友試玩:LINE 加好友


參考資源