LLM による意味理解:システムアーキテクチャ設計
概要
LLM モジュールは FastAPI をベースとした大規模言語モデルの対話サービスで、Function Calling と MCP を統合したインテリジェント対話システムをサポートします。システムはモジュール設計を採用しており、音楽再生、ロボットアーム制御、パン・チルト制御、視覚認識など、さまざまな外部ツールの統合に対応しています。
️ システムアーキテクチャ
全体アーキテクチャ図
+-------------------+
| Web浏览器前端 |
+-------------------+
|
HTTP/WebSocket
|
+-------------------+
| FastAPI服务器 |
+-------------------+
|
+-----+-----+
| |
| LLM核心 |<---> 配置管理
| 服务模块 |
+-----------+
|
+----+----+
| |
| 对话管理 | Function Calling
| 器 | 工具集成
+----+----+
|
+-----+-----+
| |
| MCP管理器 | 火山引擎API
| |
+-----------+
コアコンポーネント
1. メインアプリケーション(main.py)
- FastAPI アプリケーションのエントリポイント:HTTP および WebSocket インターフェースを提供します
- ライフサイクル管理:アプリケーションリソースの初期化とクリーンアップを行います
- ルーティング管理:各種 API エンドポイントを処理します
- WebSocket 接続管理:リアルタイム通信の接続を管理します
- ミドルウェア設定:CORS、静的ファイルサービスなど
主な機能:
- REST API エンドポイント:
/chat,/health,/config,/tools - WebSocket エンドポイント:リアルタイム対話用の
/ws - 静的ファイルサービス:Web インターフェースのリソース
2. LLM クライアント(app/llm_client.py)
- Volcano Engine API との統合:Volcano Engine の LLM サービスに基づきます
- ストリーミング/非ストリーミング対話:2 つの対話モードをサポートします
- パラメータ設定:temperature、top_p、max_tokens などのモデルパラメータ
- エラー処理:充実した例外処理とリトライの仕組み
- 思考モード:モデルの思考プロセスの制御をサポートします
API 設定:
- エンドポイント:
https://ark.cn-beijing.volces.com/api/v3/chat/completions - モデル:
doubao-seed-1-6-250615 - Function Calling とツール呼び出しをサポート
3. 対話マネージャー(app/conversation_manager.py)
- マルチセッション管理:複数の独立した対話セッションをサポートします
- 履歴管理:対話コンテキストを自動的に保持します
- 永続化ストレージ:履歴の保存を設定可能です
- コンテキスト制御:対話の長さをインテリジェントに制御します
特徴:
- セッションの分離:各 session_id を独立して管理します
- 履歴の上限:履歴レコードの最大数を設定可能です
- メモリ管理:期限切れのセッションを自動的にクリーンアップします
4. 設定管理(config/)
- YAML 設定ファイル:
config/llm_config.yamlがメイン設定です - 環境変数のサポート:
.envファイルとシステム環境変数 - 設定クラスの定義:型安全な設定構造
- 設定の検証:起動時に設定パラメータを検証します
- ホットリロード:実行時の設定更新をサポートします
設定の階層(優先度の高い順):
- システム環境変数
- .env ファイル
- YAML 設定ファイル
- デフォルト値
5. Function Calling ツールの統合(utils/function_call/)
5.1 関数レジストリ(function_registry.py)
- 統一された登録メカニズム:
@FunctionRegistry.register_functionデコレーター - 非同期関数のサポート:同期/非同期関数を自動判別します
- 動的呼び出し:統一された関数呼び出しインターフェース
- ツールの検出:登録済みのツールを自動的に検出します
5.2 電卓ツール(calculator.py)
- 基本演算:加減乗除、べき乗、剰余
- 高度な演算:三角関数、対数、平方根、絶対値
- 安全な計算:悪意のある式の実行を防止します
- 数学定数:π や e などの数学定数をサポートします
5.3 音楽プレーヤー(music_functions.py, music_player.py)
- 再生制御:再生、一時停止、停止、シャッフル
- 音量制御:音量調整、スマート音量設定
- プレイリスト:音楽ファイルリストの管理
- 状態の照会:現在の再生状態と情報
- ファイル形式:MP3、WAV、OGG などの形式に対応
5.4 ロボットアーム制御(arm_functions.py)
- 基本動作:把持、配置、指定位置への移動
- 関節制御:各関節角度の精密な制御
- プリセット動作:初期化、リセットなどの標準動作
- 状態監視:ロボットアームの状態をリアルタイムに取得します
- 安全制御:可動範囲の制限と衝突検出
5.5 パン・チルト制御(gimbal_functions.py)
- 方向制御:水平/垂直回転
- 相対移動:現在位置を基準とした相対移動
- 絶対位置決め:精密な角度による位置決め
- リセット機能:初期位置に戻ります
- 接続管理:シリアルポートの接続と切断
5.6 視覚認識(vlm_functions.py)
- 画像解析:VLM に基づく画像内容の認識
- 物体検出:画像内の物体やシーンを識別します
- 説明の生成:画像内容を自然言語で説明します
- マルチモーダル統合:テキストと画像の理解を組み合わせる能力
6. MCP マネージャー(utils/mcp/)
- MCP プロトコルのサポート:Model Context Protocol の統合
- 外部サービスとの接続:外部の MCP サーバーに接続します
- ツールの検出:MCP が提供するツールを自動的に検出します
- 統一インターフェース:ローカルツールと MCP ツールを統一的に呼び出します
対応している MCP サービス:
- Amap(高徳地図)サービス:位置情報とナビゲーション機能
- 拡張可能なサードパーティ MCP サービスの統合
7. ハードウェア制御モジュール(utils/servo_*)
7.1 サーボ制御(servo_control/)
- シリアルポート通信:シリアルポートベースのサーボ制御プロトコル
- 角度制御:サーボ角度の精密な設定
- 速度制御:サーボの動作速度の調整
- 状態フィードバック:サーボの現在位置と状態
7.2 ロボットアームのハードウェア制御(servo_arm_control/)
- 多関節の協調:6 自由度ロボットアームの制御
- 動作計画:軌道計画と滑らかな動作
- 逆運動学:目標位置から関節角度を計算します
- 安全監視:可動範囲と速度の制限
8. フロントエンド画面(static/)
- HTML 画面:
index.htmlメイン画面 - JavaScript クライアント:
app.jsフロントエンドロジック - CSS スタイル:
style.css画面スタイル - リアルタイム通信:WebSocket クライアントの実装
- 機能デモ:デモボタンとサンプルを内蔵
データフロー
対話処理のフロー
- ユーザー入力:Web 画面または API からメッセージを送信します
- セッション管理:ConversationManager がセッションコンテキストを処理します
- LLM 呼び出し:LLMClient が Volcano Engine API を呼び出します
- ツールの特定:システムが呼び出すべきツールを自動的に特定します
- ツールの実行:FunctionRegistry を通じて該当するツールを実行します
- 結果の返却:ツールの結果を統合してユーザーに返します
Function Calling のプロセス
- ツールの登録:起動時にすべてのツールを自動登録します
- Schema の生成:ツール関数に基づいて OpenAI Function Schema を生成します
- LLM による識別:大規模モデルがユーザーの意図を識別し、ツールを選択します
- パラメータの解析:ツール呼び出しのパラメータを解析します
- ツールの実行:該当するツール関数を呼び出します
- 結果の統合:ツールの結果を対話に統合します
リアルタイム通信のプロセス
- WebSocket 接続:フロントエンドが WebSocket 接続を確立します
- メッセージの受信:サーバーがユーザーメッセージを受信します
- ストリーミング:LLM が応答内容をストリーミングします
- リアルタイムプッシュ:WebSocket を通じて内容をリアルタイムにプッシュします
- ツール呼び出し:ストリーミング処理中にツール呼び出しを処理します
- 接続管理:切断と再接続を自動的に処理します
️ 技術スタック
バックエンド技術
- Web フレームワーク:FastAPI(高性能な非同期 Web フレームワーク)
- LLM 統合:Volcano Engine API(Doubao 大規模モデルに基づく)
- 非同期処理:Python asyncio(非同期プログラミングのサポート)
- HTTP クライアント:httpx(非同期 HTTP クライアント)
- 設定管理:PyYAML、python-dotenv
- ログ:Python logging モジュール
ハードウェア制御
- シリアルポート通信:pyserial(シリアルデバイス通信)
- オーディオ処理:pygame(オーディオ再生と処理)
- GPIO 制御:Raspberry Pi などの組み込みデバイスに対応
フロントエンド技術
- HTML5:最新の Web 標準
- JavaScript ES6+:ネイティブ JavaScript、追加フレームワーク不要
- WebSocket API:リアルタイムの双方向通信
- CSS3:レスポンシブデザインとモダンなスタイル
デプロイアーキテクチャ
標準デプロイ
客户端浏览器
↓ HTTP/WebSocket
FastAPI应用服务器 (端口8002)
↓
火山引擎LLM API
↓
外部硬件设备 (串口/GPIO)
分散デプロイ
前端Web界面
↓
负载均衡器
↓
多个LLM应用实例
↓
共享配置存储
↓
外部服务集成
セキュリティ上の考慮事項
API セキュリティ
- API キー管理:機密情報を環境変数に保存します
- CORS 設定:クロスドメインリクエストのセキュリティ制御
- 入力検証:厳格なパラメータ検証とサニタイズ
ツールの安全性
- 権限制御:ツール呼び出しの権限制限
- パラメータ検証:ツールパラメータの厳格な検証
- リソース制限:リソースの乱用や超過を防止します
ハードウェアの安全性
- 可動範囲の制限:ロボットアームとパン・チルトの安全範囲
- 非常停止:ハードウェアデバイスの非常停止メカニズム
- 状態監視:機器状態のリアルタイム監視
拡張性設計
ツールの拡張
- プラグイン設計:デコレーターによる新しいツールの登録
- Schema の自動生成:関数シグネチャに基づくツール説明の自動生成
- 非同期のサポート:同期ツールと非同期ツールの両方をサポート
モデルの拡張
- マルチモデル対応:さまざまな LLM プロバイダーを設定可能
- 柔軟なパラメータ設定:さまざまなモデルパラメータの調整に対応
- 思考モード:さまざまな推論モードに対応
ハードウェアの拡張
- デバイスの抽象化:統一されたハードウェア制御インターフェース
- ドライバのモジュール化:着脱可能なハードウェアドライバ
- プロトコルへの適合:複数の通信プロトコルに対応
⚡ パフォーマンス最適化
非同期処理
- ノンブロッキング I/O:ネットワークと I/O 操作を完全に非同期化
- 同時実行の制御:同時接続数を適切に制限
- リソースプール:コネクションプーリングとリソースの再利用
キャッシュ戦略
- 設定キャッシュ:設定情報をキャッシュし、繰り返しの読み込みを回避
- ツール Schema キャッシュ:ツール説明情報のキャッシュ
- セッションキャッシュ:対話履歴のスマートなキャッシュ管理
メモリ管理
- ガベージコレクション:期限切れのセッションとキャッシュを自動的にクリーンアップ
- リソース制限:メモリ使用量の監視と制限
- 接続管理:WebSocket 接続の自動クリーンアップ
ドキュメント