金沢工業大学情報工学科の3D VRMアバターを活用した対話型AIエージェント・システム。RAG(Retrieval-Augmented Generation)技術とLLMを組み合わせた日本語Q&Aシステムを、リアルな3D VRMアバターによる音声合成・感情表現・リップシンクで提供する次世代対話インターフェースです。

オープンキャンパス2025での展示予定
ホームページ: https://www.aizawaminori.com/
OpenCanapasAgent2025/
├── frontend/ # React 19 + Vite フロントエンドアプリ
│ ├── src/features/ # 機能別コンポーネント
│ │ ├── VRM/ # 3D VRMアバター制御
│ │ ├── MediaPipe/ # ユーザー検出・カメラ制御
│ │ ├── ChatInterface/ # チャット・ストリーミング
│ │ ├── VoiceChat/ # 音声対話システム
│ │ ├── ControlButtons/ # 制御ボタン群
│ │ ├── ScreenManager/ # 画面管理
│ │ ├── ModelSelector/ # VRMモデル選択
│ │ ├── BackgroundSelector/ # 背景選択
│ │ └── [その他Features]/ # モバイルチャット、音声波形等
│ ├── src/services/ # API統合・感情分析
│ ├── src/locales/ # 多言語翻訳ファイル
│ └── public/Model/ # VRMモデル・アニメーション
└── backend/ # FastAPI バックエンドAPI
├── compose.yaml # Docker Compose 設定
└── fast-api/ # FastAPIアプリケーション
├── routers/ # APIエンドポイント
├── services/ # ビジネスロジック・AI統合
└── data/ # 感情分析辞書・モデル
Docker Compose Services
├── FastAPI Service (Port 8000)
│ ├── LLM Integration & RAG
│ ├── 感情分析 (spaCy + ginza + ONNX)
│ ├── API エンドポイント
│ └── 外部LLM統合
└── Aivis Speech Engine (Port 10101)
├── Text-to-Speech 合成
├── Speech-to-Text 認識
└── ストリーミング音声処理
ユーザー入力 (テキスト/音声/カメラ)
↓
[Frontend] React 19 + Three.js VRM + MediaPipe
↓ (HTTP/WebAPI)
[Backend] FastAPI
↓ (感情分析)
[spaCy + ginza] → [ExpressionManager] → [VRM表情制御]
↓ (LLM API)
[External LLM] → [ストリーミング応答]
↓ (TTS)
[Aivis Engine] → [AudioMutexManager] → [音声合成 + リップシンク]
↑
[MediaPipe] → [ユーザー検出] → [VRMリアクション]

