Architecture — AI Decision Salon
Architecture — AI Decision Salon
系统概述
单体 Next.js 应用,编排器在 API Route 中实现。
技术栈
- 前端: Next.js 16 App Router + Tailwind CSS 4 + shadcn/ui
- 后端: Next.js API Route (TypeScript)
- 数据库: PostgreSQL (Neon) + Drizzle ORM
- AI: Vercel AI SDK + OpenAI/Anthropic
- 部署: Vercel + Neon PostgreSQL
架构图
┌─────────────────────────────────────────┐
│ Next.js App │
│ │
│ Pages (App Router) │
│ ├── / (首页 + 示例讨论) │
│ ├── /salons/create (创建话题) │
│ ├── /salons/[id] (讨论详情) │
│ └── /salons (历史列表) │
│ │
│ API Routes │
│ ├── POST /api/discussions (创建+编排) │
│ ├── GET /api/discussions/[id] (查询) │
│ └── GET /api/discussions/[id]/stream │
│ (SSE 流式推送) │
│ │
│ Service Layer │
│ ├── orchestrator.ts (编排器核心) │
│ ├── agents.ts (角色管理) │
│ └── llm.ts (LLM 调用封装) │
│ │
│ Data Layer │
│ ├── db/index.ts (Drizzle 客户端) │
│ ├── db/schema.ts (表定义) │
│ └── db/queries.ts (查询函数) │
└─────────────────────────────────────────┘
核心流程
- 用户输入问题 → POST /api/discussions
- 主持人 LLM 拆题 → SSE 推送拆题结果
- Promise.all 并行调用 4 角色 → SSE 逐角色流式推送
- 总结 LLM 生成决策清晰卡 → SSE 推送
- 写入 PostgreSQL
数据模型
users → sessions → messages
→ decision_cards
→ session_agents
agents (系统配置)
目录结构
src/
├── app/ # Next.js App Router
│ ├── page.tsx # 首页
│ ├── layout.tsx # 根布局
│ ├── salons/
│ │ ├── page.tsx # 讨论列表
│ │ ├── create/page.tsx # 创建话题
│ │ └── [id]/page.tsx # 讨论详情
│ └── api/
│ └── discussions/
│ ├── route.ts # POST 创建讨论
│ └── [id]/
│ ├── route.ts # GET 讨论详情
│ └── stream/route.ts # GET SSE 流
├── components/
│ ├── ui/ # shadcn/ui 组件
│ ├── discussion/ # 讨论相关组件
│ │ ├── message-card.tsx
│ │ ├── chat-stream.tsx
│ │ ├── decision-card.tsx
│ │ ├── moderator-panel.tsx
│ │ └── progress-indicator.tsx
│ └── layout/ # 布局组件
│ ├── three-column.tsx
│ └── mobile-tabs.tsx
├── lib/
│ ├── db/
│ │ ├── index.ts # Drizzle 客户端
│ │ ├── schema.ts # 表定义
│ │ └── queries.ts # 查询函数
│ ├── orchestrator/
│ │ ├── index.ts # 编排器主逻辑
│ │ ├── agents.ts # 角色定义和 prompt
│ │ ├── moderator.ts # 主持人逻辑
│ │ └── summarizer.ts # 总结/决策卡生成
│ ├── llm/
│ │ ├── client.ts # AI SDK 封装
│ │ ├── prompts.ts # 角色 prompt 模板
│ │ └── streaming.ts # SSE 流式工具
│ └── utils.ts # 通用工具
└── types/
└── index.ts # 类型定义