弁護士ドットコム株式会社 Creators’ blog

弁護士ドットコムがエンジニア・デザイナーのサービス開発事例やデザイン活動を発信する公式ブログです。

UnityとDifyで自分専用のAIエージェントを作成する

この記事は弁護士ドットコム Advent Calendar 2024の 20 日目の記事です。

こんにちは。弁護士ドットコム株式会社リーガルブレイン開発室の井出です。 今年も AI 絡みの話題が尽きない年となりましたが、皆さんは何が一番重要な話題だと思いましたでしょうか。それら数ある中で、私は AI エージェントの発展に注目しています。

そこで趣味と勉強を兼ねて Unity と Dify とその他いろいろで自分専用の AI エージェントを作成したのでその方法をお伝えします。

AI エージェントとは

そもそも AI エージェントとは何でしょうか。AWS のドキュメントでは下記のように説明しています。

人工知能 (AI) エージェントは、環境と対話し、データを収集し、そのデータを使用して自己決定タスクを実行して、事前に決められた目標を達成するためのソフトウェアプログラムです。
AWSドキュメントの説明より抜粋

aws.amazon.com

AI エージェントは古くから試行錯誤されてきた歴史があります。IRC や、最近だと Discord チャットボットなどを想像すると良いかもしれません。これが大規模言語モデルの登場で性能が大きく飛躍しており、AI エージェントあるいは AI アシスタントといった名前で実用的なサービスが登場しはじめています。

今回やりたいこと

音声で質問すると Web を検索して回答を生成し、音声で答えてくれる!

あとそれ以上のタスク処理(メールチェックや記事執筆など)を追加しやすいようにしておきたい!

アプリの概要

上記やりたいことで説明したシステムを作成するために難易度の高い箇所が二か所あります。

  1. Unity でアバターの動作と、各種サービスとの連携部分を作る
  2. AI オーケストレーションシステムを構築する
  3. 今回はいわゆる RAG システムで良いが、将来的にさまざまなタスク処理を追加できるようにしておきたい

これらを簡単にするフレームワークが存在します。

AI Tuber フレームワークの ChatdollKit github.com

AI オーケストレーションの Dify github.com

この 2 つをコアにして AI エージェントを作成します。

構成図

AI エージェント構成図
AI エージェント構成図

構成は大きく 2 つに分かれます。

  • ChatdollKit をコアとしたアバターシステム
  • Dify をコアとした AI オーケストレーションシステム

アバターシステムは下記コンポーネントを利用します。

  • Azure 音声サービス
    • ユーザーが入力した音声をテキストに変換する
  • Dify
    • テキストを解釈しタスク処理を行う
  • VOICEVOX
    • テキストを音声データに変換する

AI オーケストレーションシステムは下記コンポーネントを利用します。

  • BREAVESEARCH
    • Web 検索を行う
  • Firecrawl
    • スクレイピングを行う
  • OpenAI GPT4o-mini
    • 文章生成を行う

完成スクリーンショット

3D アバターが「何かお手伝いできることがあれば教えてください。」と話している様子が表示されている
完成スクリーンショット

必要なもの

開発環境

本記事のアプリケーションは Windows11 で作成しましたので Mac 利用者はご注意ください。 グラフィックボードは RTX3070 を使用しました。

また Unity や 3D モデリングツール、ローカルで Dify を起動する都合上、ある程度スペックがあるマシンで開発することを推奨します。

OpenAI API

openai.com

Unity Hub

docs.unity3d.com

Unity Editor のバージョン

2021.3.21f1

Docker Desktop

www.docker.com

Dify

github.com

今回は SaaS ではなくローカルにサーバーを構築します。

ChatdollKit

github.com

バージョン

0.8.6

VRoid Studio

vroid.com

VOICEVOX

voicevox.hiroshiba.jp

Azure 音声サービス

learn.microsoft.com

Brave Search API

brave.com

Firecrawl

www.firecrawl.dev

作成

各種インストール

以下のアプリケーションをインストールしてください。

  • Unity Hub
  • Docker Desktop
  • VRoid Studio
  • VOICEVOX

各種サービスの有効化

以下のサービスを有効化してください。

  • OpenAI API
  • Azure
  • BRAVESEARCH
  • Firecrawl

3D モデルアバターの作成

今回は VRoid Studio のサンプルアバターを使用します。知見のあるかたは自分の好みのアバターを作成してください。

今回は AvaterSample_A を使用しました。

サンプルアバターの画像
サンプルアバターの画像

このアバターを VRM 0.0 の形式で出力しておいてください(ChatdollKit で使用している UniVRM の対応バージョンの関係です)。

Unity プロジェクトの作成

Unity Editor のインストール

下記手順に従って Unity Editor をインストールしてください。

docs.unity3d.com

※ インストールするエディタのバージョンは 2021.3.21f1 です

Unity プロジェクトの作成

Unity Editor をインストールしたらプロジェクトを作成してください。通常の 3D プロジェクトを作成すれば大丈夫です。 SRP プロジェクトテンプレートは使用しないでください。

⚠️注意: UnityのSRP (Scriptable Render Pipeline) プロジェクトテンプレートは使用しないでください。ChatdollKitが使用するUniVRMがSRPをサポートしていません。 ChatdollKit の README より抜粋

ChatdollKit を使用してアバターシステムを作成する

説明するとすごく長くなるので、下記 ChatdollKit のドキュメントを参考にしていったん全部作成してください。

github.com

