サムライアプスの人気?コンテンツの一つに「アイデアの小槌」があります。詳しくはこちらをご覧いただければと思いますが、毎朝直近でよく検索されているキーワードを基に、アイデアをAI(大規模言語モデル)で自動生成するものです。画像まで自動生成して、このように記事にしたり、Xにポストしたりしています。
さて、このアイデアの小槌をさらに発展させるべく、唐突ではありますが20秒程度のショート動画にしたい!しかも完全自動で生成したい!ということでやってみた、という記事になります。
動画を作成したい!とは言いましたが…正直に言いますと今はやりのAIエージェントやらを構築してみたかった、という動機のほうが大きいです。
今よく言われる「AI」は、ChatGPTのように、みなさんがよく使っているであろうAIは「1回の入力→1回の出力」で終わります。一方、AIエージェントは、与えられた目的に対して、どのように行動すればよいかを自律的に考えます。そして、必要に応じて試行錯誤を繰り返しながら、ゴール達成まで動き続けるのが特徴です。
たとえば、よくある事例として「旅行先のホテルを予約して。金額は○万円くらいで、評判が良くて家族向きなところがいい」とAIエージェントにお願いするとします。AIエージェントはその依頼に対して、どう動けば目的を達成できるかを自分で考えます。「Webで旅行先のホテルを検索する → ホテルの金額を調べる → 評判をチェックする → 条件に合えば予約する」といったステップを組み立て、順番に実行していきます。
さらに、「どのサイトでホテルを探すか」「どうやって金額やレビューを取得するか」「予約のためにどのボタンを押せばよいか」「“評判が良い”とは何を基準に判断するか」なども、AIエージェントが自律的に判断して動いてくれます。
このように、AIエージェントは人間のように「考えながら動く」ことができるAIなのです。すごい。
今回はAIエージェントの仕組みを用いた「アイデアの小槌の動画コンテンツ作成完全自動化」を目指しています。しかし現状では上記の説明のように、何らかのAIに「アイデアの小槌の動画を作って」と指示して、それだけで全自動で作ってくれる—という、我々が独自にやっている「アイデアの小槌」まで知っているような全知全能なAIがあるわけではありません。そこで、ある程度は「アイデアの小槌AIエージェント」として、こちらで流れを作ってあげる必要があります。下の図が、今回作ったサムライアプス初!のAIエージェントとなります。
__start__
からすべてが始まります。四角の それぞれはノードと呼んでいて、それぞれAIエージェントの中で何らかの機能を持ちますが、すべてがAIらしい振る舞いをするわけではなくて、単なる従来どおりのプログラムだったりもします。 supervisor
と書かれているノードが親分です。 supervisor
はChatGPTとつながっていて、それぞれのタイミングでChatGPTが判断して、各ノードに指示を出していきます。
まず、 generate_ideas
というノードに「アイデアを10個作って」と指示します。 generate_ideas
は、最近話題のキーワードを取得したうえで、先に紹介した「アイデアの小槌」と同じ方式でアイデアを10個作って、 supervisor
に返します。 generate_ideas
もまたChatGPTにつながっていて、AIでアイデアを作っています。
アイデアを受けた supervisor
は、 アイデアを技術的な観点で評価する technical_manager
と 、ビジネス的な観点で評価するmarketing_director
に交互に意見を求めます。これらもChatGPTにつながっています。それぞれ、「技術的に可能かどうか」「ビジネス的に優れているかどうか」を助言します。意見が出揃ったところで、 supervisor
は意見を参考にして最終的に2つのアイデアを選びます。
その後、 supervisor
は image_generator
, movie_generator
, voice_synthesis
movie_synthesis
とたどります。
image_generator
: 選ばれたアイデアから英語のプロンプトにして、stability aiのAPIに投げて画像を各アイデアにつき2枚作成します。計4枚を作成します。movie_generator
: image_generator
で作られたそれぞれの画像から、runway APIを使って10秒の動画を作成します。voice_synthesis
: アイデアをそれぞれ100文字程度に要約して、ElevenLabsを用いて音声合成します。movie_synthesis
: 生成された動画、音声をPythonで合成します。字幕や最後のサムライアプスロゴもつけます。これら4つについては、生成AIのサービスは使っていますが、ノード自体はサービスのAPIを呼んでいたり、Pythonで動画を編集したりしているだけです。ChatGPTが指示を出したりするような動きではなく、順番に動いているだけです。
これらがすべて完了したら __end__
ノードに到達し、AIエージェントの活動は停止します。
なお、今回はAIエージェントを作るためのPythonライブラリであるLangGraphというライブラリを使って構築しました。コードとしては非常に長いコードになっていますが、今回は省略します。。。