🤖

HeyGen と Pipecat(OpenAI API使用) を連携させて対話可能なAIアバターを作成する

に公開

こんにちは🤗@denwaya34です。

本記事では、HeyGen と OpenAI のSpeech To Text, Text To Speech APIを連携させて、対話型アバター動画を作成する方法を紹介します😉

導入

簡単にHeyGenとPipecatの概要を説明します。

HeyGenとは

HeyGen は AI 駆動の動画生成プラットフォームです。
テキストやスクリプトを入力するだけでアバター動画を作成できます。

【HeyGen について説明してるYoutube動画】
https://www.youtube.com/watch?v=KkQoMtp7IKs

【News】
5/14 にAvatar IV という機能が発表されました。
Avatar IV は1枚の写真から表情豊かなアバター動画を作成する機能です。
※自分の音声から読み上げ音声を生成することもできます。

Pipecatとは

PipecatはDaily社が開発してるオープンソースのフレームワークです。
リアルタイム音声・マルチモーダルのAIエージェントをパイプラインベースの非同期処理モデルで実装できます。

主に以下の特徴を持ちます。

  • 「Pipeline」「FrameProcessor」「Frame」というパイプラインベースの非同期処理モデルを採用している.
  • 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
])

パイプラインのイメージ2
※公式サイトより引用
パイプラインのイメージ1
※公式サイトより引用

本題: HeyGenのアバター動画 と OpenAI TTS & STT API を連携して、対話型AIアバターを作成する

HeyGenには Interactive Avater というAIとリアルタイム会話できる機能があります。
ナレッジ機能(=特定の知識を事前に登録しておき、それに基づいた回答をしてもらう)もあり、カルタマイズ可能です。

Interactive Avater 公式サンプル

【HeyGen Interactive Avater について説明してるYoutube動画】
https://www.youtube.com/watch?v=QewpYpy32nI

ただ、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アバターを作成するできることを検証できた。

ソースコード

参考

Discussion