この記事は弁護士ドットコム Advent Calendar 2024の 20 日目の記事です。
こんにちは。弁護士ドットコム株式会社リーガルブレイン開発室の井出です。 今年も AI 絡みの話題が尽きない年となりましたが、皆さんは何が一番重要な話題だと思いましたでしょうか。それら数ある中で、私は AI エージェントの発展に注目しています。
そこで趣味と勉強を兼ねて Unity と Dify とその他いろいろで自分専用の AI エージェントを作成したのでその方法をお伝えします。
- AI エージェントとは
- 今回やりたいこと
- アプリの概要
- 必要なもの
- 作成
- 検証
- まとめ
AI エージェントとは
そもそも AI エージェントとは何でしょうか。AWS のドキュメントでは下記のように説明しています。
人工知能 (AI) エージェントは、環境と対話し、データを収集し、そのデータを使用して自己決定タスクを実行して、事前に決められた目標を達成するためのソフトウェアプログラムです。
AWSドキュメントの説明より抜粋
AI エージェントは古くから試行錯誤されてきた歴史があります。IRC や、最近だと Discord チャットボットなどを想像すると良いかもしれません。これが大規模言語モデルの登場で性能が大きく飛躍しており、AI エージェントあるいは AI アシスタントといった名前で実用的なサービスが登場しはじめています。
今回やりたいこと
音声で質問すると Web を検索して回答を生成し、音声で答えてくれる!
あとそれ以上のタスク処理(メールチェックや記事執筆など)を追加しやすいようにしておきたい!
アプリの概要
上記やりたいことで説明したシステムを作成するために難易度の高い箇所が二か所あります。
- Unity でアバターの動作と、各種サービスとの連携部分を作る
- AI オーケストレーションシステムを構築する
- 今回はいわゆる RAG システムで良いが、将来的にさまざまなタスク処理を追加できるようにしておきたい
これらを簡単にするフレームワークが存在します。
AI Tuber フレームワークの ChatdollKit github.com
AI オーケストレーションの Dify github.com
この 2 つをコアにして AI エージェントを作成します。
構成図
構成は大きく 2 つに分かれます。
- ChatdollKit をコアとしたアバターシステム
- Dify をコアとした AI オーケストレーションシステム
アバターシステムは下記コンポーネントを利用します。
- Azure 音声サービス
- ユーザーが入力した音声をテキストに変換する
- Dify
- テキストを解釈しタスク処理を行う
- VOICEVOX
- テキストを音声データに変換する
AI オーケストレーションシステムは下記コンポーネントを利用します。
- BREAVESEARCH
- Web 検索を行う
- Firecrawl
- スクレイピングを行う
- OpenAI GPT4o-mini
- 文章生成を行う
完成スクリーンショット
必要なもの
開発環境
本記事のアプリケーションは Windows11 で作成しましたので Mac 利用者はご注意ください。 グラフィックボードは RTX3070 を使用しました。
また Unity や 3D モデリングツール、ローカルで Dify を起動する都合上、ある程度スペックがあるマシンで開発することを推奨します。
OpenAI API
Unity Hub
Unity Editor のバージョン
2021.3.21f1
Docker Desktop
Dify
今回は SaaS ではなくローカルにサーバーを構築します。
ChatdollKit
バージョン
0.8.6
VRoid Studio
VOICEVOX
Azure 音声サービス
Brave Search API
Firecrawl
作成
各種インストール
以下のアプリケーションをインストールしてください。
- 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 をインストールしてください。
※ インストールするエディタのバージョンは 2021.3.21f1 です
Unity プロジェクトの作成
Unity Editor をインストールしたらプロジェクトを作成してください。通常の 3D プロジェクトを作成すれば大丈夫です。 SRP プロジェクトテンプレートは使用しないでください。
⚠️注意: UnityのSRP (Scriptable Render Pipeline) プロジェクトテンプレートは使用しないでください。ChatdollKitが使用するUniVRMがSRPをサポートしていません。 ChatdollKit の README より抜粋
ChatdollKit を使用してアバターシステムを作成する
説明するとすごく長くなるので、下記 ChatdollKit のドキュメントを参考にしていったん全部作成してください。
※ この記事で使用している ChatdollKit のバージョンは 0.8.6 です
手順通りに作成した場合、下記が必要なるので準備してください。
- OpenAI API の API Key
- VOICEVOX の URL
- 特に設定をいじらずに起動した場合は下記になると思います。詳細は VOICEVOX のドキュメントを参照してください
- http://localhost:50021
- Azure 音声サービスの API Key とリージョン
- 後述します
すべて完了したら実行して動作を確認してください。
VOICEVOX の音声の種類
非常にたくさんのボイスに対応しているので、お好きなキャラクターボイスを選択してください。
Azure 音声サービス準備
Azure 音声サービスとは
音声サービスでは、音声リソースを使用して、音声テキスト変換とテキスト読み上げの機能が提供されます。 音声を高い精度でテキストに文字起こしし、自然に聞こえるテキスト読み上げ音声を生成し、音声を翻訳し、会話中に話者認識を使用することができます。 Azure ドキュメントより抜粋
今回はリアルタイム音声テキスト変換の機能を利用します。
API Key とリージョンをコピー
リソースを作成したら API Key とリージョンの情報をコピーしておいてください。ChatdollKit の Azure Speech Listener コンポーネントで使用します。
Dify 構築
デプロイ
ローカル環境に構築します。Docker Compose で簡単にデプロイ可能です。下記ドキュメントを参考にして構築してください。
チュートリアル
やりたいことは下記チュートリアルに似ているので、一度体験しておくことをお勧めします。
ワークフロー構築
上記画像のワークフローを構築します。簡単に説明すると下記の手順になります。
- 入力された自然文からキーワード検索向けに文章を整形する
- Brave Search API を利用して Web 検索する
- 返ってきたデータのリンクを Firecrawl を使ってコンテンツを抜き出す
- コンテンツの内容から応答文を生成する
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 とエンドポイントを確認します。
スタジオの画面から API アクセス
という項目をクリックすると API Key とエンドポイントに関する情報が入手できます。
この情報をコピーしておいてください。
ChatdollKit に Dify コンポーネントを設定する
ChatdollKit のドキュメントではサンプルとして ChatGPT コンポーネントを使用していますが、ここを Dify コンポーネントに置き換えます。
DifyService
コンポーネントをアタッチし、右下赤枠のフィールドに Dify を構築したときにコピーした API Key とエンドポイントを設定してください。
検証
長丁場お疲れ様でした。これで完成です。
では、最近の時事ネタを質問して効果が出ているか確認します。最近の世界的なニュースの 1 つにアメリカ合衆国の大統領選挙がありますので、選挙結果を聞いて素の ChatGPT の回答と比較します。
質問内容は下記です。
2024年のアメリカの大統領選挙の結果について教えて
ChatGPT の回答
申し訳ありませんが、2024年のアメリカの大統領選挙の結果については情報がまだありません。選挙の結果は、選挙が実施され、集計が完了した後に判明します。それに関連する最新情報は、信頼できるニュースソースや公式の選挙管理機関から確認することをお勧めします。
学習した時点のデータでしか回答できないので当然ながら答えられません。
エージェントの回答
共和党のドナルド・トランプ前大統領が勝利を収めたことが確実となっています。
Dify から選挙結果を取得しているので、ちゃんと答えることができます。賢い!
まとめ
今まで素の OpenAI API などと接続してしゃべらせる AI エージェントはありましたが、Dify というオーケストレーションツールの登場で個人でも RAG システムやタスクシステムを簡単に構築できるようになりました。
これにより企業だけでなく個人でも高度なエージェントを使えるようになり、時代が大きく変わろうとしているのを肌で感じます。さらに今後も AI オーケストレーションツールやフレームワークはさまざまな企業が出してくると予想されとても楽しみです。
また今回はお見せできませんでしたが、回答をちゃんと音声でしゃべってくれます。この体験は実際にアプリケーションを使ってみないとその感動を伝えきれません。この年末年始の休みにぜひ挑戦してみていただければと思います。