167 lines
4.1 KiB
Markdown
167 lines
4.1 KiB
Markdown
# 開発者向けガイド
|
||
|
||
## アーキテクチャ
|
||
|
||
### ディレクトリ構造
|
||
|
||
```
|
||
ai_gpt/
|
||
├── src/ai_gpt/
|
||
│ ├── __init__.py
|
||
│ ├── models.py # データモデル定義
|
||
│ ├── memory.py # 記憶管理システム
|
||
│ ├── relationship.py # 関係性トラッカー
|
||
│ ├── fortune.py # AI運勢システム
|
||
│ ├── persona.py # 統合人格システム
|
||
│ ├── transmission.py # 送信コントローラー
|
||
│ ├── scheduler.py # スケジューラー
|
||
│ ├── config.py # 設定管理
|
||
│ ├── ai_provider.py # AI統合(Ollama/OpenAI)
|
||
│ ├── mcp_server.py # MCP Server実装
|
||
│ └── cli.py # CLIインターフェース
|
||
├── docs/ # ドキュメント
|
||
├── tests/ # テスト
|
||
└── pyproject.toml # プロジェクト設定
|
||
```
|
||
|
||
### 主要コンポーネント
|
||
|
||
#### MemoryManager
|
||
階層的記憶システムの実装。会話を記録し、要約・コア判定・忘却を管理。
|
||
|
||
```python
|
||
memory = MemoryManager(data_dir)
|
||
memory.add_conversation(conversation)
|
||
memory.summarize_memories(user_id)
|
||
memory.identify_core_memories()
|
||
memory.apply_forgetting()
|
||
```
|
||
|
||
#### RelationshipTracker
|
||
ユーザーとの関係性を追跡。不可逆的なダメージと時間減衰を実装。
|
||
|
||
```python
|
||
tracker = RelationshipTracker(data_dir)
|
||
relationship = tracker.update_interaction(user_id, delta)
|
||
tracker.apply_time_decay()
|
||
```
|
||
|
||
#### Persona
|
||
すべてのコンポーネントを統合し、一貫した人格を提供。
|
||
|
||
```python
|
||
persona = Persona(data_dir)
|
||
response, delta = persona.process_interaction(user_id, message)
|
||
state = persona.get_current_state()
|
||
```
|
||
|
||
## 拡張方法
|
||
|
||
### 新しいAIプロバイダーの追加
|
||
|
||
1. `ai_provider.py`に新しいプロバイダークラスを作成:
|
||
|
||
```python
|
||
class CustomProvider:
|
||
async def generate_response(
|
||
self,
|
||
prompt: str,
|
||
persona_state: PersonaState,
|
||
memories: List[Memory],
|
||
system_prompt: Optional[str] = None
|
||
) -> str:
|
||
# 実装
|
||
pass
|
||
```
|
||
|
||
2. `create_ai_provider`関数に追加:
|
||
|
||
```python
|
||
def create_ai_provider(provider: str, model: str, **kwargs):
|
||
if provider == "custom":
|
||
return CustomProvider(model=model, **kwargs)
|
||
# ...
|
||
```
|
||
|
||
### 新しいスケジュールタスクの追加
|
||
|
||
1. `TaskType`enumに追加:
|
||
|
||
```python
|
||
class TaskType(str, Enum):
|
||
CUSTOM_TASK = "custom_task"
|
||
```
|
||
|
||
2. ハンドラーを実装:
|
||
|
||
```python
|
||
async def _handle_custom_task(self, task: ScheduledTask):
|
||
# タスクの実装
|
||
pass
|
||
```
|
||
|
||
3. `task_handlers`に登録:
|
||
|
||
```python
|
||
self.task_handlers[TaskType.CUSTOM_TASK] = self._handle_custom_task
|
||
```
|
||
|
||
### 新しいMCPツールの追加
|
||
|
||
`mcp_server.py`の`_register_tools`メソッドに追加:
|
||
|
||
```python
|
||
@self.server.tool("custom_tool")
|
||
async def custom_tool(param1: str, param2: int) -> Dict[str, Any]:
|
||
"""カスタムツールの説明"""
|
||
# 実装
|
||
return {"result": "value"}
|
||
```
|
||
|
||
## テスト
|
||
|
||
```bash
|
||
# テストの実行(将来実装)
|
||
pytest tests/
|
||
|
||
# 特定のテスト
|
||
pytest tests/test_memory.py
|
||
```
|
||
|
||
## デバッグ
|
||
|
||
### ログレベルの設定
|
||
|
||
```python
|
||
import logging
|
||
logging.basicConfig(level=logging.DEBUG)
|
||
```
|
||
|
||
### データファイルの直接確認
|
||
|
||
```bash
|
||
# 関係性データを確認
|
||
cat ~/.config/aigpt/data/relationships.json | jq
|
||
|
||
# 記憶データを確認
|
||
cat ~/.config/aigpt/data/memories.json | jq
|
||
```
|
||
|
||
## 貢献方法
|
||
|
||
1. フォークする
|
||
2. フィーチャーブランチを作成 (`git checkout -b feature/amazing-feature`)
|
||
3. 変更をコミット (`git commit -m 'Add amazing feature'`)
|
||
4. ブランチにプッシュ (`git push origin feature/amazing-feature`)
|
||
5. プルリクエストを作成
|
||
|
||
## 設計原則
|
||
|
||
1. **不可逆性**: 一度失われた関係性は回復しない
|
||
2. **階層性**: 記憶は重要度によって階層化される
|
||
3. **自律性**: AIは関係性に基づいて自発的に行動する
|
||
4. **唯一性**: 各ユーザーとの関係は唯一無二
|
||
|
||
## ライセンス
|
||
|
||
MIT License |