Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Status Python Vue License

Cogora — AI 圆桌讨论演播厅

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

1. 克隆并安装依赖

git clone git@github.com:cweiai/Cogora.git && cd cogora

# 后端
cd apps/api
pip install -r requirements.txt

# 前端
cd ../web
npm install

2. 配置环境变量

复制示例文件并填入你的 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

3. 启动开发服务器

# 终端 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 请求代理到后端。

4. 运行测试

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

5. 生产构建

# 前端构建
cd apps/web && npm run build

# 后端启动(生产模式)
cd apps/api && python -m uvicorn app.main:app --host 0.0.0.0 --port 8000

项目结构

cogora/
├── 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 中配置中。


License

MIT

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages