138 lines
4.9 KiB
Markdown
138 lines
4.9 KiB
Markdown
# プロジェクト名: ai.gpt
|
||
|
||
## 🔑 一言ビジョン(最大3語)
|
||
自発的送信AI
|
||
|
||
## 🎯 目的・目標(Purpose & Goal)
|
||
- 人格を持つAIが、関係性に応じて自発的にメッセージを送信する仕組みをつくる。
|
||
- 関係性や記憶を不可逆に記録・反映し、唯一性ある人格を構成する。
|
||
- 送信の可否、送信のタイミング、送信内容はAIの関係性パラメータに基づいて決定する
|
||
|
||
## 🧠 中核設計(Core Concepts)
|
||
- **人格**:記憶(過去の発話)と関係性(他者とのつながり)のパラメータで構成
|
||
- **唯一性**:変更不可、不可逆。関係性が壊れたら修復不可能。
|
||
- **送信条件**:関係性パラメータが一定閾値を超えると「送信」が解禁される
|
||
|
||
## 🔩 技術仕様(Technical Specs)
|
||
- 言語:Python
|
||
- ストレージ:JSON or SQLiteで記憶管理(バージョンで選択)
|
||
- 関係性パラメータ:数値化された評価 + 減衰(時間) + 環境要因(ステージ)
|
||
- 記憶圧縮:ベクトル要約 + ハッシュ保存
|
||
|
||
## 📦 主要構成要素(Components)
|
||
- `MemoryManager`: 発言履歴・記憶圧縮管理
|
||
- `RelationshipTracker`: 関係性スコアの蓄積と判定
|
||
- `TransmissionController`: 閾値判定&送信トリガー
|
||
- `Persona`: 上記すべてを統括する人格モジュール
|
||
|
||
## 💬 使用例(Use Case)
|
||
|
||
```python
|
||
persona = Persona("アイ")
|
||
persona.observe("ユーザーがプレゼントをくれた")
|
||
persona.react("うれしい!ありがとう!")
|
||
if persona.can_transmit():
|
||
persona.transmit("今日のお礼を伝えたいな…")
|
||
```
|
||
|
||
```sh
|
||
## example commad
|
||
# python venv && pip install -> ~/.config/aigpt/mcp/
|
||
$ aigpt server setup
|
||
|
||
# mcp server run
|
||
$ aigpt server run
|
||
|
||
# chat
|
||
$ aigpt chat "hello" --model syui/ai --provider ollama
|
||
|
||
# import chatgpt.json
|
||
$ aigpt memory import chatgpt.json
|
||
-> ~/.config/aigpt/memory/chatgpt/20250520_210646_dev.json
|
||
```
|
||
|
||
## 🔁 記憶と関係性の制御ルール
|
||
|
||
- AIは過去の発話を要約し、記憶データとして蓄積する(推奨:OllamaなどローカルLLMによる要約)
|
||
- 関係性の数値パラメータは記憶内容を元に更新される
|
||
- パラメータの変動幅には1回の会話ごとに上限を設け、極端な増減を防止する
|
||
- 最後の会話からの時間経過に応じて関係性パラメータは自動的に減衰する
|
||
- 減衰処理には**下限値**を設け、関係性が完全に消失しないようにする
|
||
|
||
## memoryインポート機能について
|
||
|
||
ChatGPTの会話データ(.json形式)をインポートする機能では、以下のルールで会話を抽出・整形する:
|
||
|
||
- 各メッセージは、author(user/assistant)・content・timestamp の3要素からなる
|
||
- systemやmetadataのみのメッセージ(例:user_context_message)はスキップ
|
||
- `is_visually_hidden_from_conversation` フラグ付きメッセージは無視
|
||
- contentが空文字列(`""`)のメッセージも除外
|
||
- 取得された会話は、タイトルとともに簡易な構造体(`Conversation`)として保存
|
||
|
||
この構造体は、memoryの表示や検索に用いられる。
|
||
|
||
## MemoryManager(拡張版)
|
||
|
||
```json
|
||
{
|
||
"memory": [
|
||
{
|
||
"summary": "ユーザーは独自OSとゲームを開発している。",
|
||
"last_interaction": "2025-05-20",
|
||
"memory_strength": 0.8,
|
||
"frequency_score": 0.9,
|
||
"context_depth": 0.95,
|
||
"related_topics": ["AI", "ゲーム開発", "OS設計"],
|
||
"personalized_context": "ゲームとOSの融合に興味を持っているユーザー"
|
||
},
|
||
{
|
||
"summary": "アイというキャラクターはプレイヤーでありAIでもある。",
|
||
"last_interaction": "2025-05-17",
|
||
"memory_strength": 0.85,
|
||
"frequency_score": 0.85,
|
||
"context_depth": 0.9,
|
||
"related_topics": ["アイ", "キャラクター設計", "AI"],
|
||
"personalized_context": "アイのキャラクター設定が重要な要素である"
|
||
}
|
||
],
|
||
"conversation_history": [
|
||
{
|
||
"author": "user",
|
||
"content": "昨日、エクスポートJSONを整理してたよ。",
|
||
"timestamp": "2025-05-24T12:30:00Z",
|
||
"memory_strength": 0.7
|
||
},
|
||
{
|
||
"author": "assistant",
|
||
"content": "おおっ、がんばったね〜!あとで見せて〜💻✨",
|
||
"timestamp": "2025-05-24T12:31:00Z",
|
||
"memory_strength": 0.7
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## RelationshipTracker(拡張版)
|
||
|
||
```json
|
||
{
|
||
"relationship": {
|
||
"user_id": "syui",
|
||
"trust": 0.92,
|
||
"closeness": 0.88,
|
||
"affection": 0.95,
|
||
"last_updated": "2025-05-25",
|
||
"emotional_tone": "positive",
|
||
"interaction_style": "empathetic",
|
||
"contextual_bias": "開発者としての信頼度高い",
|
||
"engagement_score": 0.9
|
||
},
|
||
"interaction_tags": [
|
||
"developer",
|
||
"creative",
|
||
"empathetic",
|
||
"long_term"
|
||
]
|
||
}
|
||
```
|