2026-01-25 19:27:44 +08:00

11 KiB
Raw Permalink Blame History

Creative Studio API 文档

概述

Creative Studio 提供 RESTful API 接口支持项目管理、Skill 管理、记忆系统、审核系统等功能。

Base URL: http://localhost:8000/api/v1

认证方式: Bearer Token (即将支持)

数据格式: JSON


目录


Skill 管理 API

1. 列出所有 Skills

GET /api/v1/skills

查询参数:

参数 类型 必填 说明
skill_type string 筛选类型 (builtin/user)
category string 筛选分类

响应示例:

[
  {
    "id": "dialogue-writer-ancient",
    "name": "古风对话大师",
    "version": "2.1.0",
    "type": "builtin",
    "category": "编剧 > 对话风格",
    "behavior_guide": "你是专业的古风剧集编剧...",
    "tags": ["古风", "对话", "编剧"],
    "created_at": "2024-01-15T10:00:00Z"
  }
]

2. 获取 Skill 详情

GET /api/v1/skills/{skill_id}

路径参数:

参数 类型 说明
skill_id string Skill ID

响应示例:

{
  "id": "dialogue-writer-ancient",
  "name": "古风对话大师",
  "version": "2.1.0",
  "author": "Creative Studio Platform",
  "type": "builtin",
  "behavior_guide": "你是专业的古风剧集编剧...",
  "config": {
    "preset": null,
    "parameters": {},
    "weights": null
  },
  "category": "编剧 > 对话风格",
  "tags": ["古风", "对话", "编剧"]
}

3. 创建新 Skill

POST /api/v1/skills

请求体:

{
  "id": "my-custom-skill",
  "name": "我的自定义 Skill",
  "content": "# Skill: 我的自定义 Skill\n\n## 行为指导\n你是...",
  "category": "自定义",
  "tags": ["测试"]
}

响应: 返回创建的 Skill 对象


4. 测试 Skill

POST /api/v1/skills/{skill_id}/test

请求体:

{
  "test_input": "请帮我创作一段古风对话",
  "context": {
    "scene": "御花园",
    "characters": ["李云飞", "苏婉儿"]
  },
  "temperature": 0.7
}

响应示例:

{
  "skill_id": "dialogue-writer-ancient",
  "skill_name": "古风对话大师",
  "response": "【场景】御花园,傍晚\n【人物】李云飞、苏婉儿\n\n李云飞拱手苏姑娘...",
  "usage": {
    "prompt_tokens": 150,
    "completion_tokens": 300,
    "total_tokens": 450
  }
}

5. 更新 Skill

PUT /api/v1/skills/{skill_id}

请求体:

{
  "name": "更新后的名称",
  "content": "更新后的内容..."
}

6. 删除 Skill

DELETE /api/v1/skills/{skill_id}

响应: 204 No Content


7. 重新加载 Skill

POST /api/v1/skills/{skill_id}/reload

用于清除缓存并重新加载 Skill。


8. 列出所有分类

GET /api/v1/skills/categories/list

响应示例:

["编剧 > 对话风格", "审核 > 一致性", "通用"]

项目管理 API

1. 列出所有项目

GET /api/v1/projects

查询参数:

参数 类型 必填 说明
status string 筛选状态
agent_id string 筛选 Agent 类型

响应示例:

[
  {
    "id": "proj-123",
    "name": "我的古风剧集",
    "description": "一部古装爱情剧",
    "agent_id": "series-creation-agent",
    "status": "active",
    "created_at": "2024-01-15T10:00:00Z",
    "episode_count": 10,
    "completed_episodes": 3
  }
]

2. 创建项目

POST /api/v1/projects

请求体:

{
  "name": "我的古风剧集",
  "description": "一部古装爱情剧",
  "agent_id": "series-creation-agent",
  "global_context": {
    "world_setting": "古代架空世界...",
    "character_profiles": [...],
    "scene_settings": [...],
    "overall_outline": "..."
  }
}

3. 获取项目详情

GET /api/v1/projects/{project_id}

响应示例:

{
  "id": "proj-123",
  "name": "我的古风剧集",
  "description": "一部古装爱情剧",
  "agent_id": "series-creation-agent",
  "status": "active",
  "global_context": {...},
  "memory": {...},
  "episodes": [...]
}

4. 更新项目

PUT /api/v1/projects/{project_id}

5. 删除项目

DELETE /api/v1/projects/{project_id}

6. 执行单集创作

POST /api/v1/projects/{project_id}/execute

请求体:

{
  "episode_number": 4,
  "config": {
    "duration_minutes": 45,
    "focus_areas": ["情感发展", "剧情推进"]
  }
}

响应示例:

{
  "episode_id": "ep-proj-123-4",
  "episode_number": 4,
  "status": "in_progress",
  "stages": {
    "structure": "completed",
    "outline": "in_progress",
    "dialogue": "pending",
    "review": "pending",
    "memory": "pending"
  }
}

7. 批量执行剧集创作

POST /api/v1/projects/{project_id}/execute-batch

请求体:

{
  "start_episode": 4,
  "end_episode": 6,
  "batch_config": {
    "quality_threshold": 85,
    "max_retries": 2
  }
}

8. 获取剧集列表

GET /api/v1/projects/{project_id}/episodes

9. 获取单集详情

GET /api/v1/projects/{project_id}/episodes/{episode_number}

记忆系统 API

1. 获取项目记忆

