# test **Repository Path**: chm6/test ## Basic Information - **Project Name**: test - **Description**: 不要写介绍 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-05-16 - **Last Updated**: 2026-05-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 洋葱销练营 (Onion Sales Camp) > 洋葱学园销售团队专属的 AI 训练平台。AI 播客 / 话术拆解 / 智能助教 / 场景陪练四大模块,构建「沉淀 → 拆解 → 答疑 → 训练 → 复习」闭环。 本仓库已完成**完整数据底座 + 全部 API + UI 接通**,所有 AI 调用(LLM / TTS / ASR / Embedding)走统一的 Provider 抽象层(`lib/ai/`),默认是 mock 实现,**接真实供应商只改 `lib/ai/index.ts`,业务代码零改动**。 --- ## 一、技术栈 - **框架**:Next.js 14 App Router + TypeScript - **UI**:Tailwind CSS + shadcn/ui 风格 + lucide-react - **数据库**:PostgreSQL + Prisma ORM(30+ 实体覆盖 9 大领域) - **鉴权**:飞书 H5 静默免登 + JWT cookie + 企业身份限定(`@guanghe.tv`) - **权限**:完整 Role + Permission 表 + `lib/permissions.ts` 引擎,env 白名单兜底 - **AI**:抽象 Provider(`lib/ai/types.ts`),切真实模型一行配置切换 - **API 校验**:zod + 标准 `lib/api.ts` 工具(withAuth / withPermissions / handleError) - **部署**:Vercel / 内网 + Cloudflare Tunnel(飞书强制 HTTPS) --- ## 二、目录结构 ``` app/ api/ auth/ 飞书免登 + me + logout me/team 销售看我的小组 scripts/ 剥洋葱:CRUD + favorite podcasts/ 听葱片:CRUD + jobs + play 埋点 ask/sessions 问小葱:会话 + 消息(RAG) moments/generate 朋友圈生成(含合规过滤) tasks/ 任务中心:CRUD + 派发 + 组员 arena/ 练葱园:scenarios + sessions + turns + end + report tags/ 标签体系 admin/ 后台:teams / users / prompts / audit-logs / llm-cost / users/[id]/roles webhooks/ 飞书机器人 / 文档变更(占位) scripts/ 剥洋葱页(列表 / 详情 / 新建向导) podcast/ 听葱片页(电台 / 播放器) ask/ 问小葱页(对话 / 任务 / 朋友圈) arena/ 练葱园页(首页 / 训练 / 报告) admin/ 葱园后台 + admin/teams me/team 我的小组 login/ 登录失败 fallback components/ NavBar.tsx 全局导航 + 演示角色切换器 DemoRoleProvider.tsx 全局 RBAC Demo Context FeishuAuthGate.tsx 飞书免登客户端 Gate Home / MyTeam / RadarChart 主要 UI ui/ shadcn 风格组件 lib/ ai/ AI Provider 抽象层 + Mock 实现 services/ script-analysis.ts 话术 7 字段拆解 worker podcast-generator.ts 播客生成 Job 处理器 ask-rag.ts 问小葱 RAG 流水线 arena-trainer.ts AI 客户多轮对话 + 7 维评分 api.ts API 工具(withAuth/withPermissions/parseBody...) audit.ts 审计日志写入工具 llm-cost.ts LLM 调用成本记账 permissions.ts 完整权限引擎 jwt.ts / auth.ts JWT 签发与会话 feishu.ts 飞书 OpenAPI 调用封装 identity-guard.ts 企业身份(@guanghe.tv)校验 use-api.ts 客户端 fetch hook + mock fallback prisma.ts Prisma 客户端单例 mock-data.ts 原型阶段 mock 数据(已迁移到 seed) prisma/ schema.prisma 完整 30+ 实体 seed.ts 种子数据(角色/权限/标签/团队/示例话术/Prompt) docs/prd/ 6 份完整 PRD(00–05) middleware.ts /api 鉴权 ``` --- ## 三、本地启动 ### 1. 装依赖 ```bash npm install ``` ### 2. 环境变量 ```bash cp .env.example .env.local ``` 填入: - `FEISHU_APP_ID` / `FEISHU_APP_SECRET`:飞书后台「凭证与基础信息」 - `NEXT_PUBLIC_FEISHU_APP_ID`:同 App ID - `JWT_SECRET`:`openssl rand -base64 32` - `DATABASE_URL`:PostgreSQL 连接串 - `ONION_ALLOWED_EMAIL_DOMAINS=guanghe.tv`:企业身份限定 - `ONION_ADMIN_UNION_IDS=ou_xxx`:创世管理员(可选,DB Role 系统就绪后可清空) ### 3. 数据库初始化 ```bash npm run db:push # schema → DB npm run db:seed # 种子数据(角色 / 权限 / 标签 / 示例话术 / Prompt 模板) ``` ### 4. 启动 ```bash npm run dev ``` 打开 http://localhost:3000 --- ## 四、AI Provider 切换 LLM 默认走 OpenAI 兼容协议(`/v1/chat/completions`),**支持任何 OpenAI 兼容公益站 / 中转 / 官方**(OpenAI、DeepSeek、通义千问 DashScope 兼容、智谱、Moonshot Kimi 等)。 ### 方式 A:葱园后台可视化配置(推荐) 1. 登录后用「🛠 管理员」角色进入「葱园后台 → AI 配置」 2. 选预设(或自己填)→ 填 baseUrl / apiKey / model → **保存** 3. 同页右侧「测试连通性」一键发送一句话验证返回 数据存 `system_settings` 表,`apiKey` 以 AES-256-GCM 加密(密钥来自 `JWT_SECRET`)。保存后 5 分钟内本进程缓存立即失效,听葱片 / 剥洋葱 / 问小葱 / 练葱园 自动切换到新模型。 ### 方式 B:.env 兜底(启动前未进后台时) ```env AI_PROVIDER=openai-compatible OPENAI_BASE_URL=https://your-relay.com/v1 OPENAI_API_KEY=sk-xxxx OPENAI_MODEL=gpt-4o-mini ``` ### 优先级 `数据库 SystemSetting → 环境变量 → mock 兜底`。未配置任何参数时所有 AI 接口自动返回 mock 数据,演示环境不会 500。 ### TTS / ASR / Embedding `lib/ai/index.ts` 的 `getTTS / getASR / getEmbedding` 同样模式(mock 实现)。后续接火山 / BGE 在此处加 case 即可,业务代码零改动。 --- ## 五、当前已落地的功能 ### 4 大业务模块 | 模块 | 核心 API | UI 接通 | AI 服务 | |---|---|---|---| | 听葱片(播客) | 列表 / 详情 / 收藏 / 播放埋点 / 生成 Job | ✅ | LLM 写脚本 + TTS 合成 | | 剥洋葱(话术库) | 列表 / 详情 / 收藏 / 创建 + AI 拆解 / 标签体系 | ✅ | LLM 7 字段拆解 | | 问小葱(助教 + 任务) | 会话 / 消息(RAG)/ 任务 CRUD / 朋友圈生成 / 组员选择 | ✅ | LLM + Embedding 检索 + 合规过滤 | | 练葱园(陪练) | 场景 / Session / Turn / End / Report | ✅ | LLM 客户对话 + 7 维评分 | ### 跨模块基础设施 - 飞书免登(已实现,含 `tt.requestAccess` + OAuth 兜底) - 企业身份限定(@guanghe.tv 校验 + tenant_key 兜底) - 完整 Role / Permission 体系(5 系统角色 + 24 权限点 + 自定义角色) - 审计日志(所有写操作 → `audit_logs`) - LLM 成本记账(每次调用 → `llm_cost_logs`) - 演示角色切换器(NavBar 顶部,全局生效) - 三层库(公司 / 小组 / 个人)+ 单人单组分组模型 ### 葱园后台 - Prompt 版本管理(含灰度比例) - 审计日志查询 - LLM 成本看板 - 用户列表 + 角色变更 - 团队管理(CRUD + 加成员 + 转让组长) --- ## 六、API 全景(30+ 端点) ``` 鉴权 /api/auth/feishu(+callback) /me /logout 我 /api/me/team 剥洋葱 /api/scripts /[id] /[id]/favorite /api/tags 听葱片 /api/podcasts /[id] /[id]/(favorite|play) /jobs /jobs/[id] 问小葱 /api/ask/sessions /[id]/messages 任务 /api/tasks /[id] /team-members 朋友圈 /api/moments/generate 练葱园 /api/arena/scenarios /sessions /[id]/(turns|end|report) 后台-Prompt /api/admin/prompts /[id] 后台-审计 /api/admin/audit-logs 后台-LLM 成本 /api/admin/llm-cost/summary 后台-用户 /api/admin/users /[id]/roles 后台-团队 /api/admin/teams /[id]/members ``` --- ## 七、未来迭代(留给你的扩展点) 下面这些都已经留好接口,你随时可以告诉我接入: 1. **接真实 LLM**:`lib/ai/openai.ts` / `qwen.ts` 实现 `LLMProvider` 接口 2. **接真实 TTS**:火山引擎 / 阿里 CosyVoice 实现 `TTSProvider` 3. **接真实 ASR**:火山引擎 / Whisper 实现 `ASRProvider` 4. **接 pgvector**:`lib/services/ask-rag.ts` 的 `retrieve()` 改为余弦相似度查询(需 Postgres 安装 pgvector 扩展) 5. **接飞书消息卡片**:`lib/feishu.ts` 加 `sendCard()`,问小葱 escalate / 任务派发自动推 6. **接飞书文档拉取**:`KnowledgeSource` + `FeishuDocLink` 表已就绪,需补 `lib/services/feishu-doc-sync.ts` 7. **完整 Role 后台 UI**:`/admin/users` 页面、`/admin/prompts` 编辑器、`/admin/audit-logs` 查询页(API 已有) 8. **Webhook 推送**:`/api/webhooks/feishu/doc-updated`(路由占位,逻辑待加) --- ## 八、PRD 文档 完整需求规范见 [docs/prd/](docs/prd/): | 文档 | 内容 | |---|---| | [00-总览](docs/prd/00-overview.md) | 角色权限矩阵 / 信息架构 / 数据飞轮 / AI 选型 / 企业身份限定 | | [01-听葱片](docs/prd/01-podcast.md) | AI 播客 | | [02-剥洋葱](docs/prd/02-script-library.md) | 话术沉淀拆解 | | [03-问小葱](docs/prd/03-assistant.md) | RAG 助教 + 任务 + 飞书文档接入 | | [04-练葱园](docs/prd/04-arena.md) | 场景陪练 + 7 维评分 + 磨剑簿 | | [05-葱园后台](docs/prd/05-admin.md) | 内容审核 / Prompt 灰度 / 模型成本 / 审计 | --- ## 九、构建与部署 ```bash npm run build # Next.js 构建(含 prisma generate) npm run start # 生产模式启动 # Vercel 一键部署 npx vercel ``` 部署清单: - [ ] HTTPS 域名(飞书强制) - [ ] PostgreSQL 实例(Supabase / RDS / Neon) - [ ] 飞书后台填写正式 URL + 重定向 URL + 申请权限 - [ ] `.env` 配置完整(含 AI_PROVIDER 切到真实供应商) - [ ] 飞书后台审核应用版本 --- ## 十、Demo 角色(演示模式) NavBar 右上角有「🎭 演示角色」切换: - 🧑‍🎓 销售:默认视角,仅个人库可编辑标签 - 👑 组长:可改小组库标签 + 派任务给组员 - 🛠 管理员:所有权限 + 葱园后台入口 实际产品里此切换器从 session 自动判定(基于 DB Role)。当前演示态保留切换按钮便于业务方体验三种视角。 --- ## 十一、贡献节奏 - 改 schema:`prisma/schema.prisma` → `npm run db:push` → 用到的 API 跟着改 - 加新模块:`app/api//route.ts` + `lib/services/-*.ts` + UI 页 - 改 AI prompt:在 `lib/services/*.ts` 里改,或在 `prompt_templates` 表灰度 - 改 UI:直接改 `app/` 或 `components/`,dev server 热更新 任何模块都可以独立迭代,互不阻塞。 --- 需要继续接真实 LLM、加新模块、调整现有功能,直接告诉我即可。