挙げる
かつては、コミックの制作は、作家やイラストレーター、そして数え切れないほどの労力を必要とする退屈なプロセスだった。今日、AIはクリエイティブなプロフェッショナルに力を与える強力なツールとして機能している。短いストーリーをAIに渡すと、AIがそのストーリーを、クリエイターのユニークな視点を保ちながら、生き生きとした、視覚的に美しいコミックに変えるのを見るのを想像してみてほしい。これはもはや単なる空想ではなく、最先端のジェネレーティブAIモデルによって可能になった現実です。このブログではクルーAI LLMエージェントはいかにしてコミック制作の創造的プロセスを向上させるのか?
例:パンチャタントラからストーリーブックを作る
このプロセスを示すために、知恵と道徳的教訓で知られる古代インドの寓話集『パンチャタントラ』から短い物語を使おう。ライオンとウサギの話を考えてみよう:
短編小説:「むかしむかし、ジャングルで暴れまわるバスラカという名の強大なライオンがいました。動物たちは彼の横暴にうんざりし、毎日獲物を送りつけることにした。ある日、賢いウサギがライオンを追い払う計画を立てた。彼は芭羅迦を深い井戸に誘い込み、そこに別のライオンが住んでいると信じ込ませた。水面に映った自分の姿を見て、芭羅迦は怒りの咆哮を上げ、井戸に飛び込んだ。
CrewAIのフレームワークを使い、以下のステップを踏む:
- 1. 脚本エージェント例えば、脚本家はストーリーをシーンに分解します:
- - シーン1:ライオンがジャングルを歩き回る。
- - シーン2:動物たちは1日に1つの獲物を届けることに決める。
- - シーン3:ウサギはライオンを騙そうと企む。
- - シーン4:ライオンは井戸に飛び込む。
- 1. ビジュアル・アーティスト・エージェンシージャングルを咆哮するライオン、ライオンを井戸に案内するウサギ、そしてライオンが水に飛び込むラストシーン。
- 2. シンセサイザー・エージェント最終的には、コンポジターがこれらのシーンや画像を組み合わせて、一貫性のあるストーリーブックに仕上げる。
パンチャタントラの物語についてのより詳細な情報については、ウィキペディアのパンチャタントラやパンチャタントラ物語集などの外部リソースを参照することができる。
LLMエージェントによる自動オーサリング生成
ジェネレーティブAIエージェントは、複雑な創造的プロセスを実行するために協力し合うデジタル「チーム」と考えることができる。個々のAIエージェントに特定のタスクを割り当てることで、コミック全体を作成するプロセスが効率的かつ自動化される。下の図では、専門化されたエージェントが協力して作業している:
- 1. 脚本家ショートストーリーを詳細なブレイクダウンシーンに翻訳する。
- 2. ビジュアル・アーティスト各シーンを魅力的なビジュアル・アートに仕上げる責任者。
- 3. シンセサイザー生成されたすべてのシーンとそれに対応する画像を、首尾一貫した完全なコミックブックに統合する責任者。コンポジターは、物語がスムーズに流れ、最終製品がリリースできるようにする。
これらのエージェント間の相乗効果により、コミック制作プロセスが自動化され、効率的でクリエイティブなワークフローが可能になる。鍵は、生成言語モデルと画像生成AIシステムを連携して活用する能力にある。
アーキテクチャの概要
このオートメーションのアーキテクチャはシンプルだが効果的だ。プロセスは短いストーリーから始まり、以下のように流れる:
- 1. ショートストーリーの入力このプロセスでは、漫画のベースとなる短い物語をインプットする。
- 2. 脚本エージェントエージェントは短いストーリーを個別のシーンに分割し、それぞれがストーリーの重要な部分をとらえる。図では、これは「シーン1、シーン2、シーン3」などとラベル付けされたシーンとして示されている。
- 3. ビジュアル・アーティスト・エージェンシービジュアル・アーティストは、各シーンの描写を視覚的な表現に変換し、効果的にコミックを説明する役割を担っている。日向ぼっこをするライオン、ウサギと出会うライオンなど、シーンを表現する画像としてビジュアル要素が作成された。
- 4. シンセサイザー最後に、すべてのシーンとそれに対応する画像がコンポジター・エージェントによって合成され、完全な絵本が完成します。
すべてのプロセスは、物語をシームレスに、人間の介入を最小限に抑えた魅力的なコミックブックに変換するように設計されている。
CrewAIフレームワークを使用して実装
このビジョンを実現するために、私たちは3つのエージェントが調和して動作するCrewAIフレームワークを実装しました。以下は、ステップバイステップでプロセスを再現するのに役立つコードスニペットのプレースホルダを含む、実装プロセスの詳細なステップです:
エージェントとタスクの定義我々は、CrewAIフレームワークを使用して、エージェント1(脚本家)とエージェント2(ビジュアルアーティスト)の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
主な仕事の流れ 2つのエージェント間の適切なハンドオフを確保する。例えば、脚本家がシーンを完成させたら、自動的にビジュアル・アーティストに引き継ぎ、ワークフローの継続性を確保する。
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}")
評決を下す
CrewAI LLMエージェントは、シンプルなショートストーリーを魅力的なコミック絵本に変換する手助けをし、ストーリーのあらゆる段階でストーリーテラーを支援します。スクリプトの分解やビジュアルの生成といった反復タスクを自動化することで、AIはアーティストやライターが独自の芸術的スタイルを維持したまま、中核となる創造的要素により集中できるようにします。この実装は、ジェネレーティブAIがクリエイティブ業界をどのように強化できるかを示し、創造性とテクノロジーがシームレスに連携する未来のビジョンを提供する。