内容
# Vibe Chat
一款可用于生产的 AI 聊天平台,支持多模型、语音输入/输出、RAG、多智能体对话和全面的支持仪表板。
---
## 演示
[](https://www.youtube.com/watch?v=VugVVeHkEyI)
---
## 概述
Vibe Chat 是一个为开发者和团队打造的生产就绪型 AI 聊天平台,它提供了比基本聊天机器人更多的功能。该平台支持同时使用五种模型,并允许定义具有自定义系统提示。除了聊天功能还连接了 Google Drive 和 Sheets(通过 Zapier MCP)、支持 ElevenLabs输入和输出、PDF基于 TF-IDF 及 map-reduce 摘要、多智能体对话、自改进提示、Discord 机器人和功能齐全的客户支持,支持 AI 驱动的工单路由、情感SLA 跟踪、和自动电子邮件通知。
用户通过 Google 登录;对话、消息和上传的文档对每个账户都是私有的层抽象为一个干净的 `IStorage` 接口,支持 PostgreSQL(D ORM);`MemStorage` 作为零配置备用方案没有数据库的情况下进行开发。
---
## 功能
###验证
- **Google** — 通过 Google2.0 实现登录(passport-google-o)。
- **基于会话的身份验证** — 服务器使用内存存储;时 TTL,httpOnly- **用户私有数据** — 对话、消息的文档通过 `userId` 隔离;api/*` 路由都需要有效的会话。
###
- **多模型 LLM 聊天** — 通过服务器发送事件实现流式响应。对话和消息在侧边栏中持久保存,支持重命名和删除。
MCP 工具 Drive 和 Sheets)** — AI 可以通过 Zapier文件和电子表格。在聊天流中显示为状态消息。
> **注意:** 调用 MCP 工具需要 OpenAI API 密钥。在使用 Google Drive 或 Sheets 功能之前,请在模型选择器中切换到 **GPT-4o Mini**。其他模型不支持工具执行所需的函数调用循环。
- **Labs 语音小部件** — 通过语音转文本实现语音输入,可选通过 TTS 实现语音输出。工具栏切换按钮可启用 AI 响应的自动播放。
###功能
- **多个 AI 模型** — 在头部切换 GPT-OSS 120B(Groq,默认)、GPT-4o Mini(OpenAI)、Claude Sonnet(Anthropic)、Gemini Flash(Google)和 DeepSeek V4 Flash(DeepSeek)等模型。
- **提示和代理管理** — 创建、编辑和删除具有自定义系统提示、图标和描述的代理。五个内置代理(General、Coder、Writer、Analyst、Tutor)受到保护,不允许编辑或删除。预置了两个示例自定义代理( Coach、Career Advisor);用户可以多个其他代理。
- **支持工作流自动化** — 在 `/support` 页面提供完整的支持仪表板,包括创建、AI 驱动的分类、优先级和情感分析、智能代理路由、SLA 最后期限、升级AI 建议的回复和聚合统计。
- **多渠道支持(Discord + 电子邮件)** — Discord 机器人响应私信和 @ 提及。EmailJS 在工单创建和代理回复时发送客户通知。
- **文本转语音响应** — AI 响应在每个消息后自动大声朗读(在合成前剥离 markdown)。
### AI 与智能
- **RAG 集成 上传 PDF 文件;服务器解析、分割并使用F 关键词评分对其进行索引。每个消息检索最相关的 k 个块,并将它们作为上下文注入系统提示中。文档范围限定为上传用户。
- **PDF 摘要** — 上传后,在聊天输入上方出现“摘要”按钮。单击它会调用专用的 `/api/documents/:id/summarize` 端点,该端点使用 map-reduce 模式:将文档分成 10 个块的批次,独立汇总每个批次,然后合并成结构化的最终摘要(概述、关键点、主要主题、关键要点)。 调用之间有 2 秒的延迟,以防止达到 的免费层速率限制。
- **多智能体对话** — 在 `/multi-agent` 页面的侧边栏中选择任意两个 AI 代理,输入一个主题,观察它们进行辩论或协作,连续 6。提供五个代理:General Assistant(平衡)、(富有想象力)、Data Analyst(基于证据)、(耐心清晰)和 Code Expert(技术)。选择 **Debate** 模式进行反驳论证,或 **Collaborate** 模式进行建设性思想建设。6后,使用 **Continue**、**Redirect**(新主题,相同代理)或 **Stop** 来控制对话。
- **自我改进代理** — 每次多智能完成后,代理可以根据来源自动改进其系统提示:用户投出的每轮 👍/👎 票和自动 LLM 质量评分(清晰度、个性准确性、相关性,1-5 级)。单击 **Improve Agents** 将所有反馈和分数发送到 `POST /api/multi-agent/improve`,通过 Groq 生成改进的提示版本,并将其作为 `pts` PostgreSQL 表中的版本化化。改进在下一次对话中自动加载。
### 设置与- **设置页面** — 在 `/settings`设置 UI,包含五个选项卡:账户、偏好、显示、数据和隐私、危险区。
- **用户资料管理** — 编辑显示名称;头像从 Google OAuth 拉取。
- **默认模型和代理偏好** — 用户偏好存储在 `jsonb`;在打开聊天页面时自动应用。
- **/深色/系统主题切换** — 在“选项卡中提供三向切换(浅色、、系统);系统模式跟踪操作系统偏好时默认为深色。
- **账户删除**危险区选项卡,带有确认模态,要求 `DELETE`;级联删除所有用户数据。
帮助页面** — 在 `/help` 提供完整的常见问题页面,包含入门指南、分组的问答accordion和支持工单系统的### 安全与基础设施
- **Helmet 安全标头** — 通过 `helmet` 中间件全局应用 CSP、HSTS、X-Frame-Options、X-Content-Type-Options 和 Referolicy。
- **CORS** — 锁定APP_URL`;启用凭证模式以获取会话 cookie。
- **速率限制** — 通过 `express-rate-limit` 实现按路由限制:身份验证路由(20/15 分钟)、LLM 消息(20 次请求/分钟)、语音端点(10 次请求)、文档上传/摘要(5 次请求/多智能体回合(15 次请求/分钟限制(100 次请求/15 分钟)其他所有情况。
- **Zod 输入验证** — 所有变更端点都使用 Zod 模式验证请求体;无效负载返回结构化的 400 错误 **会话强化** — 在生产环境中,cookie `httpOnly: true`、`sameSite"` 和 `secure: true`。必需的环境变量(`SESSION_SECRET`、`GOOGLE_CLIENT_ID`、`GOOGLE_CLIENT_SECRET`、`DATABASE_URL`)在生产模式启动时进行验证。
- **结构化日志记录** — `pino` 替换所有 `console.*` 调用。生产环境输出 JSON;开发环境通过ino-pretty人类可读的彩色化输出。日志级别由 `LOG_LEVEL` 环境变量控制。
- **Sentry 错误跟踪** — `@sentry/node` 在 `server/index.ts` 中初始化为第一个导入;`Sentry.setupExpressErrorHandler(app)` 捕获所有未处理的 Express 错误。当未设置 `SENTRY_DSN` 时自动禁用(在开发/CI 中无开销)。
- **生产环境错误净化** — 原始 LLM SDK 错误消息(可能暴露 API 密钥、模型名称或提供商内部信息)在 `NODE_ENV=production` 时被通用客户端消息替换;完整错误在服务器端记录。
- **数据库索引** — PostgreSQL 模式中的所有外键列都建立索引,以防止连接查询时进行全表扫描。
- **PostgreSQL 连接池** — `pg.Pool` 在请求之间重用连接;连接池大小通过 `DATABASE_URL` 连接字符串参数调整。
---
## 设计系统
前端遵循 **AI-Native UI + Glassmorphism Dark** 设计语言,旨在营造沉浸式和智能化的体验。
| 令 值 |
|---|---|
| 背景 | 深 `#050A14| 主要颜色 |博青 `#00D8` 强调色 | AI 靛蓝 `#B6` |
| 柔和文本 | 铬银 `#8C4` |
标题字体 | Orbitron(标志、登录 h空状态标题) |
| 正文字体 | DM Sans(聊天消息、) |
| 代码字体 | Fira Code(代码、代码块) |
**关键 UI **
- **登录页面** — 全屏(`ai-head.mp4`,Runway AI 生成)带有方向渐变叠加层;右侧放置登录面板。
- **侧边栏标志** — “VIBE”(Orbitron 粗体,青色)+ “CHAT”(Orbitron 常规,白色),无图标容器。
- **空聊天状态** — AI 机器人头像(`logo.png`)带有 ` 动画和青色 `drop-shadow`;Orbitron 字体显示“How can I help you today?” **消息气泡** — 用户消息齐,带有的深蓝色背景 消息左对齐 `3px solid #00B4D 左侧装饰边细微的青晕。两种样式在深色和浅色自动切换,通过 CSS 自定义属性实现。
-聊天按钮** — 实心青色,带有时双层青色盒子阴影。
所有颜色令牌都存活在 `/index.css` 中,作为 自定义属性(` 用于浅色模式,`.dark深色模式)。 中永远不要使用翠绿色或紫色。
---
## 技术| 层 ||---|---|
| | React 18、Vite、Tailwindshadcn/ui、TanStack Query、wouter |
| 后端 | Node.js、Express、、tsx |
| 身份验证 | Passport.js、passport-google-oauth20、express-session、memore |
| 默认 AI | Groq(GPT 120B) |
| 其他 AI |(GPT-4o Mini)、Anthropic(Claude Sonnet)、Google Gemini Flash |
| 语音 | ElevenLabs(TTS + STT) |
| MCP / 工具 | Zapier MCP(Google Drive、Google Sheets) |
| 消息 | Discord.js、EmailJS |
| 存储 | PostgreSQL + Drizzle ORM(`DatabaseStorage`);`MemStorage` 内存备用 |
| 构建 | esbuild(服务器)、Vite(客户端) |
---
## 项目结构
```
/
├── client/ # React SPA(Vite)
│ ├── public/
│ │ ├── ai-head.mp4 # 登录页面视频背景(Runway AI 生成)
│ │ ├── logo.png # 空聊天状态下使用的 AI 头像
│ │ ├── general_assistant.png # 多智能体头像
│ │ ├── creative_writer.png # 多智能体头像
│ │ ├── data_analyst.png # 多智能体头像
│ │ ├── learning_tutor.png # 多智能体头像
│ │ └── code_expert.png # 多智能体头像
│ └── src/
│ ├── App.tsx # 根节点 — 提供者 + 身份验证门控 wouter 路由器
│ ├── pages/
│ │ ├── chat.tsx # “/” — 主聊天界面
│ │ ├── support.tsx # “/support” — 支持仪表板
│ │ ├── settings.tsx # “/settings” — 账户、偏好、显示
│ │ ├── help.tsx # “/help” — 入门指南 + 常见问题
│ │ ├── multi-agent.tsx # “/multi-agent” — 双代理辩论/协作对话
│ │ ├── login.tsx # “/login” — Google 登录页面
│ │ └── not-found.tsx # 404 备用
│ ├── components/ # 功能组件
│ │ └── ui/ # shadcn/ui 原语(自动生成)
│ ├── hooks/ # use-toast、use-mobile、use-auth
│ └── lib/
│ ├── queryClient.ts # TanStack Query 客户端 + apiRequest 帮助程序
│ └── utils.ts # 类别合并实用程序
│
├── # Express HTTP 服务器(端口 5000 ├── index.ts # 入口点、passport、中间件、HTTP 服务器
├── routes.ts # 所有路由注册(、/auth/*、/api/*)
├── storage.ts # IStorage 接口 + MemStorage;选择 DatabaseStorage(当设置 DATABASE_URL 时)
│ ├── storage.db.ts # PostgreSQL 支持的 IStorage(Drizzle)
│ ├── db.ts # Drizzle 客户端(pg Pool)
│ ├── config/
│ │ ├── env.ts # 过程.env 的单一来源
│ │ └── passport.ts # Google OAuth 策略;序列化/反序列化用户
│ ├── controllers/
│ │ ├── auth.controller.ts # /auth/google、/auth/google/callback、/auth/logout、/auth/me
│ │ ├── chat.controller.ts # 会话、消息、模型、语音
│ │ ├── support.controller.ts # 工单、代理、升级规则、统计
│ │ ├── agent.controller.ts # 代理 CRUD
│ │ rag.controller.ts # 文档上传、列表CP 工具
│ ├──.controller.ts # GET /api/multi-agent/agents、POST /api/multi-agent/turn
├── promptImprovement.controller.ts # POST 反馈/改进、GET 提示历史
│ │ └── user.controller.ts # 配置文件更新、偏好、账户删除
│ ├── middleware/
│ │ └── requireAuth.ts # 检查 req.isAuthenticated();如果未通过,则返回 401
│ ├── scripts/
│ │ ├── seedAgentPrompts.ts # 将 v1 系统提示种子到 agent_prompts 表 │ └── seedCustomAgents.ts Debate Coach + Career Advisor 种子到 agents 表
│ └── services/
│ ├── auth.service.ts # initiateGoogleAuth、handleCallback、logout、getCurrentUser
│ ├── llm.service.ts # 所有 AI 模型调用(AsyncGenerator 流式传输)
│ ├── user.service.ts # 名称/偏好验证和存储委托 ├── support.service.ts # 工单分析、路由、升级检查
│ ├── rag.service.ts # PDF 解析、分割、TF-IDF 检索(用户 ID 范围)
│ ├── multi-agent.service.ts # AGENTS 配置、runAgentTurn()、AgentTurn/MultiAgentRequest 类型
│ ├── prompt-improvement.service.ts # autoScoreTurns、improvePrompt、shouldAutoImprove
│ ├── mcp.service.ts # Zapier MCP JSON-RPC 客户端
│ ├── discord.service.ts # Discord.js │ ├── elevenlabs.service.ts TS 和 ST│ └── email.service.ts # EmailJS 通知
│
├── shared/
│ └── schema.ts # Drizzle 表定义 + 所有领域类型
│
├── .env.example # 环境变量模板
├── drizzle.config.ts # Drizzle Kit 配置(读取 DATABASE_URL)
├── tsconfig.json
└── vite.config.ts
```
---
## 快速入门
### - **Node.js** 20 或更高版本
- ** 9 或更高版本 **PostgreSQL 16** — 持久存储和用户身份验证所需
- **Google Cloud 项目**,配置 2.0 网页应用程序参见 [Google Cloud Console](https.cloud.google.com/))
-重定向 URI:`http://5000/auth/google/callback`
```bash
# 1. 安装 PostgreSQL 16(macOS)
brew install postgresql@16 && brew services start postgresql@16
# 2. 创建数据库
createdb vibechat
# 3. 克隆仓库
git clone <your-repo-url>
cd Vibe-Chat
# 4. 安装依赖
npm install
# 5. 创建环境文件并填写所需变量
cp .env.example .env
# 6. 将模式推送到数据库
npm run db:push
# 7. 启动开发服务器
npm run dev
# → http://localhost:5000
```
### 环境变量
| 变量 | 是否必需 | 描述 |
|---|---|---|
| `SESSION_SECRET` | **是** | 用于签署会话 cookie 的密钥。使用长随机字符串。 |
| `GOOGLE_CLIENT_ID` | **是** | Google Cloud Console 中的 OAuth 2.0 客户端 ID。 |
| `GOOGLE_CLIENT_SECRET` | **是** | Google Cloud Console 中的 OAuth 2.0 客户端密钥。 |
| `APP_URL` | **是** | 应用的基本 URL,用于构造 OAuth 回调 URL(例如 `http://localhost:5000`)。 |
| `DATABASE_URL` | **是** | PostgreSQL 连接字符串(例如 `postgresql://localhost:5432/vibechat`)。 |
| `GROQ_API_KEY` |** | 默认 AI 提供商-OSS 120B 推理模型 [console.groq.com](https://console.groq.com) 获取。 `OPENAI_API_KEY` | 可选 | 启用 GPT-4 模型和支持工单 AI 分析。 |
| `ANTHROPIC_API_KEY` | 可选 | Sonnet 模型。 |
| `GOOGLE_GEMINI_API_KEY` | 可选 | 启用 Gemini Flash 模型。 |
| `DEEPSEEK_API_KEY` | 可选 | 启用 DeepSeek V4 Flash 模型| `ELEVENLABS` | 可选 | 启用语音输入(STT)和语音输出)。 |
| `ZAPIER_MCP_URL` | 可选 | 启用 Google Drive 和 Google Sheets MCP 工具(需要 OpenAI API 密钥 +4o Mini 模型)。 |
| `ZAPIER_MCP_API_KEY` | 可选 | Zapier MCP 端点的身份验证密钥(需要 Open 密钥 + GPT-4o Mini 模型)。 |
| `DIS_BOT_TOKEN` | 可选 | 启用 Discord 机器人集成。 |
| `EMAILJS_SERVICE_ID` | 可选 | 用于工单电子邮件通知的 EmailJS 服务 ID。 |
| `EMAILJS_TEMPLATE_ID` | 可选 | 用于工单电子邮件通知的 EmailJS 模板 ID。 |
| `EMAILJS_PUBLIC_KEY` | 可选 | EmailJS 公共密钥。 |
| `EMAILJS_PRIVATE_KEY` | 可选 | EmailJS 私 |
### 可用脚本bash
npm run dev # 开发服务器 — Express +MR,访问 http://localhost:5000
npm run build #(esbuild + Vite)
npm start # 运行生产构建
npm run check # 仅限 TypeScript 类型检查
npm run db:push # 将 Drizzle 模式更改推送到 PostgreSQL
npm test # 一次运行所有测试(vitest)
npm run test:watch # 在模式下运行测试
npm run test:coverage # 运行测试并生成覆盖率报告
npm run seed:agents # 将 5 个的 v1 系统提示种子到 agent_prompts 表
npm run seed:custom-agents # 将 Debate Coach + Career Advisor 示例自定义代理插入 agents 表
```
---
## 使用 Docker 运行
### erequisites
- 已安装 Docker 和 Docker Compose
### 快速入门
```bash
# 复制环境文件
cp .env.example .env
# 在 .env 中填写您的值,然后:
docker compose up --build
# 应用将在 http://localhost:5000 上可用
```
### 生产镜像
```bash
# 构建生产镜像
-t vibe-chat .
# 使用环境变量运行
docker run -p 5000:5000 \
--env-file .env \
vibe-chat
```
---
## CI/CD
GitHub Actions 工作流自动运行:
流 | 触发器 | 执行操作 |
|---|---|---|
| CI — 类型检查和测试 | 每次推送和拉取请求到 main 分支 | 类型脚本检查 + vitest 测试套件 |
| Docker — 构建验证 | 推送到 main 分支 | 构建生产 Docker 镜像 |
合并到 main 分支前,所有检查必须通过。
---
## 许可证
MIT © 2026 Elena — 查看 [LICENSE](LICENSE) 获取完整文本。
MCP 配置
以下是此 MCP Server 的配置信息,可直接复制到 Cursor 或其他 MCP 客户端中使用。
mcp.json
连接信息
猜你喜欢
暂无推荐服务器