CrewAI 에이전트를 통한 만화 제작 자동화 사례
선물(직업 등)
만화책 한 권을 만드는 것이 작가와 일러스트레이터, 그리고 수많은 시간을 들여야 하는 지루한 과정이었던 시절이 있었습니다. 오늘날 AI는 크리에이티브 전문가들의 역량을 강화하는 강력한 도구로 활용되고 있습니다. AI에게 단편 소설을 넘겨주면 창작자의 고유한 관점을 유지하면서 생생하고 시각적으로 멋진 만화책으로 변신하는 과정을 지켜본다고 상상해 보세요. 이는 더 이상 상상이 아닌 최첨단 제너레이티브 AI 모델을 통해 실현 가능한 현실입니다. 이 블로그에서는 다음과 같은 내용을 살펴봅니다.CrewAI LLM 에이전트가 만화책 창작 과정을 향상시키는 방법에서는 이러한 마법을 가능하게 하는 구조와 구현에 대해 자세히 설명합니다.
예: 판차탄트라에서 스토리북 만들기
이 과정을 설명하기 위해 지혜와 교훈으로 유명한 고대 인도 우화집인 판차탄트라의 짧은 이야기를 예로 들어보겠습니다. 사자와 토끼의 이야기를 생각해 보세요:
짧은 이야기: "옛날 옛적에 정글에서 날뛰는 바수라카라는 강력한 사자가 있었어요. 동물들은 그의 폭정에 지쳐서 매일 먹이를 보내기로 결정했습니다. 어느 날 영리한 토끼가 사자를 제거할 계획을 세웠어요. 그는 바수라카를 깊은 우물로 유인한 뒤 그곳에 다른 사자가 살고 있다고 설득했습니다. 물에 비친 자신의 모습을 본 바수라카는 분노에 찬 포효를 하며 우물에 뛰어들었고, 다시는 돌아오지 않았습니다."
CrewAI 프레임워크를 사용하여 아래 단계를 따릅니다:
- 1. 스크립트 작성 에이전트예를 들어 스크립트 작성자는 스토리를 장면으로 세분화합니다:
- - 장면 1: 사자가 정글을 배회합니다.
- - 장면 2: 동물들은 하루에 한 마리씩 먹이를 배달하기로 결정합니다.
- - 장면 3: 토끼가 사자를 속일 계획을 세웁니다.
- - 장면 4: 사자가 우물에 뛰어듭니다.
- 1. 비주얼 아티스트 에이전시비주얼 아티스트는 정글을 포효하는 사자, 사자를 우물로 안내하는 토끼, 사자가 물로 뛰어드는 마지막 장면 등 주요 순간을 묘사하는 각 장면에 대한 일러스트를 제작합니다.
- 2. 신디사이저 에이전트결국 컴포짓은 이러한 모든 장면과 이미지를 일관된 스토리북으로 결합하여 보고 공유할 수 있도록 준비합니다.
판차탄트라 이야기에 대한 자세한 내용은 Wikipedia의 판차탄트라 또는 판차탄트라 이야기 모음과 같은 외부 자료를 참조하세요.
LLM 에이전트를 사용한 자동화된 저작 생성
제너레이티브 AI 에이전트는 복잡한 창작 과정을 함께 수행하는 디지털 '팀'으로 생각할 수 있습니다. 개별 AI 에이전트에게 특정 작업을 할당함으로써 전체 만화책 제작 프로세스가 효율적이고 자동화됩니다. 아래 그림에서는 전문 에이전트들이 함께 작업하는 모습을 볼 수 있습니다:
- 1. 스크립트 작성자단편 소설을 세부적인 분석 장면으로 번역하는 일을 담당합니다.
- 2. 비주얼 아티스트각 장면을 매력적인 시각 예술 작품으로 바꾸는 일을 담당합니다.
- 3. 신디사이저생성된 모든 장면과 해당 이미지를 일관성 있고 완전한 만화책으로 병합하는 작업을 담당합니다. 컴포저는 내러티브가 원활하게 흐르고 최종 결과물이 출시될 준비가 되었는지 확인합니다.
이러한 에이전트 간의 시너지 효과로 만화책 제작 프로세스가 자동화되어 효율적이고 창의적인 워크플로우를 구현할 수 있습니다. 핵심은 제너레이티브 언어 모델과 이미지 생성 AI 시스템을 조화롭게 활용할 수 있는 능력에 있습니다.
아키텍처 개요
이 자동화의 아키텍처는 간단하지만 효과적입니다. 프로세스는 짧은 스토리로 시작하여 다음과 같이 진행됩니다:
- 1. 짧은 스토리 입력이 프로세스는 만화책의 기초가 되는 짧은 내러티브를 입력으로 사용합니다.
- 2. 스크립트 작성 에이전트에이전트는 짧은 스토리를 개별 장면으로 나누고 각 장면은 스토리라인의 중요한 부분을 캡처합니다. 그림에서는 전체 스토리가 더 작은 장면으로 세분화될 때까지 '장면 1, 장면 2, 장면 3' 등의 레이블이 붙은 장면으로 표시됩니다.
- 3. 비주얼 아티스트 에이전시비주얼 아티스트는 각 장면 설명을 시각적 표현으로 변환하여 만화를 효과적으로 설명하는 역할을 담당합니다. 태양 아래 사자, 사자와 토끼의 만남 등의 장면을 표현하기 위해 시각적 요소를 이미지로 만듭니다.
- 4. 신디사이저마지막으로 모든 장면과 해당 이미지가 컴포지터 에이전트에 의해 결합되어 완전한 그림책이 만들어집니다.
전체 프로세스는 사람의 개입을 최소화하면서 내러티브를 매력적인 만화책으로 매끄럽게 변환하도록 설계되었습니다.
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
팀 구성: 상담원이 응답을 생성할 수 있는 구조화된 스키마를 정의하고 OpenAI 및 DaLLE 모델과 같은 llm 모델을 생성하고 상담원을 해당 작업에 바인딩합니다.
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("Success") if scenes_list is not None: print(f"Raw result from script writing: {scenes_list.raw}") slist = scenes_list.pydantic story_summary = slist.summary for scene in slist.scenes: print(f"Scene: {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}")
평결에 도달하기
제너레이티브 AI의 힘은 창작 과정을 보강하고 지원하는 능력에 있으며, 콘텐츠 제작자에게 아이디어를 실현할 수 있는 새로운 도구를 제공합니다.CrewAI LLM 에이전트는 단순한 단편 소설을 매력적인 만화 그림책으로 변환하는 데 도움을 주며, 모든 단계에서 스토리텔러를 지원합니다. AI는 대본 분해 및 시각적 생성과 같은 반복적인 작업을 자동화함으로써 아티스트와 작가가 고유한 예술적 스타일을 유지하면서 핵심적인 창작 요소에 더 집중할 수 있도록 지원합니다. 이 구현은 제너레이티브 AI가 크리에이티브 산업을 어떻게 향상시킬 수 있는지 보여주며, 창의성과 기술이 원활하게 조화를 이루는 미래에 대한 비전을 제시합니다.
© 저작권 정책
기사 저작권 AI 공유 서클 모두 무단 복제하지 마세요.
관련 문서
댓글 없음...