HKUDS/DeepTutor
專案簡介
以上內容由 AI 根據官方 README 整理,未經實測;指令以官方文件為準。
原始描述
DeepTutor: Lifelong Personalized Tutoring. https://deeptutor.info/.
主要功能
- 多 agent 協作搭配 RAG 的學習流程
- CLI 介面,可直接在終端機操作
- Docker 與 Podman Compose 部署,含 GHCR 預建映像
- 以資料夾為單位的學習工作區與知識庫
- 內建 LightRAG 與多種文件解析引擎可選
- 提供 MCP 與外掛機制擴充工具能力
系統需求
- Python 3.11 以上(pyproject.toml 標示 >=3.11,<3.15)
- Podman 4.1+(rootless)或 Docker 搭配 Compose
- Node.js 22(Dockerfile 建置前端使用)
安裝方式
複製環境變數範本,再依需要編輯連接埠
cp .env.example .env以 Podman Compose 啟動服務
podman compose -f compose.yaml up -d以 Docker Compose 建置並啟動正式環境
python scripts/docker_compose.py up -d
快速開始
podman compose -f compose.yaml up -d設定教學
Docker 部署前要先準備 .env(可從 .env.example 複製)調整主機連接埠,模型供應商則在啟動後於網頁 Settings 或 data/user/settings/model_catalog.json 設定。
環境變數
| 變數 | 用途 | 必填 | 範例/預設值 |
|---|---|---|---|
HOST_PORT_BACKEND | Podman Compose 對外綁定的後端連接埠。 | 否 | 8001 |
HOST_PORT_FRONTEND | Podman Compose 對外綁定的前端連接埠。 | 否 | 3782 |
HOST_PORT_POCKETBASE | Podman Compose 對外綁定的 PocketBase 連接埠。 | 否 | 8090 |
TZ | 傳入後端與前端的時區設定。 | 否 | UTC |
DEEPTUTOR_WORKSPACE_HOST | 指定要掛載到容器內 /workspace 的主機資料夾。 | 否 | ./data/user/workspace |
DEEPTUTOR_DOCKER_BACKEND_PORT | Compose 部署時後端容器與主機對應的連接埠。 | 否 | 8001 |
DEEPTUTOR_DOCKER_FRONTEND_PORT | Compose 部署時前端容器與主機對應的連接埠。 | 否 | 3782 |
DEEPTUTOR_DOCKER_POCKETBASE_PORT | Compose 部署時 PocketBase 對外連接埠。 | 否 | 8090 |
DEEPTUTOR_SANDBOX_RUNNER_URL | 把不受信任的 shell 執行導向 sandbox-runner sidecar。 | 否 | http://sandbox-runner:8900 |
DEEPTUTOR_WORKSPACE_ROOT | 容器內工作區根目錄路徑。 | 否 | /workspace |
DEEPTUTOR_WORKSPACE_ALLOWED_ROOTS | 允許存取的工作區根目錄清單。 | 否 | /workspace |
DEEPTUTOR_EXTRAS | 啟動時額外安裝的 optional extras,以逗號分隔。 | 否 | — |
DEEPTUTOR_APT_PACKAGES | 啟動時額外安裝的 apt 套件,以逗號分隔。 | 否 | — |
PUID | Unraid/NAS 綁定掛載時,把容器使用者對應到主機擁有者。 | 否 | 99 |
PGID | Unraid/NAS 綁定掛載時,把容器群組對應到主機擁有者。 | 否 | 100 |
主要設定檔
.env.example— 複製為 .env 後調整主機端對外綁定的連接埠(8001/3782/8090)與時區。compose.yaml— Podman Compose 部署定義,服務、磁碟區與唯讀 rootfs 設定都在這裡。docker-compose.yml— Docker Compose 主要編排檔,含 deeptutor、redis、pocketbase 與 sandbox-runner。docker-compose.ghcr.yml— 直接拉取 GHCR 預建映像的部署檔,可在此釘選映像版本。docker-compose.dev.yml— 開發用覆寫檔,掛載原始碼以啟用前後端熱重載。pyproject.toml— Python 套件與 optional extras 定義,決定要安裝哪些模組。
設定內容整理自 repository 內的設定檔與文件,未經實測;變數名稱與指令以官方檔案為準。
適合用途
- 想把教材、PDF 與網頁整理成可問答知識庫的學習者
- 需要在終端機用 CLI 跑學習流程的開發者
- 想自架服務、把資料留在自己伺服器的團隊
- 要接本機 Ollama 或 LM Studio 模型來做教學應用的使用者
常見問題
預設會用到哪些連接埠?
前端預設 3782、後端 8001,PocketBase 是 8090。這些值可用 DEEPTUTOR_DOCKER_FRONTEND_PORT、DEEPTUTOR_DOCKER_BACKEND_PORT、DEEPTUTOR_DOCKER_POCKETBASE_PORT 覆寫。
資料存在哪裡?
主要資料都在 ./data 底下,compose 檔把它掛到容器的 /app/data。內容工作區另外掛到 /workspace,可用 DEEPTUTOR_WORKSPACE_HOST 指定主機資料夾。
用 docker exec 裝的套件為什麼重啟後就不見?
在容器內用 docker exec 安裝的套件不會留到下次 compose down,要在 compose 檔的環境變數宣告 DEEPTUTOR_EXTRAS 或 DEEPTUTOR_APT_PACKAGES,讓每次啟動重新套用。
部署到遠端伺服器時 API 位址要怎麼設?
在本機用 Docker 時留空即可,預設的 http://localhost:8001 就能通。部署在遠端伺服器時要把 next_public_api_base_external 設成伺服器的 IP 或主機名稱,否則瀏覽器會去連自己電腦的 localhost。
一定要裝 PocketBase 嗎?
PocketBase 是選用的認證與儲存 sidecar,把 integrations.pocketbase_url 設成 http://pocketbase:8090 才會啟用;留空則走 SQLite 的單使用者模式。
要接本機的 Ollama 或 LM Studio 該怎麼填位址?
在 provider 的 base_url 欄位要用 host.docker.internal,不能用 localhost。設定位置在 data/user/settings/model_catalog.json 或網頁 Settings。