| ツール | バージョン | 備考 |
|---|---|---|
| Node.js | ≥ 18.0 | pnpm 8.0+ 推奨 |
| pnpm | ≥ 8.0 | npm i -g pnpm で導入 |
| Docker | ≥ 20.10 | Compose v2 必須 |
| Docker Compose | v2.0+ | docker compose コマンド |
| GPU Driver (任意) | CUDA 12+ | GPU版使用時のみ必要 |
Tip: GPU非搭載環境でも
cpu-latestイメージで動作するが、音声生成速度がやや低下
git clone https://github.com/Yamamoto1012/OpenCanpasAgent2025.git
cd OpenCanapasAgent2025
cd backend
docker compose up -d
cd ../frontend
pnpm install
pnpm dev
backend/.env ファイルを作成:
# LLM統合設定
DIFY_API_URL=your_llm_api_url
DIFY_API_KEY=your_api_key
DIFY_WORKFLOW_ID=your_workflow_id
DIFY_VOICE_WORKFLOW_ID=your_voice_workflow_id
# ストリーミング設定
ENABLE_STREAMING=true
STREAM_CHUNK_SIZE=1024
STREAM_TIMEOUT=60.0
VERIFY_SSL=false
# Aivis Engine設定
AIVIS_ENGINE_URL=http://aivis:10101
# 1. NVIDIA Docker Toolkit インストール (Ubuntu/CentOS)
# 2. compose.yaml のイメージタグ変更
cd backend
sed -i 's/cpu-latest/nvidia-latest/g' compose.yaml
# 3. GPU版で再起動
docker compose down
docker compose up -d --build
# フロントエンド開発環境
cd frontend
pnpm install
pnpm setup-hooks # Git hooks セットアップ
# バックエンド開発環境(ローカル)
cd backend/fast-api
pip install -r requirements.txt
cd frontend
# 開発・ビルド
pnpm dev # 開発サーバー起動
pnpm build # 本番ビルド
pnpm preview # ビルド結果プレビュー
pnpm test # テスト実行
pnpm test --watch # テスト監視モード
# コード品質(Biome + ESLint)
pnpm check:write # Biome lint + format 自動修正
pnpm lint # ESLint チェック専用
pnpm format:write # Biome フォーマット専用
# Git フック管理
pnpm setup-hooks # Lefthook Git hooks インストール
pnpm prepare # 自動フック設定(install時)
cd backend
# サービス管理
docker compose up -d # サービス起動
docker compose down # サービス停止
docker compose logs -f # ログ監視
docker compose build # イメージ再ビルド
# 開発・デバッグ
docker compose exec fastapi bash # コンテナ内シェル
docker compose exec fastapi pytest # テスト実行
# 全体ビルド・テスト
cd frontend && pnpm test && cd ../backend
docker compose exec fastapi pytest tests/
# ヘルスチェック
curl http://localhost:8000/health
curl http://localhost:10101/version
frontend/src/
├── features/ # 機能別コンポーネント(Container/View パターン)
│ ├── VRM/ # VRMアバター制御
│ │ ├── VRMExpression/ # ExpressionManager - 表情競合防止
│ │ ├── LipSync/ # リアルタイムリップシンク
│ │ ├── VRMWrapper/ # VRM統合管理
│ │ └── hooks/ # VRM関連フック
│ ├── MediaPipe/ # ユーザー検出・カメラ制御
│ │ ├── hooks/ # 検出フック(顔・手・ポーズ)
│ │ ├── services/ # 検出サービス群
│ │ ├── components/ # プライバシー設定・検出状況
│ │ ├── utils/ # 品質管理・スケジューラー
│ │ └── store/ # 検出状態管理
│ ├── ChatInterface/ # テキストチャット・ストリーミング
│ ├── VoiceChat/ # 音声対話・AudioMutex
│ ├── ControlButtons/ # アプリ制御ボタン群
│ ├── ScreenManager/ # 画面状態管理
│ ├── ModelSelector/ # VRMモデル選択UI
│ ├── BackgroundSelector/ # 背景選択UI
│ ├── VoiceWaveform/ # 音声波形表示
│ ├── SimpleMobileChat/ # モバイル最適化チャット
│ ├── CategoryNavigator/ # カテゴリナビゲーション
│ ├── LanguageSelector/ # 言語切り替え
│ ├── SearchResult/ # 検索結果表示
│ ├── IconButton/ # 共通アイコンボタン
│ ├── BottomNavigation/ # ボトムナビゲーション
│ ├── ActionPromt/ # アクションプロンプト
│ └── ThinkingIndicator/ # 思考インジケーター
├── services/ # API統合
│ ├── llmService.ts # LLM API統合・ストリーミング
│ └── sentimentService.ts # 感情分析API
├── store/ # Jotai グローバル状態管理
├── hooks/ # 汎用カスタムフック
├── components/ui/ # shadcn/ui コンポーネント
├── locales/ # 多言語翻訳(機能別ネームスペース)
│ ├── ja/ # 日本語
│ └── en/ # 英語
└── lib/ # ユーティリティ・設定
backend/fast-api/
├── routers/ # FastAPI ルーター
│ ├── llm.py # LLM統合エンドポイント
│ ├── sentiment.py # 感情分析エンドポイント
│ ├── speech.py # 音声処理エンドポイント
│ └── health.py # ヘルスチェック
├── services/ # ビジネスロジック
│ ├── sentiment/ # 感情分析サービス
│ │ ├── analyzer.py # 感情分析エンジン
│ │ ├── hybrid_analyzer.py # ハイブリッド解析
│ │ ├── rule_based_analyzer.py # ルールベース
│ │ ├── onnx_analyzer.py # ONNX ML解析
│ │ └── models/ # 学習済みモデル
│ ├── speech/ # 音声処理
│ └── engine/ # エンジン統合
├── data/ # データファイル
│ └── sentiment_dictionaries/ # 感情辞書
└── tests/ # テストファイル
| Method | Endpoint | 説明 |
|---|---|---|
| GET | /health | サービス稼働確認 |
| POST | /api/llm/query | テキスト質問処理 |
| POST | /api/llm/voice_mode_answer | 音声質問処理 |
| POST | /sentiment/analyze | 感情分析 |
| POST | /speech/synthesize | 音声合成 |
# テキスト質問
curl -X POST http://localhost:8000/api/llm/query \
-H "Content-Type: application/json" \
-d '{
"query": "情報工学科について教えて",
"context": "",
"language": "ja"
}'
# 感情分析
curl -X POST http://localhost:8000/sentiment/analyze \
-H "Content-Type: application/json" \
-d '{
"text": "とても嬉しいです",
"method": "hybrid"
}'
バックエンドポート変更(8000 → 8001):
backend/compose.yaml の fastapi ports を "8001:8000" に変更backend/compose.yaml の aivis イメージを nvidia-latest に変更docker compose up -d --build で再起動検出精度とパフォーマンスの調整:
src/features/MediaPipe/store/detectionAtoms.ts で閾値調整usePerformanceOptimization フックでフレームレート制御frontend/src/locales/ に新言語ディレクトリ作成lib/i18n.ts に言語設定追加# サービス状態確認
docker compose ps
# ログ確認
docker compose logs fastapi
docker compose logs aivis
# ポート競合確認
netstat -tulpn | grep -E ':(8000|10101|5173)'
public/Model/ パス確認・VRMファイル整合性curl http://localhost:10101/version で疎通確認# バックエンド疎通確認
curl http://localhost:8000/health
# CORS エラー確認
ブラウザ DevTools → Network タブで詳細確認
# 感情分析エラー
docker compose exec fastapi python -c "import spacy; spacy.load('ja_ginza_electra')"
# MediaPipe WebGL サポート確認
# ブラウザで chrome://gpu/ にアクセスしてWebGL対応確認
# カメラアクセス確認
# ブラウザ設定 → プライバシーとセキュリティ → カメラ → 許可確認
関連リンク:
金沢工業大学情報工学科の3D VRMアバターを活用した対話型AIエージェント・システム。RAG(Retrieval-Augmented Generation)技術とLLMを組み合わせた日本語Q&Aシステムを、リアルな3D VRMアバターによる音声合成・感情表現・リップシンクで提供する次世代対話インターフェースです。

