373 lines
13 KiB
Markdown
373 lines
13 KiB
Markdown
# 政智通 (GovAI) — 项目架构分析报告
|
||
|
||
> 生成日期:2026-05-23
|
||
|
||
---
|
||
|
||
## 一、项目概述
|
||
|
||
**政智通**(内部代号 Aily)是一个面向政府部门的 AI 智能办公平台,旨在提升行政效能、赋能智慧政务。平台以"AI 应用商店"为核心形态,提供公文写作、政策解读、数据治理、PPT 生成等多种政务 AI 应用,支持多机构(委办局)多租户部署。
|
||
|
||
---
|
||
|
||
## 二、技术栈总览
|
||
|
||
| 层级 | 技术选型 |
|
||
|------|----------|
|
||
| 后端 API | Go 1.25+、Chi Router、sqlc(类型安全 SQL)、pgx v5 |
|
||
| 数据库 | PostgreSQL 17 + pgvector(向量检索) |
|
||
| 缓存/队列 | Redis 7 |
|
||
| 对象存储 | MinIO(S3 兼容) |
|
||
| 前端 | Next.js 16(App Router)、React 19、Tailwind CSS 4、shadcn/ui |
|
||
| 状态管理 | Zustand(客户端)、TanStack React Query(服务端状态) |
|
||
| AI 引擎 | 通义千问 Qwen(DashScope)/ OpenAI 兼容接口 / Anthropic Claude |
|
||
| 向量化 | DashScope text-embedding-v3(1024 维) |
|
||
| 知识库 | 自建 RAG(文档分块 + pgvector 检索)+ Dify 可选集成 |
|
||
| PPT 微服务 | Python(Flask)、PPT Master 引擎 |
|
||
| 容器化 | Docker Compose(开发/生产) |
|
||
|
||
---
|
||
|
||
## 三、项目结构
|
||
|
||
```
|
||
GovAI/
|
||
├── server/ # Go 后端服务
|
||
│ ├── cmd/server/ # 入口(main.go + router.go)
|
||
│ ├── internal/
|
||
│ │ ├── config/ # 环境变量配置加载
|
||
│ │ ├── handler/ # HTTP 处理器(12 个文件)
|
||
│ │ ├── middleware/ # 认证、RBAC、限流、审计
|
||
│ │ ├── response/ # 统一响应格式
|
||
│ │ ├── service/ # 业务逻辑层
|
||
│ │ └── store/ # 数据访问层(sqlc 生成)
|
||
│ ├── pkg/
|
||
│ │ ├── auth/ # JWT 管理
|
||
│ │ ├── chunker/ # 文档分块器
|
||
│ │ ├── db/ # 数据库连接池
|
||
│ │ ├── dify/ # Dify API 客户端
|
||
│ │ ├── embedding/ # 向量化客户端
|
||
│ │ └── llm/ # LLM 多提供商抽象
|
||
│ └── migrations/ # 14 个迁移 + 多个种子数据文件
|
||
│
|
||
├── apps/web/ # Next.js 前端
|
||
│ └── src/
|
||
│ ├── app/
|
||
│ │ ├── (auth)/ # 登录、注册页
|
||
│ │ ├── (portal)/ # 用户门户(商店、对话、工作台、创作、知识库)
|
||
│ │ └── (admin)/ # 管理后台(仪表盘、分析、审核、用户等)
|
||
│ ├── components/
|
||
│ │ ├── app-ui/ # 6 种应用交互界面
|
||
│ │ ├── chat/ # 对话组件
|
||
│ │ ├── editor/ # 编辑器
|
||
│ │ ├── layout/ # 布局(Header 等)
|
||
│ │ └── ui/ # shadcn/ui 基础组件
|
||
│ ├── hooks/ # 自定义 Hooks(SSE 流式等)
|
||
│ ├── lib/ # API 客户端、类型定义、工具函数
|
||
│ └── stores/ # Zustand 状态(auth)
|
||
│
|
||
├── ppt-worker/ # Python PPT 生成微服务
|
||
│ ├── app.py # Flask 入口
|
||
│ ├── pipeline.py # 生成流水线
|
||
│ ├── worker.py # 后台任务处理
|
||
│ ├── llm_client.py # LLM 调用
|
||
│ ├── wanx_client.py # 通义万相(AI 生图)
|
||
│ └── db.py # 数据库操作
|
||
│
|
||
└── docker/ # Docker 编排
|
||
├── docker-compose.yml # 开发环境(PG + Redis + MinIO + PPT Worker)
|
||
├── docker-compose.dify.yml # Dify 服务(可选)
|
||
└── docker-compose.prod.yml # 生产环境
|
||
```
|
||
|
||
---
|
||
|
||
## 四、核心功能模块
|
||
|
||
### 4.1 AI 应用商店
|
||
|
||
- 10 个政务分类:公文写作、政策解读、政务宣传、数据治理、便民服务、信息化工具、组织人事、招商引资、翻译外事、综合应用
|
||
- 应用类型:对话型(chatbot)、补全型(completion)、工作流(workflow)、智能体(agent)、公文写作(doc_writer)、研判分析(analysis)、PPT 生成(ppt_generator)
|
||
- 应用生命周期:草稿 → 提交审核 → 审批/驳回 → 上架/下架
|
||
|
||
### 4.2 对话与 AI 推理
|
||
|
||
- 多 LLM 提供商支持(OpenAI 兼容 / Anthropic),可配置 fallback
|
||
- SSE 流式响应(Server-Sent Events)
|
||
- 对话历史管理(会话列表、消息记录、重命名、批量删除)
|
||
- Token 用量统计与成本估算
|
||
|
||
### 4.3 知识库(RAG)
|
||
|
||
- 文档上传(PDF、DOCX、TXT、MD、CSV、XLSX)
|
||
- 文档分块(chunker 包)
|
||
- 向量化嵌入(DashScope text-embedding-v3)
|
||
- pgvector 向量检索
|
||
- 支持重新索引和重新嵌入
|
||
|
||
### 4.4 公文写作
|
||
|
||
- 模板化公文生成(通知、请示、报告、会议纪要等)
|
||
- 字段配置(文本、下拉、多行文本)
|
||
- 流式生成输出
|
||
|
||
### 4.5 研判分析
|
||
|
||
- 多步骤向导式分析模板
|
||
- 支持多种报告类型
|
||
- 结构化字段输入 → AI 生成分析报告
|
||
|
||
### 4.6 PPT 生成
|
||
|
||
- 输入方式:纯文本、URL、文件上传(PDF/Word)
|
||
- 多种风格:通用、咨询、顶级咨询
|
||
- 多种格式:16:9、4:3、竖版
|
||
- 可选 AI 生图(通义万相)
|
||
- 输出原生可编辑 PPTX
|
||
- 异步任务模式(创建 → 轮询状态 → 下载)
|
||
|
||
### 4.7 多租户(机构管理)
|
||
|
||
- 支持多个政府机构(科技局、公安局、发改局、教育局等)
|
||
- 用户归属机构,可切换机构
|
||
- 应用和知识库按机构隔离
|
||
- 机构级别的数据可见性控制
|
||
|
||
### 4.8 管理后台
|
||
|
||
- 数据总览仪表盘
|
||
- 使用分析(用量趋势、成本统计)
|
||
- 应用管理与审核队列
|
||
- 人员管理(角色分配、状态控制)
|
||
- 审计日志(操作追踪)
|
||
- 模型管理(提供商配置、配额设置)
|
||
|
||
---
|
||
|
||
## 五、数据库设计
|
||
|
||
### 5.1 核心表(14 次迁移)
|
||
|
||
| 表名 | 用途 |
|
||
|------|------|
|
||
| `users` | 用户(UUID PK,支持 SSO,多角色) |
|
||
| `departments` | 部门(树形结构,path 编码) |
|
||
| `user_departments` | 用户-部门多对多关联 |
|
||
| `organizations` | 机构/委办局(多租户) |
|
||
| `categories` | 应用分类(10 个预置政务分类) |
|
||
| `applications` | AI 应用(完整元数据、配置、统计) |
|
||
| `app_reviews` | 应用审核流程 |
|
||
| `app_favorites` | 用户收藏 |
|
||
| `app_ratings` | 用户评分评价 |
|
||
| `app_usage_logs` | 使用日志(每次请求) |
|
||
| `app_usage_daily` | 日聚合统计 |
|
||
| `model_providers` | LLM 提供商配置 |
|
||
| `model_quotas` | 模型配额(全局/部门/用户级) |
|
||
| `knowledge_bases` | 知识库 |
|
||
| `knowledge_documents` | 知识库文档 |
|
||
| `audit_logs` | 审计日志 |
|
||
| `ppt_tasks` | PPT 生成任务 |
|
||
| `doc_templates` | 公文模板 |
|
||
| `conversations` | 对话会话 |
|
||
|
||
### 5.2 设计特点
|
||
|
||
- 全部使用 UUID 主键
|
||
- `updated_at` 自动更新触发器
|
||
- 全文搜索索引(`tsvector`)
|
||
- 向量索引(pgvector)
|
||
- CHECK 约束保证数据完整性
|
||
- 合理的索引覆盖(状态、外键、时间)
|
||
|
||
---
|
||
|
||
## 六、API 设计
|
||
|
||
### 6.1 路由结构(RESTful,/api/v1)
|
||
|
||
```
|
||
/api/v1/
|
||
├── auth/ # 认证(登录、注册、刷新、登出、个人信息)
|
||
├── organizations # 机构列表(公开)
|
||
├── store/ # 应用商店(公开读取)
|
||
│ ├── categories
|
||
│ ├── apps / apps/{slug}
|
||
│ ├── featured / rankings / recent
|
||
├── apps/{id}/ # 应用使用(需认证)
|
||
│ ├── chat # SSE 流式对话
|
||
│ ├── completion # 补全
|
||
│ ├── generate-doc # 公文生成
|
||
│ ├── generate-analysis # 研判分析
|
||
│ ├── conversations/ # 对话管理
|
||
│ ├── feedback / favorite / rating
|
||
├── doc-templates/ # 公文模板
|
||
├── analysis-templates/ # 分析模板
|
||
├── me/ # 个人中心
|
||
├── creator/ # 创作者工具
|
||
│ ├── apps (CRUD)
|
||
│ ├── submit-review / withdraw
|
||
├── knowledge/ # 知识库管理
|
||
│ ├── CRUD + documents + reindex
|
||
├── ppt/ # PPT 生成
|
||
│ ├── tasks (创建/上传/列表/状态/下载)
|
||
└── admin/ # 管理后台(需 admin 角色)
|
||
├── apps / reviews / users
|
||
├── analytics (overview/usage/cost)
|
||
└── audit-logs
|
||
```
|
||
|
||
### 6.2 统一响应格式
|
||
|
||
```json
|
||
{
|
||
"code": 0,
|
||
"message": "success",
|
||
"data": { ... }
|
||
}
|
||
```
|
||
|
||
### 6.3 中间件链
|
||
|
||
1. RequestID → RealIP → Logger → Recoverer → Timeout(15min) → CORS
|
||
2. Auth(JWT 验证,注入 user_id/email/role 到 context)
|
||
3. RequireRole(RBAC 角色级别检查)
|
||
4. RateLimit(Redis 令牌桶,30 req/min)
|
||
5. AuditLog(管理操作审计记录)
|
||
|
||
---
|
||
|
||
## 七、认证与授权
|
||
|
||
| 特性 | 实现 |
|
||
|------|------|
|
||
| 认证方式 | JWT(Bearer Token + Cookie) |
|
||
| Token 有效期 | Access 24h / Refresh 7d |
|
||
| 角色体系 | user → creator → admin → super_admin(层级递增) |
|
||
| 权限控制 | 中间件级 RBAC(RequireRole) |
|
||
| SSO 支持 | Password / LDAP / OAuth2(可配置) |
|
||
| 机构切换 | 切换后重新签发 Token |
|
||
| 限流 | Redis 令牌桶(对话接口 30/min) |
|
||
|
||
---
|
||
|
||
## 八、前端架构
|
||
|
||
### 8.1 路由分组
|
||
|
||
| 分组 | 路径 | 说明 |
|
||
|------|------|------|
|
||
| (auth) | /login, /register | 公开认证页 |
|
||
| (portal) | /store, /chat, /workspace, /create, /knowledge | 用户门户 |
|
||
| (admin) | /dashboard, /analytics, /apps, /reviews, /users, /models, /audit, /security | 管理后台 |
|
||
|
||
### 8.2 应用交互界面(6 种)
|
||
|
||
| 组件 | 对应应用类型 |
|
||
|------|-------------|
|
||
| chatbot-ui | 对话型应用 |
|
||
| completion-ui | 补全型应用 |
|
||
| workflow-ui | 工作流应用 |
|
||
| agent-ui | 智能体应用 |
|
||
| doc-writer-ui | 公文写作 |
|
||
| analysis-ui | 研判分析 |
|
||
|
||
### 8.3 关键技术实现
|
||
|
||
- **SSE 流式渲染**:自定义 `use-sse-stream` Hook,实时展示 AI 生成内容
|
||
- **Markdown 渲染**:react-markdown + remark-gfm
|
||
- **主题切换**:next-themes(亮/暗模式)
|
||
- **命令面板**:cmdk(快捷搜索)
|
||
- **响应式布局**:移动端侧边栏折叠,桌面端固定侧栏
|
||
|
||
---
|
||
|
||
## 九、部署架构
|
||
|
||
### 9.1 开发环境
|
||
|
||
```
|
||
Docker Compose:
|
||
├── PostgreSQL 17 (pgvector) → :5432
|
||
├── Redis 7 Alpine → :6379
|
||
├── MinIO → :9000 (API) / :9001 (Console)
|
||
└── PPT Worker (Python) → :8090
|
||
|
||
本地进程:
|
||
├── Go API Server → :8080
|
||
└── Next.js Dev Server → :3000
|
||
```
|
||
|
||
### 9.2 生产环境
|
||
|
||
- `docker-compose.prod.yml` 全容器化部署
|
||
- Nginx 反向代理(SSE 需关闭 proxy_buffering)
|
||
- 前端 Next.js 独立构建
|
||
|
||
### 9.3 初始化流程
|
||
|
||
```bash
|
||
make setup # 启动 Docker → 迁移数据库 → 导入种子数据
|
||
make dev-api # 启动后端
|
||
make dev-web # 启动前端
|
||
```
|
||
|
||
---
|
||
|
||
## 十、种子数据与预置内容
|
||
|
||
项目包含丰富的种子数据,覆盖多个政务场景:
|
||
|
||
| 种子文件 | 内容 |
|
||
|----------|------|
|
||
| seed.sql | 基础用户、分类、示例应用 |
|
||
| seed_ppt.sql | PPT 生成应用配置 |
|
||
| seed_keji.sql | 科技局专属应用 |
|
||
| seed_gongan_*.sql | 公安局应用、分类、知识库 |
|
||
| seed_fagaiju*.sql | 发改局文档和应用 |
|
||
| seed_legal*.sql | 法律法规知识库 |
|
||
| seed_xinfang*.sql | 信访回复应用 |
|
||
| seed_doc_templates.sql | 公文模板 |
|
||
| seed_analysis_templates.sql | 研判分析模板 |
|
||
| seed_multi_tenant_users.sql | 多机构用户 |
|
||
|
||
---
|
||
|
||
## 十一、架构亮点与设计决策
|
||
|
||
1. **LLM 提供商抽象**:Provider 接口统一 OpenAI/Anthropic,支持热切换和 fallback
|
||
2. **自建 RAG 替代 Dify**:从依赖 Dify 逐步迁移到自建知识库(chunker + embedding + pgvector)
|
||
3. **多租户隔离**:机构级数据隔离,用户可跨机构切换
|
||
4. **应用审核流程**:创作者提交 → 管理员审核 → 上架,保证内容质量
|
||
5. **流式优先**:对话、公文生成、分析报告均支持 SSE 流式输出
|
||
6. **配额管理**:支持全局/部门/用户三级 Token 配额控制
|
||
7. **审计追踪**:管理操作全量记录,含 IP 和 User-Agent
|
||
|
||
---
|
||
|
||
## 十二、潜在改进方向
|
||
|
||
| 方向 | 说明 |
|
||
|------|------|
|
||
| 测试覆盖 | 当前缺少前端测试和集成测试 |
|
||
| API 文档 | 缺少 OpenAPI/Swagger 规范文档 |
|
||
| 错误处理 | 部分 handler 错误处理可更细粒度 |
|
||
| 缓存策略 | 热门应用列表、分类等可加 Redis 缓存 |
|
||
| 消息队列 | PPT 生成等异步任务可引入 MQ 解耦 |
|
||
| 监控告警 | 缺少 Prometheus/Grafana 可观测性 |
|
||
| CI/CD | 未见自动化流水线配置 |
|
||
| 国际化 | 当前仅中文,未来可扩展多语言 |
|
||
|
||
---
|
||
|
||
## 十三、默认账号
|
||
|
||
| 角色 | 邮箱 | 密码 |
|
||
|------|------|------|
|
||
| 系统管理员 | admin@govai.gov.cn | admin123 |
|
||
| 科长 | wangke@govai.gov.cn | admin123 |
|
||
| 干事 | liganshi@govai.gov.cn | admin123 |
|
||
|
||
---
|
||
|
||
*本文档由代码分析自动生成,如有疑问请参考源代码。*
|