creative_studio/docs/ARCHITECTURE.md
2026-01-25 19:27:44 +08:00

503 lines
17 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Creative Studio - 项目架构说明
## 整体架构
```
┌─────────────────────────────────────────────────────────────┐
│ 前端 (React) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Skill管理 │ │ 项目管理 │ │ 记忆系统 │ │ 审核系统 │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
└─────────────────────────────────────────────────────────────┘
↓ HTTP/WebSocket
┌─────────────────────────────────────────────────────────────┐
│ 后端 (FastAPI) │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ API 层 │ │
│ │ /api/v1/skills /api/v1/projects /api/v1/memory │ │
│ └──────────────────────────────────────────────────────┘ │
│ ↓ │
│ ┌──────────────────────────────────────────────────────┐ │
│ │ 核心层 │ │
│ │ ┌────────────┐ ┌────────────┐ ┌────────────┐ │ │
│ │ │ GLM Client │ │Skill Mgr │ │ Agent引擎 │ │ │
│ │ └────────────┘ └────────────┘ └────────────┘ │ │
│ │ ┌────────────┐ ┌────────────┐ │ │
│ │ │Memory Mgr │ │Review Mgr │ │ │
│ │ └────────────┘ └────────────┘ │ │
│ └──────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────────┐
│ 外部服务 │
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
│ │ GLM-4.7 │ │ MongoDB │ │ Redis │ │
│ └────────────┘ └────────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
---
## 核心设计原则
1. **"Agent 固定Skill 可配"** - 平台维护 Agent 框架,用户配置 Skills
2. **"Skill 指导行为"** - Skill 行为指导融入提示词,指导 LLM 行为
3. **"全局上下文 + 记忆系统"** - 确保多集内容一致性
4. **"全自动 + 人工审核"** - 自动创作与人工审核相结合
---
## 核心模块说明
### 1. GLM Client (GLM 客户端)
**位置**: `backend/app/core/llm/glm_client.py`
**功能**:
- 封装智谱 AI GLM-4.7 API
- 将 Skill 的行为指导融入提示词
- 支持同步和异步调用
- 错误处理和重试机制
**核心方法**:
```python
async def chat_with_skill(
skill_behavior: str, # Skill 的行为指导
user_input: str, # 用户输入
context: Dict, # 上下文信息
temperature: float # 温度参数
) -> str
```
---
### 2. Skill Manager (Skill 管理器)
**位置**: `backend/app/core/skills/skill_manager.py`
**功能**:
- 加载和解析 Skill 文件
- 提取行为指导内容
- 缓存管理
- Skill 验证
**核心方法**:
```python
async def load_skill(skill_id: str) -> Skill
async def list_skills(skill_type: str, category: str) -> List[Skill]
async def create_user_skill(skill_data: SkillCreate) -> Skill
```
---
### 3. Skill 存储结构
```
skills_storage/
├── builtin_skills/ # 内置 Skills平台维护
│ ├── consistency_checker/
│ │ └── SKILL.md
│ └── dialogue_writer_ancient/
│ └── SKILL.md
└── user_skills/ # 用户 Skills用户创建
└── {skill_id}/
└── SKILL.md
```
---
### 4. Memory Manager (记忆管理器)
**位置**: `backend/app/core/memory/memory_manager.py`
**功能**:
- 事件时间线管理
- 伏笔追踪
- 人物状态变化记录
- 关系网络维护
**核心方法**:
```python
async def extract_events_from_episode(
episode_content: str,
episode_number: int
) -> List[TimelineEvent]
async def detect_foreshadowing(
episode_content: str,
episode_number: int
) -> List[ForeshadowingEvent]
async def update_character_states(
episode_content: str,
episode_number: int,
characters: List[str]
) -> Dict[str, CharacterStateChange]
```
---
### 5. Review Manager (审核管理器)
**位置**: `backend/app/core/review/review_manager.py`
**功能**:
- 多维度质量审核
- 自定义规则执行
- 问题定位和修复建议
- 审核结果聚合
**核心方法**:
```python
async def review_episode(
episode: Episode,
project: SeriesProject,
config: ReviewConfig
) -> ReviewResult
```
---
### 6. Agent 执行引擎
**位置**: `backend/app/core/agents/series_creation_agent.py`
**功能**:
- 固定的工作流框架
- 五阶段执行:结构分析 → 大纲生成 → 对话创作 → 一致性审核 → 记忆更新
- 质量控制和自动重试
**执行流程**:
```
开始
1. 结构分析 (Structure Analysis)
2. 大纲生成 (Outline Generation)
3. 对话创作 (Dialogue Creation)
4. 一致性审核 (Consistency Review)
↓ (如果未通过,重试)
5. 记忆更新 (Memory Update)
完成
```
---
## 数据流设计
### Skill 行为指导融入流程
```
用户请求
加载 Skill (Skill Manager)
提取行为指导 (behavior_guide)
构建提示词 (GLM Client)
发送到 GLM-4.7
返回结果
```
### 提示词构建示例
```
系统提示词:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
你是剧集创作专家。
以下是你的行为指导(来自配置的 Skill
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[Skill 的 behavior_guide 内容]
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
当前上下文:
- 场景: 御花园
- 人物: 李云飞、苏婉儿
- 历史: EP01中两人初遇...
用户输入:
请创作 EP02 场景 3 的对话
```
---
## API 路由结构
```
/api/v1/
├── /skills # Skill 管理
│ ├── GET / # 列出所有 Skills
│ ├── GET /{id} # 获取 Skill 详情
│ ├── POST / # 创建新 Skill
│ ├── PUT /{id} # 更新 Skill
│ ├── DELETE /{id} # 删除 Skill
│ ├── POST /{id}/test # 测试 Skill
│ └── POST /{id}/reload # 重新加载 Skill
├── /projects # 项目管理
│ ├── GET / # 列出项目
│ ├── POST / # 创建项目
│ ├── GET /{id} # 获取项目详情
│ ├── PUT /{id} # 更新项目
│ ├── DELETE /{id} # 删除项目
│ ├── POST /{id}/execute # 执行剧集创作
│ └── POST /{id}/execute-batch # 批量执行
├── /memory # 记忆系统
│ ├── GET /projects/{id}/memory # 获取记忆
│ ├── GET /projects/{id}/memory/timeline # 获取时间线
│ ├── GET /projects/{id}/memory/threads # 获取待收线问题
│ ├── POST /projects/{id}/memory/threads # 添加待收线问题
│ └── POST /projects/{id}/memory/resolve-thread # 标记已解决
└── /review # 审核系统
├── GET /projects/{id}/review-config # 获取审核配置
├── PUT /projects/{id}/review-config # 更新审核配置
├── POST /projects/{id}/episodes/{ep_num}/review # 执行审核
└── GET /review/dimensions # 获取可用维度
```
---
## 前端架构
### 组件结构
```
src/
├── pages/ # 页面组件
│ ├── Dashboard.tsx # 仪表板
│ ├── Skills/
│ │ ├── SkillList.tsx # Skill 列表
│ │ ├── SkillDetail.tsx # Skill 详情
│ │ └── SkillEditor.tsx # Skill 编辑器
│ ├── Projects/
│ │ ├── ProjectList.tsx # 项目列表
│ │ ├── ProjectCreate.tsx # 创建项目
│ │ └── ProjectDetail.tsx # 项目详情
│ ├── Memory/
│ │ └── MemorySystem.tsx # 记忆系统
│ └── Review/
│ ├── ReviewConfig.tsx # 审核配置
│ └── ReviewResults.tsx # 审核结果
├── components/ # 通用组件
│ ├── Layout/
│ │ ├── Header.tsx
│ │ ├── Footer.tsx
│ │ └── Sidebar.tsx
│ ├── SkillCard.tsx
│ ├── EpisodeCard.tsx
│ └── QualityScore.tsx
├── stores/ # Zustand 状态管理
│ ├── skillStore.ts
│ ├── projectStore.ts
│ ├── memoryStore.ts
│ └── reviewStore.ts
├── services/ # API 服务
│ ├── api.ts # Axios 配置
│ ├── skillService.ts
│ ├── projectService.ts
│ ├── memoryService.ts
│ └── reviewService.ts
├── hooks/ # 自定义 Hooks
│ ├── useSkills.ts
│ ├── useProjects.ts
│ └── useEpisodeExecution.ts
└── types/ # TypeScript 类型
├── skill.ts
├── project.ts
├── memory.ts
└── review.ts
```
### 状态管理
使用 Zustand 进行轻量级状态管理:
```typescript
// stores/skillStore.ts
interface SkillStore {
skills: Skill[];
loading: boolean;
error: string | null;
fetchSkills: () => Promise<void>;
createSkill: (skill: Partial<Skill>) => Promise<void>;
}
export const useSkillStore = create<SkillStore>((set, get) => ({
skills: [],
loading: false,
error: null,
fetchSkills: async () => { /* ... */ },
createSkill: async (skill) => { /* ... */ }
}));
```
---
## 数据模型
### 核心数据模型
```python
# Skill
class Skill(BaseModel):
id: str
name: str
version: str
type: Literal["builtin", "user"]
category: str
behavior_guide: str
tags: List[str]
config: SkillConfig
# Project
class SeriesProject(BaseModel):
id: str
name: str
description: str
agent_id: str
status: str
global_context: GlobalContext
memory: Memory
episodes: List[Episode]
# Memory
class Memory(BaseModel):
eventTimeline: List[TimelineEvent]
pendingThreads: List[PendingThread]
characterStates: Dict[str, List[CharacterStateChange]]
foreshadowing: List[ForeshadowingEvent]
relationships: Dict[str, Dict[str, str]]
# Review Result
class ReviewResult(BaseModel):
episode_id: str
overall_score: float
passed: bool
dimension_scores: Dict[str, float]
issues: List[ReviewIssue]
```
---
## 扩展指南
### 添加新的内置 Skill
1.`backend/skills_storage/builtin_skills/` 下创建目录
2. 创建 `SKILL.md` 文件
3. 按照模板编写内容
4. 重启后端服务自动加载
### 添加新的 API 端点
1.`backend/app/api/v1/` 下创建路由文件
2. 定义路由和处理器
3.`backend/app/main.py` 中注册路由
### 添加新的前端页面
1.`frontend/src/pages/` 下创建组件
2.`frontend/src/App.tsx` 中添加路由
3. 配置导航菜单
---
## 性能优化建议
### 后端
1. **Skill 缓存**: 使用内存缓存避免频繁文件读取
2. **异步处理**: 使用 Celery 处理耗时任务
3. **连接池**: 复用 MongoDB 和 Redis 连接
4. **响应压缩**: 启用 Gzip 压缩
### 前端
1. **代码分割**: 使用 React.lazy 和 Suspense
2. **状态管理**: 使用 Zustand 避免不必要的重渲染
3. **请求缓存**: 使用 SWR 或 React Query
4. **图片优化**: 使用 WebP 格式和懒加载
---
## 安全考虑
1. **API Key 保护**: 使用环境变量,不提交到 Git
2. **输入验证**: 使用 Pydantic 验证所有输入
3. **CORS 配置**: 限制允许的源
4. **错误处理**: 不暴露敏感信息
---
## 部署架构
```
┌─────────────────────────────────────────────────────────┐
│ Nginx 反向代理 │
│ (静态文件 + API 转发 + SSL) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ FastAPI 应用 (多实例 + Gunicorn) │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ Celery Worker (异步任务 + LLM 调用) │
└─────────────────────────────────────────────────────────┘
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ MongoDB │ │ Redis │ │ MinIO/S3 │
│ (数据存储) │ │ (任务队列) │ │ (文件存储) │
└─────────────┘ └─────────────┘ └─────────────┘
```
---
## 技术栈总览
### 后端
- **Python 3.11+** - 编程语言
- **FastAPI** - 高性能异步 Web 框架
- **MongoDB** - 文档数据库
- **Redis** - 缓存和消息队列
- **zai-sdk** - 智谱 AI SDK
- **Pydantic** - 数据验证
- **Uvicorn** - ASGI 服务器
### 前端
- **React 18** - UI 框架
- **TypeScript** - 类型安全
- **Vite** - 构建工具
- **Ant Design 5** - UI 组件库
- **Zustand** - 状态管理
- **React Router** - 客户端路由
- **Axios** - HTTP 客户端
- **Recharts** - 数据可视化
---
## 扩展阅读
- [FastAPI 文档](https://fastapi.tiangolo.com/)
- [React 文档](https://react.dev/)
- [Ant Design 文档](https://ant.design/)
- [智谱 AI 文档](https://docs.bigmodel.cn/)
- [Zustand 文档](https://zustand-demo.pmnd.rs/)
- [Vite 文档](https://vitejs.dev/)