剧本写作:AI辅助剧本创作
--- 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])
最佳实践
- 构建框架:先构建完整的剧本框架
- 塑造角色:创建立体的角色
- 设计冲突:设计有张力的冲突
- 打磨对话:打磨自然流畅的对话
总结
剧本写作是LLM创意应用的重要领域。通过合理使用,可以高效创作各种类型的剧本内容。