17 KiB
17 KiB
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 │ │
│ └────────────┘ └────────────┘ └────────────┘ │
└─────────────────────────────────────────────────────────────┘
核心设计原则
- "Agent 固定,Skill 可配" - 平台维护 Agent 框架,用户配置 Skills
- "Skill 指导行为" - Skill 行为指导融入提示词,指导 LLM 行为
- "全局上下文 + 记忆系统" - 确保多集内容一致性
- "全自动 + 人工审核" - 自动创作与人工审核相结合
核心模块说明
1. GLM Client (GLM 客户端)
位置: backend/app/core/llm/glm_client.py
功能:
- 封装智谱 AI GLM-4.7 API
- 将 Skill 的行为指导融入提示词
- 支持同步和异步调用
- 错误处理和重试机制
核心方法:
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 验证
核心方法:
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
功能:
- 事件时间线管理
- 伏笔追踪
- 人物状态变化记录
- 关系网络维护
核心方法:
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
功能:
- 多维度质量审核
- 自定义规则执行
- 问题定位和修复建议
- 审核结果聚合
核心方法:
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 进行轻量级状态管理:
// 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) => { /* ... */ }
}));
数据模型
核心数据模型
# 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
- 在
backend/skills_storage/builtin_skills/下创建目录 - 创建
SKILL.md文件 - 按照模板编写内容
- 重启后端服务自动加载
添加新的 API 端点
- 在
backend/app/api/v1/下创建路由文件 - 定义路由和处理器
- 在
backend/app/main.py中注册路由
添加新的前端页面
- 在
frontend/src/pages/下创建组件 - 在
frontend/src/App.tsx中添加路由 - 配置导航菜单
性能优化建议
后端
- Skill 缓存: 使用内存缓存避免频繁文件读取
- 异步处理: 使用 Celery 处理耗时任务
- 连接池: 复用 MongoDB 和 Redis 连接
- 响应压缩: 启用 Gzip 压缩
前端
- 代码分割: 使用 React.lazy 和 Suspense
- 状态管理: 使用 Zustand 避免不必要的重渲染
- 请求缓存: 使用 SWR 或 React Query
- 图片优化: 使用 WebP 格式和懒加载
安全考虑
- API Key 保护: 使用环境变量,不提交到 Git
- 输入验证: 使用 Pydantic 验证所有输入
- CORS 配置: 限制允许的源
- 错误处理: 不暴露敏感信息
部署架构
┌─────────────────────────────────────────────────────────┐
│ 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 - 数据可视化