※ この記事で使用している ChatdollKit のバージョンは 0.8.6 です

手順通りに作成した場合、下記が必要なるので準備してください。

  • OpenAI API の API Key
  • VOICEVOX の URL
    • 特に設定をいじらずに起動した場合は下記になると思います。詳細は VOICEVOX のドキュメントを参照してください
    • http://localhost:50021
  • Azure 音声サービスの API Key とリージョン
    • 後述します

すべて完了したら実行して動作を確認してください。

VOICEVOX の音声の種類

VOICEVOX の音声の種類が表示されている。四国めたん、ずんだもん、春日部つむぎ、など複数種類がある
VOICEVOX の音声の種類

非常にたくさんのボイスに対応しているので、お好きなキャラクターボイスを選択してください。

Azure 音声サービス準備

Azure 音声サービスとは

音声サービスでは、音声リソースを使用して、音声テキスト変換とテキスト読み上げの機能が提供されます。 音声を高い精度でテキストに文字起こしし、自然に聞こえるテキスト読み上げ音声を生成し、音声を翻訳し、会話中に話者認識を使用することができます。 Azure ドキュメントより抜粋

learn.microsoft.com

今回はリアルタイム音声テキスト変換の機能を利用します。

API Key とリージョンをコピー

API Key とリージョンの項目の画像
API Key とリージョン

リソースを作成したら API Key とリージョンの情報をコピーしておいてください。ChatdollKit の Azure Speech Listener コンポーネントで使用します。

Dify 構築

デプロイ

ローカル環境に構築します。Docker Compose で簡単にデプロイ可能です。下記ドキュメントを参考にして構築してください。

docs.dify.ai

チュートリアル

やりたいことは下記チュートリアルに似ているので、一度体験しておくことをお勧めします。

docs.dify.ai

ワークフロー構築

Dify ワークフローの画像
Dify ワークフロー

上記画像のワークフローを構築します。簡単に説明すると下記の手順になります。

  1. 入力された自然文からキーワード検索向けに文章を整形する
  2. Brave Search API を利用して Web 検索する
  3. 返ってきたデータのリンクを Firecrawl を使ってコンテンツを抜き出す
  4. コンテンツの内容から応答文を生成する

LLM は GPT4o-mini を使用しています。

また Brave Search の前後に挟まっているコードは、Brave Search 用の固定パラメータの設定と、出力データの整形を Python で記述しています。

入力された自然分からキーワード検索向けに文章を整形するプロンプト
入力文からキーワード検索クエリを作成してください

## 例
入力: 闇バイトで前金を受け取ったときに、前金を返却する必要はあるか
出力: 闇バイト 前金 返却
Brave Search API の前処理コード
def main(arg1: str) -> dict:
    return {
        "query": arg1,
        "count": 2
    }
Brave Search API の後処理コード
import json
def main(arg1: str) -> dict:
    objs = json.loads(arg1)
    links = []
    for obj in objs:
        links.append(obj["link"])

    return {
        "links": links,
        "link": links[0]
    }

API Key とエンドポイントを調べておく

ChatdollKit から Dify を呼び出すために API Key とエンドポイントを確認します。

Dify の API Key とエンドポイントの設定画面
Dify の API Key とエンドポイントの設定画面

スタジオの画面から API アクセス という項目をクリックすると API Key とエンドポイントに関する情報が入手できます。 この情報をコピーしておいてください。

ChatdollKit に Dify コンポーネントを設定する

ChatdollKit のドキュメントではサンプルとして ChatGPT コンポーネントを使用していますが、ここを Dify コンポーネントに置き換えます。

Dify コンポーネントを ChatdollKit に設定する
Dify コンポーネントを ChatdollKit に設定

DifyService コンポーネントをアタッチし、右下赤枠のフィールドに Dify を構築したときにコピーした API Key とエンドポイントを設定してください。

検証

長丁場お疲れ様でした。これで完成です。

では、最近の時事ネタを質問して効果が出ているか確認します。最近の世界的なニュースの 1 つにアメリカ合衆国の大統領選挙がありますので、選挙結果を聞いて素の ChatGPT の回答と比較します。

質問内容は下記です。

2024年のアメリカの大統領選挙の結果について教えて

ChatGPT の回答

申し訳ありませんが、2024年のアメリカの大統領選挙の結果については情報がまだありません。選挙の結果は、選挙が実施され、集計が完了した後に判明します。それに関連する最新情報は、信頼できるニュースソースや公式の選挙管理機関から確認することをお勧めします。

学習した時点のデータでしか回答できないので当然ながら答えられません。

エージェントの回答

AI エージェントが回答している様子の画像
AI エージェントが回答している様子

共和党のドナルド・トランプ前大統領が勝利を収めたことが確実となっています。

Dify から選挙結果を取得しているので、ちゃんと答えることができます。賢い!

まとめ

今まで素の OpenAI API などと接続してしゃべらせる AI エージェントはありましたが、Dify というオーケストレーションツールの登場で個人でも RAG システムやタスクシステムを簡単に構築できるようになりました。

これにより企業だけでなく個人でも高度なエージェントを使えるようになり、時代が大きく変わろうとしているのを肌で感じます。さらに今後も AI オーケストレーションツールやフレームワークはさまざまな企業が出してくると予想されとても楽しみです。

また今回はお見せできませんでしたが、回答をちゃんと音声でしゃべってくれます。この体験は実際にアプリケーションを使ってみないとその感動を伝えきれません。この年末年始の休みにぜひ挑戦してみていただければと思います。