前言
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:「下載完成!要不要我幫你轉錄成文字?」
背後的流程:
- AI 呼叫
get-video-info.py取得影片資訊(時長、標題、格式) - AI 呼叫
download-video.py開始下載,回傳job_id - 下載腳本用
os.fork()在背景執行,不阻塞對話 - 使用者詢問進度時,AI 呼叫
check-download.py查狀態 - 下載完可以接著轉錄,轉錄結果可存入知識庫
支援 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 也支援公司級的共用知識庫:
- 上傳文件:管理員透過 Web 後台上傳 PDF、DOCX、XLSX、CSV、Markdown
- 自動索引:用 sentence-transformers 的 multilingual MiniLM 產生 embedding,txtai 建索引
- 自動注入:每次對話自動搜尋 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 加好友