115 lines
4.1 KiB
Markdown
115 lines
4.1 KiB
Markdown
# ai.shell Architecture
|
||
|
||
## 全体構成
|
||
|
||
```
|
||
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
|
||
│ User Input │ │ aishell CLI │ │ MCP Server │
|
||
│ (Terminal) │────▶│ (Rust) │────▶│ (Python) │
|
||
└─────────────────┘ └─────────────────┘ └─────────────────┘
|
||
│ │
|
||
│ ▼
|
||
│ ┌─────────────────┐
|
||
│ │ Local LLM │
|
||
│ │ (Ollama) │
|
||
│ └─────────────────┘
|
||
│ │
|
||
▼ ▼
|
||
┌─────────────────┐ ┌─────────────────┐
|
||
│ File System │ │ Code Analysis │
|
||
│ Operations │ │ & Generation │
|
||
└─────────────────┘ └─────────────────┘
|
||
```
|
||
|
||
## MCP Serverの主要な役割
|
||
|
||
### 1. **LLMとの通信ハブ**
|
||
- ローカルLLM(Ollama)との通信を管理
|
||
- プロンプトの最適化と前処理
|
||
- レスポンスの後処理とフォーマット
|
||
|
||
### 2. **ツール実行エンジン**
|
||
MCP Serverは以下のツール(関数)を提供:
|
||
|
||
```python
|
||
# 既存の実装から
|
||
- code_with_local_llm() # コード生成
|
||
- read_file_with_analysis() # ファイル読み込み&分析
|
||
- write_code_to_file() # コード書き込み
|
||
- debug_with_llm() # デバッグ支援
|
||
- explain_code() # コード説明
|
||
- execute_command() # シェルコマンド実行
|
||
- git_operations() # Git操作
|
||
```
|
||
|
||
### 3. **コンテキスト管理**
|
||
- プロジェクトのコンテキスト保持
|
||
- 会話履歴の管理
|
||
- ファイルの依存関係追跡
|
||
|
||
### 4. **セキュリティレイヤー**
|
||
- コマンドのサンドボックス実行
|
||
- ファイルアクセス権限の管理
|
||
- 危険な操作の検証
|
||
|
||
## Rust CLI ↔ MCP Server 通信
|
||
|
||
### 通信プロトコル
|
||
```rust
|
||
// Rust側のリクエスト例
|
||
struct MCPRequest {
|
||
method: String, // "code_with_local_llm"
|
||
params: Value, // {"prompt": "...", "language": "rust"}
|
||
context: ProjectContext,
|
||
}
|
||
|
||
// MCP Server側のレスポンス
|
||
{
|
||
"result": {
|
||
"code": "fn main() { ... }",
|
||
"explanation": "This creates a simple HTTP server...",
|
||
"files_created": ["src/server.rs"]
|
||
},
|
||
"error": null
|
||
}
|
||
```
|
||
|
||
### 実装の流れ
|
||
|
||
1. **ユーザー入力(Rust CLI)**
|
||
```
|
||
ai> create a web server in rust
|
||
```
|
||
|
||
2. **リクエスト構築(Rust)**
|
||
- プロンプト解析
|
||
- コンテキスト収集(現在のディレクトリ、プロジェクトタイプなど)
|
||
|
||
3. **MCP Server処理(Python)**
|
||
- ツール選択(code_with_local_llm)
|
||
- LLMへのプロンプト送信
|
||
- コード生成
|
||
- ファイル操作
|
||
|
||
4. **レスポンス処理(Rust)**
|
||
- 結果の表示
|
||
- ファイル変更の確認
|
||
- 次のアクションの提案
|
||
|
||
## なぜMCP Serverが必要か
|
||
|
||
### 1. **言語の分離**
|
||
- Python: AI/MLエコシステムが充実
|
||
- Rust: 高速で安全なCLI実装
|
||
|
||
### 2. **拡張性**
|
||
- 新しいLLMの追加が容易
|
||
- ツールの追加・変更が独立
|
||
|
||
### 3. **再利用性**
|
||
- 他のクライアント(VS Code拡張など)からも利用可能
|
||
- APIとして公開可能
|
||
|
||
### 4. **プロセス分離**
|
||
- LLMの重い処理とUIの軽快な動作を分離
|
||
- クラッシュ時の影響を最小化 |