快速入门
Simmetric Chat 是一个本地优先、可离线运行(air-gap)的 AI 聊天平台:它可以在不连接外部云服务的情况下运行,使用本地 LLM(Ollama)、本地嵌入(Xenova)和本地向量数据库(LanceDB)。不过,在配置完成后,它也可以使用云提供商(OpenAI、Anthropic、OpenRouter)和远程向量数据库(Qdrant)。
Simmetric Chat 是一个本地优先、可离线运行(air-gap)的 AI 聊天平台:它可以在不连接外部云服务的情况下运行,使用本地 LLM(Ollama)、本地嵌入(Xenova)和本地向量数据库(LanceDB)。不过,在配置完成后,它也可以使用云提供商(OpenAI、Anthropic、OpenRouter)和远程向量数据库(Qdrant)。
前置要求
- Node.js ≥ 24 和 pnpm 11.24.0(monorepo 管理器;`corepack enable && corepack prepare [email protected] --activate`)
- PostgreSQL 16(主数据库)
- Ollama(可选,但建议用于本地 LLM)- https://ollama.com
- Docker + Docker Compose(用于容器化部署,见 09 - Deployment)
验证:
node -v && pnpm -v && psql --version安装(本地开发)
git clone <repo> simmetric-chat
cd simmetric-chat
pnpm installmonorepo 使用 pnpm workspaces + Turborepo。包位于 packages/:shared、server、frontend、collector、widget,以及桌面应用 src-tauri/。
环境变量
所有包都读取 仓库根目录下的 `.env`(唯一的运行时配置文件;旧的按包 .env 层级已移除:优先级为 process.env > 根 .env > 代码默认值)。创建最小文件:
cp .env.example .env必需的密钥(JWT_SECRET、COLLECTOR_SECRET)和 widget 密钥:
JWT_SECRET=$(openssl rand -hex 32)
COLLECTOR_SECRET=$(openssl rand -hex 32)
WIDGET_API_KEY=$(openssl rand -hex 32)
DATABASE_URL=postgresql://simmetricchat:simmetricchat@localhost:5432/simmetricchat
LLM_PROVIDER=ollama
LLM_MODEL=gemma4:latest
OLLAMA_BASE_URL=http://localhost:11434WIDGET_API_KEY 是 widget 服务所必需的(它自己的 Zod schema 缺少该变量时会退出进程);服务器启动时将其注册为 widget-service 账户的 API 密钥(幂等)。开发时可选的变量:API_KEY_HMAC_SECRET(在设置之前 sk- API 密钥不可用)和 ENCRYPTION_KEY(回退到 scryptSync(JWT_SECRET);生产环境必需)。缺少 LICENSE_KEY 意味着 Community 构建。
完整的环境变量表:03 - Configuration。
数据库
创建 PostgreSQL 数据库(例如 docker compose -f docker/docker-compose.infra.yml up -d postgres),然后生成 Prisma 客户端、应用迁移和 seed:
pnpm db:generate # 生成 Prisma 客户端(+ Prisma 7/pnpm 符号链接修复)
pnpm --filter server db:migrate # 应用迁移(交互式)
pnpm --filter server db:seed # 默认角色(Admin、Superuser、User)、权限、配置、模板手动 seed 的替代方案:在空数据库上,前端显示 4 步设置向导(管理员、LLM 提供商、向量数据库)- 或者服务器自动 seed 引导管理员(默认 SEED_BOOTSTRAP_ADMIN=true,可通过 SEED_ADMIN_USERNAME / SEED_ADMIN_PASSWORD / SEED_ADMIN_EMAIL 配置,默认 admin / admin123 / [email protected],并带有 mustChangePassword=true)。自助注册默认关闭(ALLOW_REGISTRATION=false):管理员从 Settings 或通过 POST /api/auth/admin-register 创建用户。
启动开发环境
一条命令通过 Turborepo 启动所有服务:
pnpm dev默认端口:
| Service | 端口 | 说明 |
|---|---|---|
| frontend | 5173 | Vite SPA(React 19),/api 代理 → server |
| server | 3000 | Express API + Swagger 位于 /api-docs |
| collector | 3210 | 文档摄取微服务 |
| widget | 3211 | 可嵌入的 widget 服务(Preact) |
打开 http://localhost:5173,使用 admin / admin123 登录,然后更改密码。
如果 Ollama 未运行,聊天会以连接错误失败。使用 ollama pull gemma4:latest && ollama serve 拉取模型,或在 Settings → Providers 中配置云提供商。UI 快速导览
- Sidebar - 按角色过滤的分组:Overview(仪表盘)、Chat(聊天、项目、工作区)、Knowledge(文档、知识库、上传)、Platform(widget、市场、分析 - 管理员)、System(事件日志、SSO - 管理员/enterprise)。条目遵循 13 个 RBAC 菜单部分。
- Chat - 逐 token 流式输出、按聊天选择模型(
Cmd+K面板)、并排对比(Cmd+Shift+M)、RAG 引用、/model斜杠命令。 - Documents - 拖放上传(PDF、DOCX、XLSX、PPTX、TXT、MD、CSV、带 OCR 的图片),状态
pending → processing → completed → failed。 - Settings - 5 个主标签页(个人资料、LLM 提供商、外观、安全、高级),嵌套子部分:Providers、LLM & Embedding、Vector DB、API Keys、Roles、Users、MCP Connections、Maintenance、Backups、DLP、Widget(专用页面)、OCR 等。
- Maintenance - 嵌入模型更改后一键 RAG 重新索引。
推荐的第一步
- 配置提供商 - Settings → Providers:添加 Ollama(本地)或 OpenAI/Anthropic。
- 创建工作区和项目 - 文档和聊天都限定在工作区内。
- 上传文档 - Documents → 上传;等待
completed状态。 - 聊天 - 在工作区中打开聊天并询问文档相关问题(混合 RAG)。
- (管理员)探索市场 - 安装 MCP 服务器以用工具扩展代理。
后续步骤
- 了解底层工作原理:02 - Architecture
- 所有环境变量和功能开关:03 - Configuration
- 在您的网站上嵌入聊天:06 - Widget Integration