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

17 KiB
Raw Blame History

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 的行为指导融入提示词
  • 支持同步和异步调用
  • 错误处理和重试机制

核心方法:

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

  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 - 数据可视化

扩展阅读