← 返回首页
🧠

剧本写作:AI辅助剧本创作

📂 llm ⏱ 3 min 531 words

--- title: "剧本写作:AI辅助剧本创作" description: "使用LLM进行剧本写作和对话生成" tags: ["剧本写作", "对话生成", "AI创作", "LLM", "影视"] category: "llm" icon: "🎬"

剧本写作:AI辅助剧本创作

剧本写作概述

剧本写作是利用LLM创建电影、电视剧、话剧等剧本的技术,包括对话、场景描述和情节发展。

核心功能

1. 剧本框架生成

from openai import OpenAI
from typing import Dict, List
from dataclasses import dataclass

@dataclass
class ScriptFramework:
    """剧本框架"""
    title: str
    genre: str
    setting: str
    logline: str
    characters: List[Dict]
    acts: List[Dict]

class ScriptFrameworkGenerator:
    """剧本框架生成器"""
    
    def __init__(self, model: str = "gpt-4"):
        self.client = OpenAI()
        self.model = model
    
    def generate_framework(self, genre: str, concept: str) -> ScriptFramework:
        """生成剧本框架"""
        prompt = f"""请为一部{genre}电影创建剧本框架。

概念:{concept}

请提供:
1. 标题
2. 故事梗概(Logline)
3. 主要角色(至少3个)
4. 三幕结构
5. 关键情节点

请以结构化格式返回。"""
        
        response = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system", "content": "你是一个专业编剧。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.7
        )
        
        return self._parse_framework(response.choices[0].message.content)
    
    def _parse_framework(self, response: str) -> ScriptFramework:
        """解析框架"""
        # 简化解析
        return ScriptFramework(
            title="未命名电影",
            genre="剧情",
            setting="现代都市",
            logline="一个关于成长和救赎的故事",
            characters=[
                {"name": "主角", "role": "protagonist", "description": "一个普通人"},
                {"name": "反派", "role": "antagonist", "description": "主要对手"}
            ],
            acts=[
                {"act": 1, "description": "建置"},
                {"act": 2, "description": "对抗"},
                {"act": 3, "description": "解决"}
            ]
        )

2. 对话生成器

class DialogueGenerator:
    """对话生成器"""
    
    def __init__(self, model: str = "gpt-4"):
        self.client = OpenAI()
        self.model = model
    
    def generate_dialogue(self, characters: List[Dict], scene: str, 
                         mood: str, purpose: str) -> str:
        """生成对话"""
        characters_desc = "\n".join([
            f"- {c['name']}: {c.get('description', '')}" for c in characters
        ])
        
        prompt = f"""请为以下场景生成对话:

角色:
{characters_desc}

场景:{scene}
氛围:{mood}
对话目的:{purpose}

请生成自然流畅的对话,符合角色性格。"""
        
        response = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system", "content": "你是一个专业编剧,擅长写对话。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.7
        )
        
        return response.choices[0].message.content
    
    def generate_argument(self, character1: Dict, character2: Dict, 
                         topic: str) -> str:
        """生成争吵对话"""
        prompt = f"""请生成{character1['name']}和{character2['name']}关于"{topic}"的争吵对话。

{character1['name']}:{character1.get('description', '')}
{character2['name']}:{character2.get('description', '')}

要求:
1. 体现角色性格
2. 情绪逐渐升级
3. 包含冲突和转折
4. 自然流畅"""
        
        response = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system", "content": "你是一个擅长写戏剧冲突的编剧。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.8
        )
        
        return response.choices[0].message.content
    
    def generate_romantic_dialogue(self, character1: Dict, character2: Dict, 
                                   situation: str) -> str:
        """生成浪漫对话"""
        prompt = f"""请生成{character1['name']}和{character2['name']}的浪漫对话。

情境:{situation}

要求:
1. 情感真挚
2. 含蓄优美
3. 体现角色关系
4. 浪漫氛围"""
        
        response = self.client.chat.completions.create(
            model=self.model,
            messages=[
                {"role": "system", "content": "你是一个擅长写浪漫场景的编剧。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.7
        )
        
        return response.choices[0].message.content

3. 场景描述生成器

class SceneDescriptionGenerator:
    """场景描述生成器"""
    
    def __init__(self, model: str = "gpt-4"):
        self.client = OpenAI()
        self.model = model
    
    def generate_scene_description(self, location: str, time: str, 
                                   mood: str) -> str:
        """生成场景描述"""
        prompt = f"""请为以下场景生成详细的描述:

地点:{location}
时间:{time}
氛围:{mood}

请提供:
1. 环境描写
2. 光线和色彩
3. 声音和气味
4. 氛围营造
5. 镜头建议"""
        
        response = self.client.chat.completions.create(
            self.model,
            messages=[
                {"role": "system", "content": "你是一个场景设计专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.6
        )
        
        return response.choices[0].message.content
    
    def generate_action_sequence(self, characters: List[str], action: str) -> str:
        """生成动作序列"""
        characters_str = "、".join(characters)
        
        prompt = f"""请为以下动作场景生成详细描述:

角色:{characters_str}
动作:{action}

请提供:
1. 动作分解
2. 镜头切换
3. 节奏控制
4. 特效建议"""
        
        response = self.client.chat.completions.create(
            self.model,
            messages=[
                {"role": "system", "content": "你是一个动作场景设计专家。"},
                {"role": "user", "content": prompt}
            ],
            temperature=0.7
        )
        
        return response.choices[0].message.content

完整剧本创作

class ScriptCreationPipeline:
    """剧本创作管道"""
    
    def __init__(self):
        self.framework_generator = ScriptFrameworkGenerator()
        self.dialogue_generator = DialogueGenerator()
        self.scene_generator = SceneDescriptionGenerator()
    
    def create_script(self, genre: str, concept: str, num_scenes: int = 10) -> Dict:
        """创作完整剧本"""
        # 1. 生成框架
        print("生成剧本框架...")
        framework = self.framework_generator.generate_framework(genre, concept)
        
        # 2. 生成场景和对话
        print("生成场景和对话...")
        scenes = []
        
        for i in range(num_scenes):
            scene = {
                "number": i + 1,
                "description": self.scene_generator.generate_scene_description(
                    f"场景{i+1}", "日", "紧张"
                ),
                "dialogue": self.dialogue_generator.generate_dialogue(
                    framework.characters[:2],
                    f"场景{i+1}",
                    "紧张",
                    "推进剧情"
                )
            }
            scenes.append(scene)
        
        # 3. 组装剧本
        script = f"# {framework.title}\n\n"
        script += f"**类型**:{framework.genre}\n"
        script += f"**梗概**:{framework.logline}\n\n"
        script += "---\n\n"
        
        for scene in scenes:
            script += f"## 场景 {scene['number']}\n\n"
            script += f"{scene['description']}\n\n"
            script += f"{scene['dialogue']}\n\n"
            script += "---\n\n"
        
        return {
            "framework": framework,
            "scenes": scenes,
            "full_script": script
        }

# 使用示例
pipeline = ScriptCreationPipeline()
script = pipeline.create_script("悬疑", "一个侦探解开连环谜案", 5)

print(f"标题:{script['framework'].title}")
print(f"场景数:{len(script['scenes'])}")
print("\n剧本开头:")
print(script['full_script'][:500])

最佳实践

  1. 构建框架:先构建完整的剧本框架
  2. 塑造角色:创建立体的角色
  3. 设计冲突:设计有张力的冲突
  4. 打磨对话:打磨自然流畅的对话

总结

剧本写作是LLM创意应用的重要领域。通过合理使用,可以高效创作各种类型的剧本内容。