# PureChatNext
**Repository Path**: H260788/PureChatNext
## Basic Information
- **Project Name**: PureChatNext
- **Description**: PureChatNext 是一个可自托管的 AI 工作台,让同一个助手同时服务于 Web、微信和 QQ。
- **Primary Language**: TypeScript
- **License**: MIT
- **Default Branch**: main
- **Homepage**: https://next.purechat.cn
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 0
- **Created**: 2025-11-05
- **Last Updated**: 2026-09-11
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README

# PureChat
把你的 AI 助手接入微信和 QQ。
面向中文用户和小团队的开源自托管 AI 工作台,支持多模型、联网搜索、文件处理和私有部署。
[在线体验][online-demo-link] · [Vercel 部署][vercel-deploy-link] · [Docker 自托管](./docs/self-hosting/platform/docker.md) · [文档站][docs-site-link] · [讨论区][github-discussions-link]
[![][github-release-shield]][github-release-link]
[![][github-license-shield]][github-license-link]
[![][github-stars-shield]][github-stars-link]
[![][github-issues-shield]][github-issues-link]
[![][github-discussions-shield]][github-discussions-link]
## 目录
- [项目简介](#项目简介)
- [特性](#特性)
- [快速开始](#快速开始)
- [部署](#部署)
- [环境变量](#环境变量)
- [项目结构](#项目结构)
- [常用命令](#常用命令)
- [文档](#文档)
- [参与贡献](#参与贡献)
- [License](#license)
## 项目简介
PureChat(仓库名:[PureChatNext][repo-link])让同一个 AI 助手同时服务于 **Web、微信和 QQ**。你可以直接使用 [在线体验][online-demo-link],也可以把数据库、模型密钥、文件和聊天记录完整部署在自己的环境中。
与通用 ChatGPT Clone 相比,PureChat 优先解决中文用户的三个具体问题:
- **聊天入口不必迁移**:通过微信和 QQ Channel Gateway,在已有通讯工具中直接使用 AI
- **数据与成本可控**:支持自托管、自备模型 API Key、免费额度账本与用量明细
- **能力可以组合**:多模型、联网搜索、文件解析、Agent 和消息渠道共用一套工作台
技术栈:
- **前端**:Vite + React Router SPA,开发时运行在 `5174` 端口
- **服务端**:Next.js 16 BFF,负责 API、认证和生产环境的 SPA HTML 壳
- **数据层**:PostgreSQL + Drizzle ORM,可使用 Supabase、Neon 或本地 Docker
- **AI 能力**:Vercel AI SDK,支持 OpenAI、DeepSeek、PureChat / AI Gateway 等 Provider
生产环境以单个 Next.js 项目部署,SPA 静态资源与 API 共用同一域名。
```mermaid
flowchart LR
WeChat[微信] --> Gateway[Channel Gateway]
QQ[QQ] --> Gateway
Web[Web SPA] --> Next[Next.js BFF]
Gateway --> Next
Next --> PG[(PostgreSQL)]
Next --> LLM[OpenAI / DeepSeek / Gateway]
```
## 特性
### 微信与 QQ 渠道
在微信或 QQ 里扫码绑定后,即可私聊或群内 @ 助手,不必再打开单独的网页。
- 微信 iLink 扫码连接,并由 Channel Gateway 持续接收与回复消息
- QQ 扫码、WebSocket 与 Webhook 多种连接方式
- 渠道可选择 Agent、模型与 Provider,复用 Web 端能力
- 支持 `/agents`、`/new`、`/stop`、`/help` 等会话指令
配置说明见 [微信渠道](./docs/self-hosting/channels/wechat/setup.md) 与 [QQ 渠道](./docs/self-hosting/channels/qq/setup.md)。
### 多模型对话
- 流式输出与 Tool Calling
- 通过环境变量切换模型 Provider、API Key 和代理地址
- 支持 OpenAI、DeepSeek 等常用模型服务
### 用户认证
- 邮箱密码注册与登录
- 邮箱验证、魔法链接(需配置邮件服务)
- GitHub、Google、Apple、微信、飞书等 OAuth / SSO
- 个人资料、密码和关联账号管理
认证与邮件配置见 [邮箱服务与验证](./docs/self-hosting/auth/email.md)。
### 联网搜索与文件处理
- 搜索聚合:SearXNG、Search1API、Google、Brave 等
- 网页抓取:naive、Firecrawl、Tavily、Jina、Browserless 等
- 文档解析:PDF、DOCX、PPTX、Excel 等
详细配置见 [联网搜索与爬虫](./docs/self-hosting/features/online-search.md)。
### 模块化 Monorepo
项目使用 pnpm workspace,将共享能力拆分为 `@pure/*` 包,便于复用、测试和独立演进。核心包包括环境变量、数据库、模型目录、文件加载、网页爬虫、SSRF 安全请求和聊天渠道适配器。
## 快速开始
### 前置要求
- [Node.js](https://nodejs.org/) ≥ 20
- [pnpm](https://pnpm.io/) 10(版本见 `package.json`)
- [Bun](https://bun.sh/)(开发脚本和部分迁移脚本使用)
- PostgreSQL;也可以使用项目提供的 Docker 依赖
### 1. 安装并配置
```bash
git clone https://github.com/Hyk260/PureChatNext.git
cd PureChatNext
pnpm install
cp .env.example .env.local
```
编辑 `.env.local`,至少准备:
```env
# 本地必须指向 SPA 端口;CORS 默认允许该地址,不必再配相同的 ALLOWED_ORIGINS
APP_URL=http://localhost:5174
# 数据库(云数据库也可以)
DATABASE_DRIVER=neon
DATABASE_URL=postgresql://user:password@host:5432/database
# 生成方式见 .env.example
KEY_VAULTS_SECRET=your-random-secret
AUTH_SECRET=your-random-secret
JWKS_KEY='{"keys":[...]}'
# 至少配置一个可用的模型 Provider
OPENAI_API_KEY=your-api-key
```
密钥生成和完整变量说明见 [.env.example](./.env.example) 与 [环境变量配置](./docs/self-hosting/configuration/environment.md)。
### 2. 执行数据库迁移
```bash
pnpm db:migrate
```
### 3. 启动开发环境
```bash
# 推荐:并发启动 Next API / BFF(3000)与 Vite SPA(5174)
pnpm dev
```
打开 。`3000` 端口只提供 API / BFF,不是开发时的主 UI 入口。
如果需要使用 Alt+Shift 点击页面元素跳转源码:
```bash
pnpm dev:inspect
```
也可以分开启动:
```bash
pnpm dev:next # Next API / BFF → http://localhost:3000
pnpm dev:spa # Vite SPA → http://localhost:5174
```
### 使用 Docker 启动本地依赖
安装 [Docker Desktop](https://www.docker.com/products/docker-desktop/) 后,可以一次启动 PostgreSQL、Redis、RustFS 和 SearXNG:
```bash
pnpm docker:setup:dev
pnpm dev:docker
pnpm db:migrate
pnpm dev
```
本地 Docker 连接信息会写入 `docker-compose/dev/.env`,并可按需同步到 `.env.local`。日常停止和重置:
```bash
pnpm dev:docker:down # 停止,保留数据卷
pnpm dev:docker:reset # 确认后删除开发数据并重建
```
## 部署
### Vercel
点击下方按钮克隆并创建 Vercel 项目,然后按环境变量文档补齐数据库、认证与模型配置:
[][vercel-deploy-link]
项目按单个 Next.js 项目部署,仓库已包含 `vercel.json`。配置以下内容后即可上线:
1. 安装命令:`pnpm install`
2. 构建命令:`pnpm build`
3. 配置生产环境变量,至少包含数据库、认证密钥、`APP_URL` 和模型 Provider 密钥
4. 生产前后端同域时不必再配 `ALLOWED_ORIGINS`;有额外前端域名时再设置,不要使用 `*`
5. 在部署前或 CI 中执行 `pnpm db:migrate`
构建流程为 `build:spa` → 复制 SPA 产物 → `next build`。部署后的静态资源位于 `/_spa/**`,未匹配的 UI 路径会回退到 SPA HTML 壳。
### Docker 自托管
```bash
pnpm docker:setup:deploy
# 修改 docker-compose/deploy/.env 后,一条命令构建并启动
pnpm docker:deploy
```
首次生成配置后,请修改正式域名和模型密钥。生产 Compose 会在应用启动前自动执行数据库迁移,健康检查地址为 `/api/health`。
云服务器在线安装(拉 GHCR,无需本机打包):
```bash
curl -fsSL https://raw.githubusercontent.com/Hyk260/PureChatNext/main/docker-compose/deploy/install-online.sh \
| sudo APP_URL=https://chat.example.com bash
```
不便拉镜像时,改用离线包:
```bash
pnpm docker:pack
pnpm docker:upload
# 上传后:sudo APP_URL=https://chat.example.com /opt/purechat/install.sh
```
完整说明见 [Docker 自托管](./docs/self-hosting/platform/docker.md)。云服务器与 1Panel 见 [云服务器部署](./docs/self-hosting/platform/1panel.md)。
## 环境变量
环境变量由 `packages/env` 统一校验。常用配置如下:
| 变量 | 用途 | 说明 |
| --- | --- | --- |
| `APP_URL` | 应用对外地址 | 本地使用 `http://localhost:5174`,生产使用正式域名;CORS 默认允许该地址 |
| `ALLOWED_ORIGINS` | CORS 额外来源 | 可选;省略时使用 `APP_URL`。不要使用 `*` |
| `DATABASE_DRIVER` | 数据库连接模式 | 云数据库使用 `neon`;本地 / Docker PostgreSQL 使用 `node` |
| `DATABASE_URL` | PostgreSQL 连接字符串 | Supabase、Neon 或本地 PostgreSQL 均可 |
| `KEY_VAULTS_SECRET` | 敏感配置加密密钥 | 渠道凭证与用户服务商密钥;使用随机高强度密钥 |
| `AUTH_SECRET` / `JWKS_KEY` | 认证与 JWT 密钥 | 生成方式见 `.env.example` |
| `OPENAI_API_KEY` / `DEEPSEEK_API_KEY` | 模型 Provider 密钥 | 网页聊天可选兜底;微信 / QQ 需在设置页保存用户密钥 |
| `SEARCH_PROVIDERS` / `CRAWLER_IMPLS` | 搜索与爬虫链 | 不需要联网搜索时可以不配置 |
| `REDIS_URL` | 缓存与队列 | 使用 Docker 或托管 Redis 时配置 |
| `S3_*` | 文件对象存储 | 使用 RustFS、MinIO、S3 等兼容服务时配置 |
完整变量列表、认证、邮件、对象存储和联网搜索配置请查看 [环境变量详解](./docs/self-hosting/configuration/environment.md)。
## 项目结构
```text
PureChatNext/
├── apps/
│ ├── desktop/ # Electron 桌面应用
│ └── docs/ # 独立 Next.js + Fumadocs 文档站
├── packages/ # @pure/* 工作区包
│ ├── database/ # Drizzle Schema、Model 与迁移
│ ├── env/ # 环境变量校验
│ ├── model-bank/ # 模型目录与定价
│ ├── file-loaders/ # PDF、DOCX、PPTX、Excel 等文档加载
│ ├── web-crawler/ # 网页爬虫实现
│ └── chat-adapter/ # QQ / 微信渠道适配器
├── src/
│ ├── spa/ # Vite SPA 入口与 Router
│ ├── features/ # 业务 UI
│ ├── app/api/ # Next API 路由
│ ├── server/ # 服务端业务与搜索聚合
│ ├── libs/ # 认证、中间件与工具
│ └── components/ # 通用 React 组件
├── docs/ # 文档站与 GitHub 共用的公开 Markdown 内容源
└── scripts/ # 开发、构建、迁移与 Docker 脚本
```
## 常用命令
```bash
# 开发
pnpm dev
pnpm dev:inspect
pnpm dev:next
pnpm dev:spa
pnpm dev:docs
# 构建与运行
pnpm build
pnpm build:docs
pnpm start
# 数据库
pnpm db:check
pnpm db:generate
pnpm db:migrate
pnpm db:studio
# 质量检查与测试
pnpm lint
pnpm exec vitest run --silent='passed-only'
# Docker
pnpm docker:validate
pnpm docker:deploy
pnpm dev:docker
pnpm dev:docker:down
```
## 文档
| 文档 | 内容 |
| --- | --- |
| [公开文档站][docs-site-link] | 可搜索的正式文档、目录和页面导航 |
| [文档索引](./docs/README.md) | 全部公开文档与维护规范 |
| [快速开始](./docs/getting-started/quick-start.md) | 云数据库与本地开发配置 |
| [开发指南](./docs/development/README.md) | 数据库、质量检查与样式约定 |
| [自托管指南](./docs/self-hosting/README.md) | 部署、基础设施、功能与消息渠道 |
| [开发约定](./AGENTS.md) | AI Agent 与项目开发指南 |
## 参与贡献
欢迎提交 [Issue][github-issues-link]、参与 [Discussion][github-discussions-link] 或发起 Pull Request。开始前请阅读 [贡献指南](./CONTRIBUTING.md) 与 [安全政策](./SECURITY.md)。提交前请运行:
```bash
pnpm lint
pnpm exec vitest run --silent='passed-only'
```
如果修改了环境变量,请同步更新 `packages/env` 和 `.env.example`,并补充对应文档。
## License
本项目基于 [MIT License](./LICENSE) 开源。
Copyright © 2025–2026 [Hyk260][profile-link].
[github-discussions-link]: https://github.com/Hyk260/PureChatNext/discussions
[github-discussions-shield]: https://img.shields.io/github/discussions/Hyk260/PureChatNext?color=c084fc&labelColor=black&style=flat-square
[github-issues-link]: https://github.com/Hyk260/PureChatNext/issues
[github-issues-shield]: https://img.shields.io/github/issues/Hyk260/PureChatNext?color=ff80eb&labelColor=black&style=flat-square
[github-license-link]: https://github.com/Hyk260/PureChatNext/blob/main/LICENSE
[github-license-shield]: https://img.shields.io/badge/license-MIT-white?labelColor=black&style=flat-square
[github-release-link]: https://github.com/Hyk260/PureChatNext/releases
[github-release-shield]: https://img.shields.io/github/v/release/Hyk260/PureChatNext?color=369eff&labelColor=black&logo=github&style=flat-square
[github-stars-link]: https://github.com/Hyk260/PureChatNext/stargazers
[github-stars-shield]: https://img.shields.io/github/stars/Hyk260/PureChatNext?color=ffcb47&labelColor=black&style=flat-square
[online-demo-link]: https://next.purechat.cn
[docs-site-link]: https://next-docs.purechat.cn
[profile-link]: https://github.com/Hyk260
[repo-link]: https://github.com/Hyk260/PureChatNext
[vercel-deploy-link]: https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FHyk260%2FPureChatNext