HeyGen と Pipecat(OpenAI API使用) を連携させて対話可能なAIアバターを作成する
こんにちは🤗@denwaya34です。
本記事では、HeyGen と OpenAI のSpeech To Text, Text To Speech APIを連携させて、対話型アバター動画を作成する方法を紹介します😉
導入
簡単にHeyGenとPipecatの概要を説明します。
HeyGenとは
HeyGen は AI 駆動の動画生成プラットフォームです。
テキストやスクリプトを入力するだけでアバター動画を作成できます。
【HeyGen について説明してるYoutube動画】
【News】
5/14 にAvatar IV という機能が発表されました。
Avatar IV は1枚の写真から表情豊かなアバター動画を作成する機能です。
※自分の音声から読み上げ音声を生成することもできます。
Pipecatとは
PipecatはDaily社が開発してるオープンソースのフレームワークです。
リアルタイム音声・マルチモーダルのAIエージェントをパイプラインベースの非同期処理モデルで実装できます。
主に以下の特徴を持ちます。
- 「Pipeline」「FrameProcessor」「Frame」というパイプラインベースの非同期処理モデルを採用している.
- 詳細はCore Conceptsにある
- DailyのグローバルWebRTCインフラ(DailyTransport)や音声のWebSocket伝送、PSTN/SIPダイヤルインなど多彩なトランスポートレイヤーをサポートしている.
- PythonやJavaScript、React、Android、iOS向けのクライアントSDKが提供されている
コアコンセプト
パイプラインは以下のようなコードで定義する。
Pipelineでプロセッサー同士を接続し、フレームが流れることで処理が行われるイメージ。
# Simple linear pipeline
pipeline = Pipeline([
transport.input() # Speech -> Audio
stt, # Audio -> Text
llm, # Text -> Response
tts, # Response -> Audio
transport.output() # Audio -> Playback
])
※公式サイトより引用
※公式サイトより引用
本題: HeyGenのアバター動画 と OpenAI TTS & STT API を連携して、対話型AIアバターを作成する
HeyGenには Interactive Avater というAIとリアルタイム会話できる機能があります。
ナレッジ機能(=特定の知識を事前に登録しておき、それに基づいた回答をしてもらう)もあり、カルタマイズ可能です。
【HeyGen Interactive Avater について説明してるYoutube動画】
ただ、HeyGenが提供している以外の音声合成API(Text To Speech や Speech To Text)を使いたい場合
やプログラマブルな音声AIエージェントを作成したい場合
はコーディングが必要です。
そこで、Pipecatを使って HeyGenのアバター と OpenAIのTTS & TTS API を連携させて、対話型AIアバターを作成します。
実装方法
HeyGen と Pipecat の連携方法とサンプルコードはHeyGenの公式ドキュメントのここに載っています。
サンプルコードの構成は以下のようになっています。
実装する部分は図のFrontEnd(Next.jsアプリ)とBackEnd(Pipecat)の部分です。
BackEndの公式サンプルコードは
- TSS: ElevenLabs
- LLM: OpenAI
- STT: Deepgram
という構成になっていました。
- OpenAI のTTS & STT APIを使いたい
- 次段階でOpenAI のRealtime APIを使えるようにできるか検証したい
という事情があったので、サンプルコードを元にOpenAIのTTS & STTを使うように移植しました。
実際のコードは heygen-openai-pipecat-demo に載せています。
FrontEndは公式のサンプルをそのまま使いました。
FrontEndのサンプルコードのリポジトリはInteractiveAvatarNextJSDemoですが、
一点注意事項があって、サンプルコードはrealtime-alpha-demo
のタグが付いているものを使ってください。
この二つを同時に起動し、ブラウザでhttp://localhost:3000
にアクセスすると、
HeyGenのアバターで、OpenAI TTS & STTの音声で会話できる動作
が確認できます。
ソースコード解説
LLM部分
ユーザ音声をOpenAI STT APIでテキストに変換した結果を OpenAI API(gpt-4o-mini)に渡しています。
OpenAI APIの設定部分はPipecatの以下のコード部分で実装しています
llm = OpenAILLMService(api_key=openai_api_key, model="gpt-4o-mini")
messages = [
{
"role": "system",
"content": """
#命令書:
あなたの属性は以下です。
- 性別: 男性
- 年齢: 30歳
- 職業: 漫才師
- 趣味: 映画鑑賞
- 口調: ルー大柴のように日本語と英語を混ぜて話す
- 性格: 明るくてお調子者
- 特技: 料理
以下の制約条件もとに、最高の結果を出力してください。
#制約条件:
- ユーザの問いに対して、回答する。
""",
},
]
PipecatのPipeline部分
下記のように実装しています.
入力に対して STT -> LLM -> TTS の順番で処理を行うようになっています.
pipeline = Pipeline(
[
transport.input(), # Websocket input from client
stt, # Speech-To-Text
context_aggregator.user(),
llm, # LLM(OpenAI API)
tts, # Text-To-Speech
heygen_video_service, # HeyGen 連携部分
output_transport,
context_aggregator.assistant(),
]
)
task = PipelineTask(
pipeline
)
実際に動いてる様子のスクショ
まとめ
- HeyGen Interactive Avater と Pipecatを連携させて、OpenAI による対話型AIアバターを作成するできることを検証できた。
ソースコード
- サーバサイド(pipecat)側
- フロントエンド
Discussion