用CrewAI代理自动化漫画创作:创新内容生成技巧
6 个月前
引言
从前,创作一本漫画书是一个繁琐的过程,需要作家、插画师和无数小时的努力。如今,人工智能已成为一种强大的工具,增强了创意专业人士的能力。想象一下,把一个短故事交给人工智能,看看它如何帮助将这个故事转变为生动、视觉震撼的漫画书——同时保留创作者独特的视角。这不再只是幻想;这是由尖端生成性人工智能模型实现的现实。在这篇博客中,我们将探讨 CrewAI LLM 代理如何提升漫画书创作的创意过程,深入了解使这一魔法成为可能的架构和实现。
示例:从《潘查塔特拉》创作故事书
为了演示这个过程,我们使用《潘查塔特拉》中的一个短故事——这是一个以智慧和道德教训著称的古印度寓言集。考虑一下《狮子与兔子》的故事:
短故事 : “从前,有一只名叫巴苏拉卡的强大狮子,它在丛林中横行霸道。动物们厌倦了它的暴政,决定每天给它送一只猎物。一天,轮到一只聪明的兔子,它制定了一个计划,想要摆脱狮子。它把巴苏拉卡引到一个深井边,骗它说那里住着另一只狮子。巴苏拉卡看到水中的倒影,愤怒地吼叫着跳进了井里,再也没有回来。”
使用 CrewAI 框架,我们将遵循以下步骤:
剧本编写代理 : 剧本编写者将故事分解为场景,例如:
- 场景 1:狮子在丛林中横行霸道。
- 场景 2:动物们决定每天送一只猎物。
- 场景 3:兔子计划欺骗狮子。
- 场景 4:狮子跳进井里。
视觉艺术家代理 : 视觉艺术家随后为每个场景生成插图,描绘关键时刻,比如狮子在丛林中吼叫、兔子引导狮子到井边,以及狮子跳入水中的最后一幕。
合成器代理 : 最后,合成器将所有这些场景和图像结合成一本连贯的故事书,准备好供人观看和分享。
有关《潘查塔特拉》故事的更多细节,您可以参考外部资源,如 维基百科上的潘查塔特拉 或 潘查塔特拉故事集。
使用 LLM 代理自动化创意生成
生成性人工智能代理可以被视为一个数字“团队”,共同执行复杂的创意过程。通过将特定任务分配给各个 AI 代理,创作整本漫画图画书的过程变得更加高效和自动化。在下面的图示中,专业代理协同工作:
- 剧本编写者 : 负责将短故事转化为详细的分场景。
- 视觉艺术家 : 负责将每个场景转化为引人入胜的视觉艺术作品。
- 合成器 : 负责将所有生成的场景及其对应的图像结合成一本完整的漫画书。合成器确保叙事流畅,最终产品准备好出版。
这些代理之间的协同作用自动化了漫画书创作的过程,使创意工作流程高效。关键在于以协调的方式利用生成性语言模型和图像生成 AI 系统的能力。
架构概述
这种自动化的架构简单而有效。该过程从一个短故事开始,依次进行:
- 短故事输入 : 该过程以一个短叙述作为输入,作为漫画书的基础。
- 剧本编写代理 : 该代理将短故事分解为离散场景,每个场景捕捉故事情节中的重要部分。在图示中,这被标记为“场景 1、场景 2、场景 3”等,直到整个故事被分成几个较小的场景。
- 视觉艺术家代理 : 视觉艺术家根据每个场景描述创建视觉表现,有效地为漫画绘制插图。视觉元素被创建为代表场景的图像,比如阳光下的狮子、狮子与兔子的相遇等。
- 合成器 : 最后,所有场景及其对应的图像由合成器代理结合,创建一本完整的图画书。
整个过程旨在无缝地将叙述转化为引人入胜的漫画书,所需的人为干预最小。
使用 CrewAI 框架的实现
为了实现这一愿景,我们实施了 CrewAI 框架,三个代理和谐工作。以下是实现过程中涉及的详细步骤,并附有代码片段的占位符,以帮助您逐步重现该过程:
定义代理和任务 : 我们使用 CrewAI 框架定义两个代理——代理 1(剧本编写者)和代理 2(视觉艺术家)。这两个代理都有特定的角色,它们的任务相互关联,以实现高效的工作流程。
# 代理
scriptwriter:
role: >
为儿童短故事编写场景剧本
goal: >
为儿童图画书编写简单、清晰且引人入胜的场景剧本。
backstory: >
你是一个剧本编写者,专注于将儿童短故事转化为可表演或制作动画的剧本。
llm: llm_model
# 任务
scriptwriting:
description: >
你将获得一个关于学习生活重要教训的儿童短故事。该故事需要转化为图画书,以便儿童愉快阅读和参与。你负责将故事分解为 {number_of_scenes} 个独特场景,每个场景专注于故事中的特定事件或时刻。每个场景将转化为图像。你必须生成以下信息,遵循指定的 pydantic 模式:
- 故事的合适名称
- 故事的简短总结
- 提供给读者的重要背景信息的简短叙述。
- 每个场景的详细叙述,至少一到两句。
- 故事中学到的最终教训。
<short_story>
{story_text}
</short_story>
expected_output: >
输出必须严格遵循 pydantic 模式。如果不遵循,将会受到惩罚。
agent: scriptwriter
# 代理
visualartist:
role: >
为故事书创作视觉插图
goal: >
创建引人入胜的图画书。
backstory: >
擅长创作图画故事书的专家。
llm: llm_model
# 任务
illustration:
description: >
你将获得一个关于学习生活重要教训的儿童短故事。该故事将转化为图画书,以便儿童愉快阅读和参与。故事已经分解为独特的场景。
以下是故事中某个特定场景的描述,以及相应的简短总结。
生成一个可以用于文本到图像模型的提示,以生成该场景的图像。将提示发送到提供的工具,以生成符合场景要求的角色和背景的图像。角色应为卡通风格。提示应少于 40 个单词。
<story_summary>
{story_summary}
<story_summary>
<scene_description>
{scene_description}
</scene_description>
expected_output: >
输出必须严格遵循 pydantic 模式。如果不遵循,将会受到惩罚。
agent: visualartist
Crew 配置: 定义代理生成响应的结构化模式和 LLM 模型,如 OpenAI 和 DaLLE 模型,并将代理与其任务绑定。
dalle_tool = DallETool(model="dall-e-3",
size="1024x1024",
quality="standard",
n=1)
# 定义单个场景的类
class StoryScene(BaseModel):
scene_number: int
narration: str
# 定义故事场景列表的类
class StoryScenes(BaseModel):
story_name: str
summary: str
background: str
lesson: str
scenes: List[StoryScene]
# 定义单个场景的类
class SceneImage(BaseModel):
prompt: str = Field(description="用于生成图像的文本提示", max_length=50)
image_url: str = Field(description="生成工具的图像 URL")
@CrewBase
class StoryCrew():
"""故事团队"""
agents_config = 'config/story/agents.yaml'
tasks_config = 'config/story/tasks.yaml'
@llm
def llm_model(self):
return ChatOpenAI(temperature=0.0, # 设置为 0 以获得确定性输出
model="gpt-4o-mini", # 使用 GPT-4 Turbo 模型
max_tokens=8000)
@agent
def scriptwriter(self) -> Agent:
return Agent(
config=self.agents_config['scriptwriter'],
output_pydantic=StoryScenes,
verbose=True
)
@task
def scriptwriting(self) -> Task:
return Task(
config=self.tasks_config['scriptwriting'],
output_pydantic=StoryScenes,
)
@crew
def crew(self) -> Crew:
"""创建故事团队"""
script_crew = Crew(
agents=self.agents, # 由 @agent 装饰器自动创建
tasks=self.tasks, # 由 @task 装饰器自动创建
process=Process.sequential,
verbose=True,
# process=Process.hierarchical, # 如果您想使用该选项,请参见 https://docs.crewai.com/how-to/Hierarchical/
)
return script_crew
@CrewBase
class ArtistCrew():
agents_config = 'config/visual/agents.yaml'
tasks_config = 'config/visual/tasks.yaml'
@llm
def llm_model(self):
return ChatOpenAI(temperature=0.0, # 设置为 0 以获得确定性输出
model="gpt-4o-2024-08-06", # 使用 GPT-4 Turbo 模型
max_tokens=8000)
@agent
def visualartist(self) -> Agent:
return Agent(
config=self.agents_config['visualartist'],
tools=[dalle_tool],
verbose=True
)
@task
def illustration(self) -> Task:
return Task(
config=self.tasks_config['illustration'],
output_pydantic=SceneImage,
output_file='report.md'
)
@crew
def crew(self) -> Crew:
"""创建图画书团队"""
artist_crew = Crew(
agents=self.agents, # 由 @agent 装饰器自动创建
tasks=self.tasks, # 由 @task 装饰器自动创建
process=Process.sequential,
verbose=True,
# process=Process.hierarchical, # 如果您想使用该选项,请参见 https://docs.crewai.com/how-to/Hierarchical/
)
return artist_crew
主要工作流程: 确保两个代理之间的适当交接。例如,一旦剧本编写者完成一个场景,它会自动将其传递给视觉艺术家,确保工作流程的连续性。
agentops.start_session(tags=['story', 'scripts'])
# 使用 QuestCrew 创建假设或生成问题
inputs = {
'number_of_scenes': int(number_of_scenes),
'story_text': story_text,
}
scenes_list = StoryCrew().crew().kickoff(inputs=inputs)
agentops.end_session("成功")
if scenes_list is not None:
print(f"剧本编写的原始结果: {scenes_list.raw}")
slist = scenes_list.pydantic
story_summary = slist.summary
for scene in slist.scenes:
print(f"场景: {scene.narration}")
scene_input = [{"story_summary": story_summary,
'scene_description': scene.narration} for i, scene in enumerate(slist.scenes)]
agentops.start_session(tags=['scene', 'illustration'])
# 运行代理
result_images = ArtistCrew().crew().kickoff_for_each(inputs=scene_input)
print("result_images : {result_images.raw}")
结论
生成性人工智能的力量在于它能够增强和支持创意过程,为内容创作者提供新的工具,以实现他们的想法。CrewAI LLM 代理帮助将一个简单的短故事转变为引人入胜的漫画图画书,帮助讲故事的人在每个阶段的旅程中。通过自动化剧本分解和视觉生成等重复性任务,人工智能使艺术家和作家能够更多地专注于核心创意元素,保留他们独特的艺术风格。这一实现展示了生成性人工智能如何增强创意产业,提供了一个未来的展望,在这个未来中,创造力和技术无缝地协同工作。
如果您想了解更多关于 CrewAI 的信息或对为您的项目实施类似的创意解决方案有疑问,请告诉我!
推荐阅读:
FluxAI 中文
© 2025. All Rights Reserved