オープンキャンパス2025での展示予定
ホームページ: https://www.aizawaminori.com/
OpenCanapasAgent2025/
├── frontend/ # React 19 + Vite フロントエンドアプリ
│ ├── src/features/ # 機能別コンポーネント
│ │ ├── VRM/ # 3D VRMアバター制御
│ │ ├── MediaPipe/ # ユーザー検出・カメラ制御
│ │ ├── ChatInterface/ # チャット・ストリーミング
│ │ ├── VoiceChat/ # 音声対話システム
│ │ ├── ControlButtons/ # 制御ボタン群
│ │ ├── ScreenManager/ # 画面管理
│ │ ├── ModelSelector/ # VRMモデル選択
│ │ ├── BackgroundSelector/ # 背景選択
│ │ └── [その他Features]/ # モバイルチャット、音声波形等
│ ├── src/services/ # API統合・感情分析
│ ├── src/locales/ # 多言語翻訳ファイル
│ └── public/Model/ # VRMモデル・アニメーション
└── backend/ # FastAPI バックエンドAPI
├── compose.yaml # Docker Compose 設定
└── fast-api/ # FastAPIアプリケーション
├── routers/ # APIエンドポイント
├── services/ # ビジネスロジック・AI統合
└── data/ # 感情分析辞書・モデル
Docker Compose Services
├── FastAPI Service (Port 8000)
│ ├── LLM Integration & RAG
│ ├── 感情分析 (spaCy + ginza + ONNX)
│ ├── API エンドポイント
│ └── 外部LLM統合
└── Aivis Speech Engine (Port 10101)
├── Text-to-Speech 合成
├── Speech-to-Text 認識
└── ストリーミング音声処理
ユーザー入力 (テキスト/音声/カメラ)
↓
[Frontend] React 19 + Three.js VRM + MediaPipe
↓ (HTTP/WebAPI)
[Backend] FastAPI
↓ (感情分析)
[spaCy + ginza] → [ExpressionManager] → [VRM表情制御]
↓ (LLM API)
[External LLM] → [ストリーミング応答]
↓ (TTS)
[Aivis Engine] → [AudioMutexManager] → [音声合成 + リップシンク]
↑
[MediaPipe] → [ユーザー検出] → [VRMリアクション]

