docs: 新增 README + 更新 Deploy.md + 整理 .gitignore
- 新增 README.md 完整项目概览(架构、功能、快速开始) - 更新 Deploy.md 修正过时的服务状态和端口信息 - 整理 .gitignore 补充缺失规则并移除无效项 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+44
-32
@@ -1,29 +1,17 @@
|
|||||||
|
# ========== 依赖 ==========
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
|
# ========== 构建产物 ==========
|
||||||
dist/
|
dist/
|
||||||
.env
|
*.exe
|
||||||
backend/.env
|
|
||||||
*.log
|
|
||||||
data/
|
|
||||||
docs/
|
|
||||||
.DS_Store
|
|
||||||
dev_must_read.md
|
|
||||||
scripts/tunnel.sh
|
|
||||||
.debug/
|
|
||||||
|
|
||||||
# Test scripts
|
# ========== Go 编译二进制 ==========
|
||||||
test/
|
|
||||||
|
|
||||||
# DevTools
|
|
||||||
devtools/node_modules/
|
|
||||||
devtools/logs/
|
|
||||||
devtools/package-lock.json
|
|
||||||
|
|
||||||
# Go 编译二进制 (模块根 + cmd/ 内产出)
|
|
||||||
backend/ai-core/main
|
backend/ai-core/main
|
||||||
backend/ai-core/cmd/main
|
backend/ai-core/cmd/main
|
||||||
backend/ai-core/ai-core
|
backend/ai-core/ai-core
|
||||||
backend/gateway/main
|
backend/gateway/main
|
||||||
backend/gateway/cmd/main
|
backend/gateway/cmd/main
|
||||||
|
backend/gateway/cmd/gateway
|
||||||
backend/gateway/gateway
|
backend/gateway/gateway
|
||||||
backend/iot-debug-service/main
|
backend/iot-debug-service/main
|
||||||
backend/iot-debug-service/cmd/main
|
backend/iot-debug-service/cmd/main
|
||||||
@@ -32,25 +20,49 @@ backend/memory-service/main
|
|||||||
backend/memory-service/cmd/main
|
backend/memory-service/cmd/main
|
||||||
backend/memory-service/memory-service
|
backend/memory-service/memory-service
|
||||||
backend/tool-engine/main
|
backend/tool-engine/main
|
||||||
|
backend/tool-engine/cmd/main
|
||||||
backend/tool-engine/cmd/tool-engine
|
backend/tool-engine/cmd/tool-engine
|
||||||
backend/tool-engine/tool-engine
|
backend/tool-engine/tool-engine
|
||||||
backend/voice-service/voice-service
|
|
||||||
backend/voice-service/cmd/voice-service
|
|
||||||
|
|
||||||
# Compiled binaries (voice-service)
|
|
||||||
backend/voice-service/main
|
backend/voice-service/main
|
||||||
backend/voice-service/main2
|
backend/voice-service/cmd/main
|
||||||
backend/voice-service/voice-svc-new
|
backend/voice-service/cmd/voice-service
|
||||||
|
backend/voice-service/voice-service
|
||||||
|
backend/cmd/
|
||||||
|
|
||||||
# Compiled binaries (gateway)
|
# ========== 运行时数据 ==========
|
||||||
backend/gateway/cmd/gateway
|
logs/
|
||||||
|
*.log
|
||||||
# Stale build artifact (legacy)
|
*.pid
|
||||||
backend/cmd
|
uploads/
|
||||||
|
|
||||||
# 用户上传文件
|
|
||||||
backend/gateway/uploads/
|
backend/gateway/uploads/
|
||||||
|
data/
|
||||||
|
|
||||||
# Voice Service 外部依赖 (C++编译产物 / 模型文件)
|
# ========== 环境与敏感配置 ==========
|
||||||
|
.env
|
||||||
|
backend/.env
|
||||||
|
.claude/
|
||||||
|
|
||||||
|
# ========== 文档 (项目规范:docs/ 不纳入版本管理) ==========
|
||||||
|
docs/
|
||||||
|
|
||||||
|
# ========== 调试临时文件 (项目规范:debug/cache/ 为临时脚本目录) ==========
|
||||||
|
debug/cache/
|
||||||
|
debug/logs/
|
||||||
|
|
||||||
|
# ========== DevTools 运行时 ==========
|
||||||
|
devtools/node_modules/
|
||||||
|
devtools/logs/
|
||||||
|
devtools/package-lock.json
|
||||||
|
|
||||||
|
# ========== 语音服务外部依赖 (C++ 编译产物 / 模型文件) ==========
|
||||||
backend/voice-service/whisper.cpp/
|
backend/voice-service/whisper.cpp/
|
||||||
backend/voice-service/models/
|
backend/voice-service/models/
|
||||||
|
|
||||||
|
# ========== 打包归档 ==========
|
||||||
|
*.tar.gz
|
||||||
|
*.zip
|
||||||
|
|
||||||
|
# ========== 平台杂项 ==========
|
||||||
|
.DS_Store
|
||||||
|
Thumbs.db
|
||||||
|
scripts/tunnel.sh
|
||||||
|
|||||||
@@ -1,106 +1,184 @@
|
|||||||
# Cyrene 部署指南
|
# Cyrene 部署指南
|
||||||
|
|
||||||
## 环境要求
|
## 环境要求
|
||||||
|
|
||||||
- Go 1.21+
|
- Go 1.21+
|
||||||
- Node.js 20+
|
- Node.js 20+
|
||||||
- Docker & Docker Compose
|
- Docker & Docker Compose
|
||||||
|
|
||||||
## 快速启动
|
## 快速启动
|
||||||
|
|
||||||
### 1. 启动基础设施
|
### 1. 环境变量配置
|
||||||
基础设施包括 PostgreSQL (pgvector)、Redis、Qdrant (向量数据库)、MinIO (对象存储) 和 NATS (消息队列)。
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose -f docker-compose.dev.db.yml up -d
|
cp backend/.env.example backend/.env
|
||||||
|
# 编辑 backend/.env,至少配置 LLM_API_KEY
|
||||||
```
|
```
|
||||||
|
|
||||||
### 2. 编译并启动后端服务
|
### 2. 启动基础设施
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# AI-Core (LLM 推理服务)
|
docker compose -f docker-compose.dev.db.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
此命令启动以下服务:
|
||||||
|
|
||||||
|
| 服务 | 端口 | 用途 |
|
||||||
|
|------|------|------|
|
||||||
|
| PostgreSQL + pgvector | 5432 | 关系数据库与向量检索 |
|
||||||
|
| Redis | 6379 | 缓存与会话 |
|
||||||
|
| Qdrant | 6333 (HTTP) / 6334 (gRPC) | 向量数据库 |
|
||||||
|
| MinIO | 9000 (API) / 9001 (Console) | 对象存储 |
|
||||||
|
| NATS | 4222 / 8222 (Monitoring) | 消息队列 |
|
||||||
|
|
||||||
|
### 3. 启动后端服务
|
||||||
|
|
||||||
|
推荐使用 DevTools 一键管理:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./devtools.sh start all # 编译并顺序启动所有后端 + 前端
|
||||||
|
./devtools.sh status # 查看各服务运行状态
|
||||||
|
./devtools.sh restart gateway # 单独重启某个服务
|
||||||
|
```
|
||||||
|
|
||||||
|
或手动逐服务启动(每个在新终端中):
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 1) 记忆服务
|
||||||
|
cd backend/memory-service && go build -o main ./cmd/main.go && ./main
|
||||||
|
|
||||||
|
# 2) 工具引擎
|
||||||
|
cd backend/tool-engine && go build -o main ./cmd/main.go && ./main
|
||||||
|
|
||||||
|
# 3) IoT 调试服务 (模拟智能家居设备)
|
||||||
|
cd backend/iot-debug-service && go build -o main ./cmd/main.go && ./main
|
||||||
|
|
||||||
|
# 4) 语音服务 (可选,需安装 whisper.cpp)
|
||||||
|
cd backend/voice-service && go build -o main ./cmd/main.go && ./main
|
||||||
|
|
||||||
|
# 5) AI-Core (LLM 推理与对话编排)
|
||||||
cd backend/ai-core && go build -o main ./cmd/main.go && ./main
|
cd backend/ai-core && go build -o main ./cmd/main.go && ./main
|
||||||
|
|
||||||
# Gateway (API 网关)
|
# 6) Gateway (API 网关,最后启动)
|
||||||
cd backend/gateway && go build -o main ./cmd/main.go && ./main
|
cd backend/gateway && go build -o main ./cmd/main.go && ./main
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. 安装依赖并启动前端
|
### 4. 启动前端
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd frontend/web && npm install && npm run dev
|
cd frontend/web && npm install && npm run dev
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. 启动 DevTools (可选)
|
访问 `http://localhost:5173`
|
||||||
|
|
||||||
|
### 5. 启动 DevTools 管理面板 (可选)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
cd devtools && npm install && npm start
|
cd devtools && npm install && npm start
|
||||||
```
|
```
|
||||||
|
|
||||||
|
访问 `http://localhost:9090`
|
||||||
|
|
||||||
## 使用 Docker Compose 完整启动
|
## 使用 Docker Compose 完整启动
|
||||||
|
|
||||||
```bash
|
### 开发环境
|
||||||
docker-compose -f docker-compose.dev.yml up -d
|
|
||||||
```
|
|
||||||
|
|
||||||
此命令将启动所有基础设施服务以及 AI-Core 和 Gateway 后端服务。
|
|
||||||
|
|
||||||
## 生产环境部署
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
docker-compose -f docker-compose.yml up -d
|
docker compose -f docker-compose.dev.yml up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
生产环境额外包含 Caddy 反向代理(自动 TLS)。
|
启动所有基础设施 + 6 个后端服务(AI-Core、Gateway、Memory Service、Tool Engine、Voice Service、IoT Debug Service),前端仍需本地启动。
|
||||||
|
|
||||||
## 环境变量
|
### 生产环境
|
||||||
|
|
||||||
参考 `backend/.env.example` 配置以下变量:
|
```bash
|
||||||
|
docker compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
| 变量 | 说明 |
|
额外包含 Caddy 反向代理(自动 TLS),前端静态文件由 Gateway 直接托管。
|
||||||
|------|------|
|
|
||||||
| `ENV` | 运行环境 (`development` / `production`) |
|
|
||||||
| `LLM_API_URL` | LLM API 地址 |
|
|
||||||
| `LLM_API_KEY` | LLM API 密钥 |
|
|
||||||
| `LLM_MODEL` | 主模型 (默认 `gpt-4o`) |
|
|
||||||
| `LLM_FALLBACK_MODEL` | 回退模型 (默认 `gpt-4o-mini`) |
|
|
||||||
| `POSTGRES_HOST` / `POSTGRES_PORT` / `POSTGRES_USER` / `POSTGRES_PASSWORD` / `POSTGRES_DB` | PostgreSQL 连接信息 |
|
|
||||||
| `REDIS_HOST` / `REDIS_PORT` / `REDIS_PASSWORD` | Redis 连接信息 |
|
|
||||||
| `JWT_SECRET` | JWT 签名密钥 |
|
|
||||||
| `JWT_EXPIRY_HOURS` | JWT 过期时间 (默认 720 小时) |
|
|
||||||
| `MINIO_ENDPOINT` / `MINIO_ACCESS_KEY` / `MINIO_SECRET_KEY` / `MINIO_BUCKET` | MinIO 对象存储配置 |
|
|
||||||
| `VECTOR_DB_URL` / `VECTOR_DB_COLLECTION` | Qdrant 向量数据库配置 |
|
|
||||||
| `ADMIN_USERNAME` / `ADMIN_PASSWORD` | 管理员账户 (开发阶段) |
|
|
||||||
| `TTS_PROVIDER` / `TTS_VOICE` | TTS 语音合成配置 |
|
|
||||||
| `ASR_PROVIDER` / `ASR_MODEL` | ASR 语音识别配置 |
|
|
||||||
|
|
||||||
## 项目结构
|
## 项目架构
|
||||||
|
|
||||||
```
|
```
|
||||||
Cyrene/
|
Cyrene/
|
||||||
├── frontend/web/ # React 前端 (Vite + TypeScript)
|
├── frontend/web/ # React 前端 (Vite + TypeScript + Tailwind + Zustand)
|
||||||
├── backend/ai-core/ # AI 推理核心 (LLM 对话、记忆、人设)
|
├── backend/
|
||||||
├── backend/gateway/ # API 网关 (路由、鉴权、WebSocket)
|
│ ├── ai-core/ # AI 推理核心 (LLM 对话编排、人设注入、工具调用、后台思考)
|
||||||
├── backend/memory-service/ # 记忆服务 (规划中)
|
│ ├── gateway/ # API 网关 (JWT 认证、路由、限流、WebSocket Hub)
|
||||||
├── backend/tool-engine/ # 工具引擎 (规划中)
|
│ ├── memory-service/ # 记忆服务 (CRUD、语义检索、LLM 提取)
|
||||||
├── backend/voice-service/ # 语音服务 (规划中)
|
│ ├── tool-engine/ # 工具引擎 (12+ 内置工具:计算器、HTTP、IoT、文件等)
|
||||||
├── backend/proto/ # Protobuf 定义 (规划中)
|
│ ├── voice-service/ # 语音服务 (Edge-TTS + Whisper STT)
|
||||||
├── devtools/ # 管理面板
|
│ ├── iot-debug-service/ # IoT 调试服务 (8 个模拟设备:灯/空调/窗帘/传感器/门锁)
|
||||||
└── scripts/ # 辅助脚本
|
│ └── proto/ # Protobuf 定义 (预留)
|
||||||
|
├── devtools/ # 开发管理面板 (Express)
|
||||||
|
├── scripts/ # 辅助脚本
|
||||||
|
├── test/ # E2E 测试 (CDP/Chromium)
|
||||||
|
├── docs/ # 文档与调试记录
|
||||||
|
├── debug/ # 诊断脚本
|
||||||
|
├── docker-compose.dev.db.yml # 开发基础设施 (仅 DB)
|
||||||
|
├── docker-compose.dev.yml # 开发环境 (DB + 后端服务)
|
||||||
|
├── docker-compose.yml # 生产环境 (DB + 后端 + Caddy)
|
||||||
|
└── Caddyfile # 反向代理配置
|
||||||
```
|
```
|
||||||
|
|
||||||
## 端口
|
## 服务端口
|
||||||
|
|
||||||
| 端口 | 服务 |
|
| 端口 | 服务 |
|
||||||
|------|------|
|
|------|------|
|
||||||
| 5173 | 前端开发服务器 (Vite) |
|
| 5173 | 前端 (Vite) |
|
||||||
| 8080 | Gateway API |
|
| 8080 | Gateway API |
|
||||||
| 8081 | AI-Core API |
|
| 8081 | AI-Core API |
|
||||||
| 3001 | DevTools 管理面板 |
|
| 8083 | IoT 调试服务 |
|
||||||
|
| 8091 | 记忆服务 |
|
||||||
|
| 8092 | 工具引擎 |
|
||||||
|
| 8093 | 语音服务 |
|
||||||
|
| 9090 | DevTools 管理面板 |
|
||||||
| 5432 | PostgreSQL |
|
| 5432 | PostgreSQL |
|
||||||
| 6379 | Redis |
|
| 6379 | Redis |
|
||||||
| 6333 | Qdrant HTTP API |
|
| 6333 | Qdrant HTTP |
|
||||||
| 6334 | Qdrant gRPC API |
|
| 6334 | Qdrant gRPC |
|
||||||
| 9000 | MinIO S3 API |
|
| 9000 | MinIO S3 |
|
||||||
| 9001 | MinIO Console |
|
| 9001 | MinIO Console |
|
||||||
| 4222 | NATS |
|
| 4222 | NATS |
|
||||||
| 8222 | NATS HTTP Monitoring |
|
| 8222 | NATS Monitoring |
|
||||||
|
|
||||||
|
## 环境变量
|
||||||
|
|
||||||
|
参考 `backend/.env.example`:
|
||||||
|
|
||||||
|
| 变量 | 说明 | 默认值 |
|
||||||
|
|------|------|--------|
|
||||||
|
| `ENV` | 运行环境 | `development` |
|
||||||
|
| `LLM_API_URL` | LLM API 地址 | `https://api.openai.com/v1` |
|
||||||
|
| `LLM_API_KEY` | LLM API 密钥 | — |
|
||||||
|
| `LLM_MODEL` | 主模型 | `gpt-4o` |
|
||||||
|
| `LLM_FALLBACK_MODEL` | 回退模型 | `gpt-4o-mini` |
|
||||||
|
| `POSTGRES_HOST` | PostgreSQL 主机 | `localhost` |
|
||||||
|
| `POSTGRES_PORT` | PostgreSQL 端口 | `5432` |
|
||||||
|
| `POSTGRES_USER` | PostgreSQL 用户 | `cyrene` |
|
||||||
|
| `POSTGRES_PASSWORD` | PostgreSQL 密码 | — |
|
||||||
|
| `POSTGRES_DB` | PostgreSQL 库名 | `cyrene_ai` |
|
||||||
|
| `REDIS_HOST` | Redis 主机 | `localhost` |
|
||||||
|
| `REDIS_PORT` | Redis 端口 | `6379` |
|
||||||
|
| `JWT_SECRET` | JWT 签名密钥 | — |
|
||||||
|
| `JWT_EXPIRY_HOURS` | JWT 过期时间 | `720` |
|
||||||
|
| `MINIO_ENDPOINT` | MinIO 地址 | `localhost:9000` |
|
||||||
|
| `MINIO_ACCESS_KEY` | MinIO Access Key | — |
|
||||||
|
| `MINIO_SECRET_KEY` | MinIO Secret Key | — |
|
||||||
|
| `VECTOR_DB_URL` | Qdrant 地址 | `http://localhost:6333` |
|
||||||
|
| `ADMIN_USERNAME` | 管理员账户 | `admin` |
|
||||||
|
| `ADMIN_PASSWORD` | 管理员密码 | — |
|
||||||
|
| `ADMIN_NICKNAME` | 昔涟对管理员的称呼 | `管理员` |
|
||||||
|
| `REGISTRATION_ENABLED` | 开放注册 | `true` |
|
||||||
|
| `ENABLE_BACKGROUND_THINKING` | 后台思考 | `true` |
|
||||||
|
| `INTERNAL_SERVICE_TOKEN` | 内部服务通信 Token | — |
|
||||||
|
| `WEBHOOK_API_KEY` | Webhook API Key | — |
|
||||||
|
| `IOT_SERVICE_URL` | IoT 服务地址 | `http://localhost:8083` |
|
||||||
|
| `TTS_PROVIDER` | TTS 引擎 | `edge-tts` |
|
||||||
|
| `TTS_VOICE` | TTS 语音 | `zh-CN-XiaoxiaoNeural` |
|
||||||
|
| `ASR_PROVIDER` | ASR 引擎 | `faster-whisper` |
|
||||||
|
| `ASR_MODEL` | ASR 模型 | `medium` |
|
||||||
|
|
||||||
|
## 平台迁移
|
||||||
|
|
||||||
|
从 Linux 迁移到 Windows 的详细指南见 [Migration.md](Migration.md)。
|
||||||
|
|||||||
@@ -0,0 +1,173 @@
|
|||||||
|
# Cyrene (昔涟) — AI 伙伴平台
|
||||||
|
|
||||||
|
昔涟是一个开源的 AI 伙伴平台,提供多人格对话、IoT 设备操控、记忆管理、自动化规则、知识库、语音交互等功能。
|
||||||
|
|
||||||
|
## 架构
|
||||||
|
|
||||||
|
```
|
||||||
|
┌─────────────────────────────────────────────────────────┐
|
||||||
|
│ Frontend (React + Vite) │
|
||||||
|
│ localhost:5173 │
|
||||||
|
└─────────────────────┬───────────────────────────────────┘
|
||||||
|
│ HTTP + WebSocket
|
||||||
|
┌─────────────────────▼───────────────────────────────────┐
|
||||||
|
│ Gateway (Go/Gin) │
|
||||||
|
│ localhost:8080 │
|
||||||
|
│ JWT Auth · Rate Limit · WS Hub · API 路由 │
|
||||||
|
└──┬────────┬────────┬────────┬────────┬────────┬────────┘
|
||||||
|
│ │ │ │ │ │
|
||||||
|
▼ ▼ ▼ ▼ ▼ ▼
|
||||||
|
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────────┐
|
||||||
|
│ AI │ │Memory│ │Tool │ │Voice │ │ IoT │ │ Infra │
|
||||||
|
│ Core │ │Svc │ │Engine│ │Svc │ │Debug │ │ │
|
||||||
|
│:8081 │ │:8091 │ │:8092 │ │:8093 │ │:8083 │ │ PG:5432 │
|
||||||
|
│ │ │ │ │ │ │ │ │ │ │ Redis │
|
||||||
|
│ LLM │ │CRUD │ │执行 │ │STT/ │ │模拟 │ │ :6379 │
|
||||||
|
│ 编排 │ │检索 │ │工具 │ │TTS │ │设备 │ │ Qdrant │
|
||||||
|
│ 人设 │ │ │ │调用 │ │ │ │管理 │ │ :6333 │
|
||||||
|
│ 工具 │ │ │ │ │ │ │ │ │ │ MinIO │
|
||||||
|
│ 后台 │ │ │ │ │ │ │ │ │ │ :9000 │
|
||||||
|
│ 思考 │ │ │ │ │ │ │ │ │ │ NATS │
|
||||||
|
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────────┘
|
||||||
|
```
|
||||||
|
|
||||||
|
## 功能
|
||||||
|
|
||||||
|
- **多人格对话** — 可配置的角色扮演系统,带上下文构建和子会话路由
|
||||||
|
- **IoT 操控** — 模拟智能家居设备(灯、空调、窗帘、传感器、门锁),支持语音/文本控制
|
||||||
|
- **记忆管理** — LLM 驱动的长期记忆提取、存储和检索(PostgreSQL + pgvector)
|
||||||
|
- **自动化** — 规则引擎 + 场景执行(定时、条件触发、Webhook)
|
||||||
|
- **每日简报** — 定时生成当日汇总
|
||||||
|
- **提醒** — 创建/管理定时提醒,到期 WebSocket 推送
|
||||||
|
- **知识库** — 文档管理 + 向量检索
|
||||||
|
- **文件管理** — 上传、下载、缩略图、图片 AI 分析
|
||||||
|
- **语音交互** — 浏览器端 STT(Web Speech API)+ TTS,服务端支持 Whisper
|
||||||
|
- **WebSocket** — 实时消息推送、IoT 状态广播、通知
|
||||||
|
- **PWA** — 可安装为桌面/移动应用,离线支持
|
||||||
|
- **后台思考** — AI 在对话间隙自主进行反思和记忆整理
|
||||||
|
- **Webhook 接入** — 支持 Discord、通用 Webhook 第三方平台接入
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
Cyrene/
|
||||||
|
├── frontend/
|
||||||
|
│ ├── web/ # React 前端 (Vite + TypeScript + Tailwind)
|
||||||
|
│ └── packages/shared/ # 共享类型/工具
|
||||||
|
├── backend/
|
||||||
|
│ ├── ai-core/ # AI 推理核心 (LLM 编排、人设注入、工具调用、后台思考)
|
||||||
|
│ ├── gateway/ # API 网关 (JWT 认证、路由、限流、WebSocket Hub)
|
||||||
|
│ ├── memory-service/ # 记忆服务 (CRUD、检索、LLM 提取)
|
||||||
|
│ ├── tool-engine/ # 工具引擎 (计算器、HTTP、IoT、文件操作等)
|
||||||
|
│ ├── voice-service/ # 语音服务 (TTS/STT,基于 Edge-TTS + Whisper)
|
||||||
|
│ ├── iot-debug-service/# IoT 调试服务 (模拟智能家居设备)
|
||||||
|
│ └── proto/ # Protobuf 定义 (预留)
|
||||||
|
├── devtools/ # 开发管理面板 (Express,服务管理/日志/性能)
|
||||||
|
├── scripts/ # 辅助脚本 (Whisper 安装、SSH 隧道、数据迁移)
|
||||||
|
├── test/ # E2E 测试脚本 (CDP/Chromium)
|
||||||
|
├── docs/ # 项目文档与调试记录
|
||||||
|
├── debug/ # 诊断与缓存脚本
|
||||||
|
├── docker-compose.dev.db.yml # 开发环境基础设施 (仅 DB)
|
||||||
|
├── docker-compose.dev.yml # 开发环境一键启动
|
||||||
|
├── docker-compose.yml # 生产环境 (含 Caddy)
|
||||||
|
└── Caddyfile # 反向代理配置
|
||||||
|
```
|
||||||
|
|
||||||
|
## 快速开始
|
||||||
|
|
||||||
|
### 前提条件
|
||||||
|
|
||||||
|
- Go 1.21+
|
||||||
|
- Node.js 20+
|
||||||
|
- Docker & Docker Compose
|
||||||
|
|
||||||
|
### 1. 启动基础设施
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f docker-compose.dev.db.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
启动 PostgreSQL (pgvector)、Redis、Qdrant、MinIO、NATS。
|
||||||
|
|
||||||
|
### 2. 启动后端服务
|
||||||
|
|
||||||
|
使用 DevTools 一键管理:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./devtools.sh start all # 编译并启动所有后端 + 前端
|
||||||
|
./devtools.sh status # 查看服务状态
|
||||||
|
./devtools.sh logs ai-core # 查看 AI-Core 日志
|
||||||
|
```
|
||||||
|
|
||||||
|
或手动逐个启动:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 编译并运行各服务
|
||||||
|
cd backend/memory-service && go run ./cmd/main.go &
|
||||||
|
cd backend/tool-engine && go run ./cmd/main.go &
|
||||||
|
cd backend/iot-debug-service && go run ./cmd/main.go &
|
||||||
|
cd backend/voice-service && go run ./cmd/main.go &
|
||||||
|
cd backend/ai-core && go run ./cmd/main.go &
|
||||||
|
cd backend/gateway && go run ./cmd/main.go &
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 启动前端
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd frontend/web && npm install && npm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
访问 `http://localhost:5173`,默认管理员账户 `admin` / `cyrene-dev-admin`。
|
||||||
|
|
||||||
|
### 4. 配置环境变量
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cp backend/.env.example backend/.env
|
||||||
|
# 编辑 backend/.env,填入 LLM API Key 等必要配置
|
||||||
|
```
|
||||||
|
|
||||||
|
## 服务端口
|
||||||
|
|
||||||
|
| 端口 | 服务 |
|
||||||
|
|------|------|
|
||||||
|
| 5173 | 前端 (Vite dev server) |
|
||||||
|
| 8080 | Gateway API |
|
||||||
|
| 8081 | AI-Core (LLM 推理) |
|
||||||
|
| 8083 | IoT 调试服务 |
|
||||||
|
| 8091 | 记忆服务 |
|
||||||
|
| 8092 | 工具引擎 |
|
||||||
|
| 8093 | 语音服务 |
|
||||||
|
| 9090 | DevTools 管理面板 |
|
||||||
|
| 5432 | PostgreSQL |
|
||||||
|
| 6379 | Redis |
|
||||||
|
| 6333 | Qdrant HTTP |
|
||||||
|
| 6334 | Qdrant gRPC |
|
||||||
|
| 9000 | MinIO S3 |
|
||||||
|
| 9001 | MinIO Console |
|
||||||
|
| 4222 | NATS |
|
||||||
|
| 8222 | NATS Monitoring |
|
||||||
|
|
||||||
|
## 技术栈
|
||||||
|
|
||||||
|
| 层 | 技术 |
|
||||||
|
|----|------|
|
||||||
|
| 前端 | React 18, TypeScript, Vite, Tailwind CSS, Zustand |
|
||||||
|
| 后端 | Go, Gin, net/http |
|
||||||
|
| 数据库 | PostgreSQL + pgvector |
|
||||||
|
| 缓存 | Redis |
|
||||||
|
| 向量库 | Qdrant |
|
||||||
|
| 对象存储 | MinIO |
|
||||||
|
| 消息队列 | NATS |
|
||||||
|
| 反向代理 | Caddy (生产环境) |
|
||||||
|
| 语音 | Edge-TTS / Whisper.cpp |
|
||||||
|
|
||||||
|
## 部署
|
||||||
|
|
||||||
|
- 开发环境:`docker compose -f docker-compose.dev.yml up -d`
|
||||||
|
- 生产环境:`docker compose up -d`(含 Caddy 反向代理 + 自动 TLS)
|
||||||
|
|
||||||
|
详见 [Deploy.md](Deploy.md) 和 [Migration.md](Migration.md)(Linux → Windows 迁移指南)。
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT
|
||||||
@@ -1,242 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# ==================== 配置 ====================
|
|
||||||
ROOT_HOST="${CHROMIUM_MANAGER_HOST:-127.0.0.1}"
|
|
||||||
ROOT_PORT="${CHROMIUM_MANAGER_PORT:-19520}"
|
|
||||||
BASE_URL="http://$ROOT_HOST:$ROOT_PORT"
|
|
||||||
|
|
||||||
# ==================== 颜色 ====================
|
|
||||||
GREEN='\033[0;32m'
|
|
||||||
RED='\033[0;31m'
|
|
||||||
YELLOW='\033[1;33m'
|
|
||||||
CYAN='\033[0;36m'
|
|
||||||
NC='\033[0m'
|
|
||||||
|
|
||||||
# ==================== 帮助 ====================
|
|
||||||
show_help() {
|
|
||||||
cat << EOF
|
|
||||||
${CYAN}Chromium 调试管理器${NC}
|
|
||||||
用法: ./chromium_debugging.sh <命令> [选项]
|
|
||||||
|
|
||||||
${GREEN}命令:${NC}
|
|
||||||
start 启动 Chromium(带 GUI,显示在 root 桌面)
|
|
||||||
stop 停止 Chromium
|
|
||||||
restart 重启 Chromium
|
|
||||||
status 查看 Chromium 状态
|
|
||||||
debug-url 获取 WebSocket 调试地址(给 VS Code 插件用)
|
|
||||||
log 查看 Chromium 日志(默认最近 50 行)
|
|
||||||
log -f 实时跟踪日志
|
|
||||||
help 显示此帮助
|
|
||||||
|
|
||||||
${YELLOW}环境变量:${NC}
|
|
||||||
CHROMIUM_MANAGER_HOST 管理服务地址(默认 127.0.0.1)
|
|
||||||
CHROMIUM_MANAGER_PORT 管理服务端口(默认 19520)
|
|
||||||
|
|
||||||
${CYAN}示例:${NC}
|
|
||||||
./chromium_debugging.sh start # 启动 Chromium
|
|
||||||
./chromium_debugging.sh status # 查看状态
|
|
||||||
./chromium_debugging.sh debug-url # 获取调试地址
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==================== API 调用 ====================
|
|
||||||
|
|
||||||
call_api() {
|
|
||||||
local ENDPOINT="$1"
|
|
||||||
local RESULT
|
|
||||||
local HTTP_CODE
|
|
||||||
|
|
||||||
RESULT=$(curl -s -w "\n%{http_code}" -X GET "$BASE_URL$ENDPOINT" 2>/dev/null)
|
|
||||||
HTTP_CODE=$(echo "$RESULT" | tail -1)
|
|
||||||
RESULT=$(echo "$RESULT" | sed '$d')
|
|
||||||
|
|
||||||
if [ "$HTTP_CODE" != "200" ]; then
|
|
||||||
echo "{\"status\":\"error\",\"message\":\"连接管理服务失败 ($HTTP_CODE),请确认 root 上已运行 chromium-manager.sh\"}"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "$RESULT"
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==================== 命令实现 ====================
|
|
||||||
|
|
||||||
cmd_start() {
|
|
||||||
echo -e "${YELLOW}🚀 请求启动 Chromium...${NC}"
|
|
||||||
local RESULT=$(call_api "/start")
|
|
||||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ "$STATUS" = "ok" ]; then
|
|
||||||
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
|
||||||
echo -e "${GREEN}✅ Chromium 已启动 (PID: $PID)${NC}"
|
|
||||||
echo -e " 调试地址: ${CYAN}http://$ROOT_HOST:9222${NC}"
|
|
||||||
elif [ "$STATUS" = "error" ]; then
|
|
||||||
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
|
||||||
echo -e "${RED}❌ $MSG${NC}"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ 请求失败${NC}"
|
|
||||||
echo "$RESULT"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_stop() {
|
|
||||||
echo -e "${YELLOW}🛑 请求停止 Chromium...${NC}"
|
|
||||||
local RESULT=$(call_api "/stop")
|
|
||||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ "$STATUS" = "ok" ]; then
|
|
||||||
echo -e "${GREEN}✅ Chromium 已停止${NC}"
|
|
||||||
else
|
|
||||||
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
|
||||||
echo -e "${YELLOW}⚠️ $MSG${NC}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_restart() {
|
|
||||||
echo -e "${YELLOW}🔄 请求重启 Chromium...${NC}"
|
|
||||||
local RESULT=$(call_api "/restart")
|
|
||||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ "$STATUS" = "ok" ]; then
|
|
||||||
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
|
||||||
echo -e "${GREEN}✅ Chromium 已重启 (PID: $PID)${NC}"
|
|
||||||
else
|
|
||||||
local MSG=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('message','未知错误'))" 2>/dev/null)
|
|
||||||
echo -e "${RED}❌ $MSG${NC}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_status() {
|
|
||||||
local RESULT=$(call_api "/status")
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
echo -e "${RED}❌ 无法连接管理服务${NC}"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ "$STATUS" = "running" ]; then
|
|
||||||
local PID=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('pid',''))" 2>/dev/null)
|
|
||||||
echo -e "${GREEN}✅ Chromium 运行中${NC}"
|
|
||||||
echo -e " PID: ${CYAN}$PID${NC}"
|
|
||||||
echo -e " 调试端口: ${CYAN}$ROOT_HOST:9222${NC}"
|
|
||||||
|
|
||||||
local BROWSER=$(echo "$RESULT" | python3 -c "
|
|
||||||
import sys,json
|
|
||||||
data = json.load(sys.stdin)
|
|
||||||
info = data.get('browser_info', {})
|
|
||||||
if isinstance(info, dict):
|
|
||||||
print(f\" 浏览器: {info.get('Browser', '未知')}\")
|
|
||||||
ua = info.get('User-Agent', '')
|
|
||||||
if ua:
|
|
||||||
print(f\" 用户代理: {ua[:80]}...\")
|
|
||||||
" 2>/dev/null)
|
|
||||||
echo -e "$BROWSER"
|
|
||||||
else
|
|
||||||
echo -e "${YELLOW}⏹️ Chromium 未运行${NC}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_debug_url() {
|
|
||||||
local RESULT=$(call_api "/status")
|
|
||||||
if [ $? -ne 0 ]; then return 1; fi
|
|
||||||
|
|
||||||
local STATUS=$(echo "$RESULT" | python3 -c "import sys,json;print(json.load(sys.stdin).get('status','unknown'))" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ "$STATUS" != "running" ]; then
|
|
||||||
echo -e "${RED}❌ Chromium 未运行,请先执行 start${NC}"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 获取 WebSocket 调试地址
|
|
||||||
local WS_URL=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
|
|
||||||
import sys,json
|
|
||||||
try:
|
|
||||||
data = json.load(sys.stdin)
|
|
||||||
print(data.get('webSocketDebuggerUrl', ''))
|
|
||||||
except:
|
|
||||||
print('')
|
|
||||||
" 2>/dev/null)
|
|
||||||
|
|
||||||
local PAGE_WS=$(curl -s "http://$ROOT_HOST:9222/json" 2>/dev/null | python3 -c "
|
|
||||||
import sys,json
|
|
||||||
try:
|
|
||||||
pages = json.load(sys.stdin)
|
|
||||||
if pages:
|
|
||||||
print(pages[0].get('webSocketDebuggerUrl', ''))
|
|
||||||
else:
|
|
||||||
print('')
|
|
||||||
except:
|
|
||||||
print('')
|
|
||||||
" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ -n "$WS_URL" ]; then
|
|
||||||
echo -e "${GREEN}🔗 调试地址:${NC}"
|
|
||||||
echo -e " 浏览器: ${CYAN}$WS_URL${NC}"
|
|
||||||
if [ -n "$PAGE_WS" ]; then
|
|
||||||
echo -e " 当前页面: ${CYAN}$PAGE_WS${NC}"
|
|
||||||
fi
|
|
||||||
echo ""
|
|
||||||
echo -e "${YELLOW}💡 VS Code 插件配置示例:${NC}"
|
|
||||||
echo " {"
|
|
||||||
echo " \"type\": \"chrome\","
|
|
||||||
echo " \"request\": \"attach\","
|
|
||||||
echo " \"name\": \"Attach to Chromium\","
|
|
||||||
echo " \"port\": 9222,"
|
|
||||||
echo " \"host\": \"$ROOT_HOST\""
|
|
||||||
echo " }"
|
|
||||||
else
|
|
||||||
echo -e "${RED}❌ 无法获取调试地址${NC}"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
cmd_log() {
|
|
||||||
# 先看看管理服务能不能返回日志路径
|
|
||||||
local LOG_PATH=$(curl -s "http://$ROOT_HOST:9222/json/version" 2>/dev/null | python3 -c "
|
|
||||||
import sys,json
|
|
||||||
print('ok')
|
|
||||||
" 2>/dev/null)
|
|
||||||
|
|
||||||
if [ $? -ne 0 ] || [ -z "$LOG_PATH" ]; then
|
|
||||||
echo -e "${YELLOW}⚠️ 无法直接访问日志文件${NC}"
|
|
||||||
echo " root 上的日志目录: ~/debug/logs/chromium/"
|
|
||||||
echo " 可以在 root 上用 cat/tail 查看"
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# 通过 Chromium 的 API 简单确认它在运行
|
|
||||||
echo -e "${YELLOW}📄 日志文件在 root 上: ~/debug/logs/chromium/${NC}"
|
|
||||||
echo -e " 请在 root 终端查看,或使用 ssh root@localhost 'tail -f ~/debug/logs/chromium/chromium-*.log'"
|
|
||||||
}
|
|
||||||
|
|
||||||
# ==================== 主入口 ====================
|
|
||||||
|
|
||||||
case "${1:-help}" in
|
|
||||||
start)
|
|
||||||
cmd_start
|
|
||||||
;;
|
|
||||||
stop)
|
|
||||||
cmd_stop
|
|
||||||
;;
|
|
||||||
restart)
|
|
||||||
cmd_restart
|
|
||||||
;;
|
|
||||||
status)
|
|
||||||
cmd_status
|
|
||||||
;;
|
|
||||||
debug-url|debug_url|url)
|
|
||||||
cmd_debug_url
|
|
||||||
;;
|
|
||||||
log)
|
|
||||||
shift
|
|
||||||
cmd_log "$@"
|
|
||||||
;;
|
|
||||||
help|--help|-h)
|
|
||||||
show_help
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo -e "${RED}未知命令: $1${NC}"
|
|
||||||
show_help
|
|
||||||
exit 1
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
@@ -9,7 +9,7 @@ services:
|
|||||||
container_name: cyrene_postgres
|
container_name: cyrene_postgres
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_USER: cyrene
|
POSTGRES_USER: cyrene
|
||||||
POSTGRES_PASSWORD: change_me
|
POSTGRES_PASSWORD: cyrene_pass
|
||||||
POSTGRES_DB: cyrene_ai
|
POSTGRES_DB: cyrene_ai
|
||||||
ports:
|
ports:
|
||||||
- "5432:5432"
|
- "5432:5432"
|
||||||
|
|||||||
Reference in New Issue
Block a user