GET /api/v1/projects/{project_id}/memory

响应示例:

{
  "eventTimeline": [...],
  "pendingThreads": [...],
  "characterStates": {...},
  "foreshadowing": [...],
  "relationships": {...}
}

2. 获取事件时间线

GET /api/v1/projects/{project_id}/memory/timeline

查询参数:

参数 类型 必填 说明
character string 筛选角色
episode int 筛选集数
importance string 筛选重要性 (low/medium/high)

3. 获取待收线问题

GET /api/v1/projects/{project_id}/memory/threads

4. 添加待收线问题

POST /api/v1/projects/{project_id}/memory/threads

请求体:

{
  "description": "需要解释为什么主角会失去记忆",
  "importance": "high",
  "reminder_episode": 5
}

5. 更新待收线问题

PUT /api/v1/projects/{project_id}/memory/threads/{thread_id}

6. 标记问题已解决

POST /api/v1/projects/{project_id}/memory/resolve-thread

请求体:

{
  "thread_id": "thread-123",
  "resolution_episode": 5,
  "resolution_description": "在第五集中揭示..."
}

7. 获取人物状态

GET /api/v1/projects/{project_id}/memory/characters

审核系统 API

1. 获取审核配置

GET /api/v1/projects/{project_id}/review-config

响应示例:

{
  "enabled_review_skills": ["consistency_checker", "dialogue_quality_checker"],
  "overall_strictness": "medium",
  "dimension_settings": {...},
  "custom_rules": [...]
}

2. 更新审核配置

PUT /api/v1/projects/{project_id}/review-config

请求体:

{
  "enabled_review_skills": ["consistency_checker"],
  "overall_strictness": "strict",
  "dimension_settings": {
    "character_consistency": {
      "enabled": true,
      "strictness": 0.8,
      "weight": 0.5
    }
  }
}

3. 获取审核配置预设

GET /api/v1/projects/{project_id}/review-presets

4. 执行剧集审核

POST /api/v1/projects/{project_id}/episodes/{episode_number}/review

响应示例:

{
  "episode_id": "ep-proj-123-4",
  "overall_score": 85.5,
  "passed": true,
  "dimension_scores": {
    "character_consistency": 88,
    "plot_coherence": 82,
    "dialogue_quality": 90
  },
  "issues": [
    {
      "id": "issue-1",
      "type": "character_inconsistency",
      "dimension": "character_consistency",
      "severity": "medium",
      "location": {
        "episode": 4,
        "scene": 2,
        "line": 15
      },
      "description": "角色行为与设定不符",
      "suggestion": "建议修改为...",
      "auto_fix_available": true
    }
  ],
  "new_foreshadowing": [...],
  "resolved_threads": [...]
}

5. 获取可用的审核维度

GET /api/v1/review/dimensions

6. 添加自定义规则

POST /api/v1/review/custom-rules

请求体:

{
  "project_id": "proj-123",
  "rule": {
    "name": "对话自然性检查",
    "description": "检查对话是否过于生硬",
    "trigger_condition": "对话包含超过3个连续的形容词",
    "severity": "medium"
  }
}

7. 删除自定义规则

DELETE /api/v1/review/custom-rules/{rule_id}

错误处理

所有 API 在出错时返回以下格式:

{
  "detail": "错误描述信息"
}

常见 HTTP 状态码:

状态码 说明
200 成功
201 创建成功
204 成功(无内容)
400 请求参数错误
404 资源不存在
422 数据验证失败
500 服务器内部错误

使用示例

Python 示例

import requests

BASE_URL = "http://localhost:8000/api/v1"

# 列出所有 Skills
response = requests.get(f"{BASE_URL}/skills")
skills = response.json()
print(skills)

# 测试 Skill
response = requests.post(
    f"{BASE_URL}/skills/dialogue-writer-ancient/test",
    json={
        "test_input": "请帮我创作一段古风对话",
        "temperature": 0.7
    }
)
result = response.json()
print(result["response"])

# 创建项目
response = requests.post(
    f"{BASE_URL}/projects",
    json={
        "name": "我的古风剧集",
        "agent_id": "series-creation-agent",
        "global_context": {...}
    }
)
project = response.json()
print(project)

JavaScript 示例

const BASE_URL = "http://localhost:8000/api/v1";

// 列出所有 Skills
const response = await fetch(`${BASE_URL}/skills`);
const skills = await response.json();
console.log(skills);

// 测试 Skill
const result = await fetch(`${BASE_URL}/skills/dialogue-writer-ancient/test`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    test_input: "请帮我创作一段古风对话",
    temperature: 0.7
  })
});
const data = await result.json();
console.log(data.response);

// 创建项目
const project = await fetch(`${BASE_URL}/projects`, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({
    name: "我的古风剧集",
    agent_id: "series-creation-agent",
    global_context: {...}
  })
});
const projectData = await project.json();
console.log(projectData);

附录

Skill 类型说明

  • builtin: 平台内置的 Skill用户不可修改
  • user: 用户自定义的 Skill可以编辑和删除

项目状态说明

  • draft: 草稿状态
  • active: 活跃项目
  • completed: 已完成
  • archived: 已归档

剧集状态说明

  • pending: 待创作
  • in_progress: 创作中
  • completed: 已完成
  • needs-review: 需要审核
  • failed: 创作失败

审核问题严重程度说明

  • low: 低优先级问题
  • medium: 中等优先级问题
  • high: 高优先级问题