| ツール | バージョン | 備考 |
|---|---|---|
| Node.js | ≥ 18.0 | pnpm 8.0+ 推奨 |
| pnpm | ≥ 8.0 | npm i -g pnpm で導入 |
| Docker | ≥ 20.10 | Compose v2 必須 |
| Docker Compose | v2.0+ | docker compose コマンド |
| GPU Driver (任意) | CUDA 12+ | GPU版使用時のみ必要 |
Tip: GPU非搭載環境でも
cpu-latestイメージで動作するが、音声生成速度がやや低下
git clone https://github.com/Yamamoto1012/OpenCanpasAgent2025.git
cd OpenCanapasAgent2025
cd backend
docker compose up -d
cd ../frontend
pnpm install
pnpm dev
backend/.env ファイルを作成:
# LLM統合設定
DIFY_API_URL=your_llm_api_url
DIFY_API_KEY=your_api_key
DIFY_WORKFLOW_ID=your_workflow_id
DIFY_VOICE_WORKFLOW_ID=your_voice_workflow_id
# ストリーミング設定
ENABLE_STREAMING=true
STREAM_CHUNK_SIZE=1024
STREAM_TIMEOUT=60.0
VERIFY_SSL=false
# Aivis Engine設定
AIVIS_ENGINE_URL=http://aivis:10101
# 1. NVIDIA Docker Toolkit インストール (Ubuntu/CentOS)
# 2. compose.yaml のイメージタグ変更
cd backend
sed -i 's/cpu-latest/nvidia-latest/g' compose.yaml
# 3. GPU版で再起動
docker compose down
docker compose up -d --build
# フロントエンド開発環境
cd frontend
pnpm install
pnpm setup-hooks # Git hooks セットアップ
# バックエンド開発環境(ローカル)
cd backend/fast-api
pip install -r requirements.txt
cd frontend
# 開発・ビルド
pnpm dev # 開発サーバー起動
pnpm build # 本番ビルド
pnpm preview # ビルド結果プレビュー
pnpm test # テスト実行
pnpm test --watch # テスト監視モード
# コード品質(Biome + ESLint)
pnpm check:write # Biome lint + format 自動修正
pnpm lint # ESLint チェック専用
pnpm format:write # Biome フォーマット専用
# Git フック管理
pnpm setup-hooks # Lefthook Git hooks インストール
pnpm prepare # 自動フック設定(install時)
cd backend
# サービス管理
docker compose up -d # サービス起動
docker compose down # サービス停止
docker compose logs -f # ログ監視
docker compose build # イメージ再ビルド
# 開発・デバッグ
docker compose exec fastapi bash # コンテナ内シェル
docker compose exec fastapi pytest # テスト実行
# 全体ビルド・テスト
cd frontend && pnpm test && cd ../backend
docker compose exec fastapi pytest tests/
# ヘルスチェック
curl http://localhost:8000/health
curl http://localhost:10101/version
frontend/src/
├── features/ # 機能別コンポーネント(Container/View パターン)
│ ├── VRM/ # VRMアバター制御
│ │ ├── VRMExpression/ # ExpressionManager - 表情競合防止
│ │ ├── LipSync/ # リアルタイムリップシンク
│ │ ├── VRMWrapper/ # VRM統合管理
│ │ └── hooks/ # VRM関連フック
│ ├── MediaPipe/ # ユーザー検出・カメラ制御
│ │ ├── hooks/ # 検出フック(顔・手・ポーズ)
│ │ ├── services/ # 検出サービス群
│ │ ├── components/ # プライバシー設定・検出状況
│ │ ├── utils/ # 品質管理・スケジューラー
│ │ └── store/ # 検出状態管理
│ ├── ChatInterface/ # テキストチャット・ストリーミング
│ ├── VoiceChat/ # 音声対話・AudioMutex
│ ├── ControlButtons/ # アプリ制御ボタン群
│ ├── ScreenManager/ # 画面状態管理
│ ├── ModelSelector/ # VRMモデル選択UI
│ ├── BackgroundSelector/ # 背景選択UI
│ ├── VoiceWaveform/ # 音声波形表示
│ ├── SimpleMobileChat/ # モバイル最適化チャット
│ ├── CategoryNavigator/ # カテゴリナビゲーション
│ ├── LanguageSelector/ # 言語切り替え
│ ├── SearchResult/ # 検索結果表示
│ ├── IconButton/ # 共通アイコンボタン
│ ├── BottomNavigation/ # ボトムナビゲーション
│ ├── ActionPromt/ # アクションプロンプト
│ └── ThinkingIndicator/ # 思考インジケーター
├── services/ # API統合
│ ├── llmService.ts # LLM API統合・ストリーミング
│ └── sentimentService.ts # 感情分析API
├── store/ # Jotai グローバル状態管理
├── hooks/ # 汎用カスタムフック
├── components/ui/ # shadcn/ui コンポーネント
├── locales/ # 多言語翻訳(機能別ネームスペース)
│ ├── ja/ # 日本語
│ └── en/ # 英語
└── lib/ # ユーティリティ・設定
backend/fast-api/
├── routers/ # FastAPI ルーター
│ ├── llm.py # LLM統合エンドポイント
│ ├── sentiment.py # 感情分析エンドポイント
│ ├── speech.py # 音声処理エンドポイント
│ └── health.py # ヘルスチェック
├── services/ # ビジネスロジック
│ ├── sentiment/ # 感情分析サービス
│ │ ├── analyzer.py # 感情分析エンジン
│ │ ├── hybrid_analyzer.py # ハイブリッド解析
│ │ ├── rule_based_analyzer.py # ルールベース
│ │ ├── onnx_analyzer.py # ONNX ML解析
│ │ └── models/ # 学習済みモデル
│ ├── speech/ # 音声処理
│ └── engine/ # エンジン統合
├── data/ # データファイル
│ └── sentiment_dictionaries/ # 感情辞書
└── tests/ # テストファイル
| Method | Endpoint | 説明 |
|---|---|---|
| GET | /health | サービス稼働確認 |
| POST | /api/llm/query | テキスト質問処理 |
| POST | /api/llm/voice_mode_answer | 音声質問処理 |
| POST | /sentiment/analyze | 感情分析 |
| POST | /speech/synthesize | 音声合成 |
# テキスト質問
curl -X POST http://localhost:8000/api/llm/query \
-H "Content-Type: application/json" \
-d '{
"query": "情報工学科について教えて",
"context": "",
"language": "ja"
}'
# 感情分析
curl -X POST http://localhost:8000/sentiment/analyze \
-H "Content-Type: application/json" \
-d '{
"text": "とても嬉しいです",
"method": "hybrid"
}'
バックエンドポート変更(8000 → 8001):
backend/compose.yaml の fastapi ports を "8001:8000" に変更backend/compose.yaml の aivis イメージを nvidia-latest に変更docker compose up -d --build で再起動検出精度とパフォーマンスの調整:
src/features/MediaPipe/store/detectionAtoms.ts で閾値調整usePerformanceOptimization フックでフレームレート制御frontend/src/locales/ に新言語ディレクトリ作成lib/i18n.ts に言語設定追加# サービス状態確認
docker compose ps
# ログ確認
docker compose logs fastapi
docker compose logs aivis
# ポート競合確認
netstat -tulpn | grep -E ':(8000|10101|5173)'
public/Model/ パス確認・VRMファイル整合性curl http://localhost:10101/version で疎通確認# バックエンド疎通確認
curl http://localhost:8000/health
# CORS エラー確認
ブラウザ DevTools → Network タブで詳細確認
# 感情分析エラー
docker compose exec fastapi python -c "import spacy; spacy.load('ja_ginza_electra')"
# MediaPipe WebGL サポート確認
# ブラウザで chrome://gpu/ にアクセスしてWebGL対応確認
# カメラアクセス確認
# ブラウザ設定 → プライバシーとセキュリティ → カメラ → 許可確認
関連リンク: