Cogora 是一个 AI 驱动的圆桌讨论模拟平台。用户提出议题,系统自动生成一位主持人和多位专家,由大语言模型驱动各方在实时演播厅中展开多轮辩论。专家会基于讨论上下文产生"内心思考",主持人适时串联引导,全程通过 WebSocket 实时推送到前端。
核心亮点:
- 全自动嘉宾阵容:LLM 根据议题生成主持人和 4–8 位专家,带有差异化立场和视觉标识
- 实时演播厅:WebSocket 驱动的直播式辩论体验,专家轮流发言、状态实时变化
- 多模型适配:支持 OpenAI、Anthropic 及任意 OpenAI 兼容的第三方模型服务
| 层 | 技术 | 说明 |
|---|---|---|
| 后端框架 | Python 3.11+ / FastAPI | 高性能异步 Web 框架 |
| 前端框架 | Vue 3 + TypeScript + Vite | 响应式 UI,Element Plus 组件库 |
| 数据库 | SQLite (WAL 模式) | 零配置嵌入式数据库,Prisma 定义 Schema |
| 实时通信 | FastAPI WebSocket | 事件驱动推送,支持断线重放 |
| LLM 适配 | httpx → OpenAI / Anthropic API | 多 Provider 支持,未知 Provider 默认走 OpenAI 兼容格式 |
| 样式 | SCSS + CSS Custom Properties | 流体排版 / 间距,多断点响应式 |
| 测试 | pytest + pytest-asyncio + httpx | 单元测试 / 集成测试 / E2E 系统测试 |
- Python ≥ 3.11
- Node.js ≥ 18
- npm ≥ 9
git clone git@github.com:cweiai/Cogora.git && cd cogora
# 后端
cd apps/api
pip install -r requirements.txt
# 前端
cd ../web
npm install复制示例文件并填入你的 LLM API Key:
cp .env.example .env编辑 .env——至少配置一个 Provider:
LLM_PROVIDERS=openai
OPENAI_BASE_URL=https://api.openai.com/v1
OPENAI_API_KEY=sk-your-key-here
OPENAI_MODELS=gpt-4o,gpt-4o-mini
OPENAI_DEFAULT_MODEL=gpt-4o支持同时配置多个 Provider(逗号分隔),自定义 Provider 默认走 OpenAI 兼容格式:
LLM_PROVIDERS=openai,anthropic,deepseek
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
DEEPSEEK_API_KEY=sk-your-key
DEEPSEEK_MODELS=deepseek-chat
DEEPSEEK_DEFAULT_MODEL=deepseek-chat# 终端 1 — 启动后端 (http://127.0.0.1:8000)
cd apps/api
python -m uvicorn app.main:app --host 127.0.0.1 --port 8000 --reload
# 终端 2 — 启动前端 (http://localhost:5173)
cd apps/web
npm run dev前端开发服务器自动将 /api 请求代理到后端。
cd apps/api
# 单元 + 集成测试
python -m pytest app/tests/test_speech_loop.py -v
# 集成测试(真实编排器 + 内存数据库 + Mock LLM)
python -m pytest app/tests/test_integration_speech_loop.py -v
# E2E 系统测试(ASGI 传输 + 全生命周期)
python -m pytest app/tests/test_e2e.py -v -s --asyncio-mode=auto# 前端构建
cd apps/web && npm run build
# 后端启动(生产模式)
cd apps/api && python -m uvicorn app.main:app --host 0.0.0.0 --port 8000cogora/
├── apps/
│ ├── api/ # FastAPI 后端
│ │ ├── app/
│ │ │ ├── main.py # 应用入口 + 生命周期
│ │ │ ├── core/config.py # .env + config.yaml 配置加载
│ │ │ ├── db/
│ │ │ │ ├── schema.sql # SQLite DDL
│ │ │ │ ├── database.py # 连接管理(线程本地)
│ │ │ │ └── repository.py # 数据访问层(全表 CRUD)
│ │ │ ├── routes/
│ │ │ │ ├── discussions.py # 讨论 REST API
│ │ │ │ ├── websocket.py # WebSocket 端点
│ │ │ │ └── settings.py # 用户设置 API
│ │ │ ├── services/
│ │ │ │ ├── llm_service.py # LLM Provider 抽象层
│ │ │ │ ├── panel_generator.py # 嘉宾阵容生成
│ │ │ │ ├── speech_orchestrator.py # 发言编排引擎
│ │ │ │ ├── consensus_engine.py # 共识分析(后台)
│ │ │ │ ├── summary_generator.py # 讨论总结生成
│ │ │ │ └── event_bus.py # WebSocket 事件广播 + 持久化
│ │ │ ├── schemas/ # Pydantic 请求/响应模型
│ │ │ ├── state_machine/ # 讨论状态机(Panel + Runtime 双机)
│ │ │ └── tests/ # 测试套件
│ │ └── requirements.txt
│ │
│ └── web/ # Vue 3 前端
│ ├── src/
│ │ ├── views/ # 页面视图(Dashboard, Studio, PanelReview...)
│ │ ├── components/ # 组件(AppShell, RoundTableStage, ParticipantPanel...)
│ │ ├── composables/ # 组合式函数(useWebSocket)
│ │ ├── api/ # REST API 客户端
│ │ ├── router/ # Vue Router 配置
│ │ ├── types/ # TypeScript 类型(从 shared 包重导出)
│ │ └── styles/ # 全局样式 + 设计 Token
│ └── vite.config.ts
│
├── packages/shared/ # 前后端共享 TypeScript 类型契约
├── prisma/schema.prisma # 数据库 Schema(权威源)
├── config.yaml # 运行时阈值配置
├── .env.example # 环境变量模板
└── docs/ # 设计文档(PRD / SDD / DDD)
创建讨论 → 生成嘉宾阵容(LLM) → 审阅/编辑 → 确认进入演播厅
↓
WebSocket 实时推送
┌─ 主持人开场白
├─ 专家轮流发言
├─ 专家内心思考
├─ 主持人穿插引导
└─ 用户插话交互
↓
结束讨论 → 生成总结
运行时参数在 config.yaml 中集中管理(发言长度、超时、重试次数、专家人数范围等)。
敏感信息(API Key、Base URL、模型列表)在 .env 中配置中。
MIT