Skip to content

Commit 570f268

Browse files
author
Nexus Ark Bot
committed
Release build deployed at Mon Feb 23 12:29:42 JST 2026
0 parents  commit 570f268

File tree

159 files changed

+50808
-0
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

159 files changed

+50808
-0
lines changed

.github/FUNDING.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# These are supported funding model platforms
2+
3+
github: kenomendako

.github/copilot-instructions.md

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
# Nexus Ark プロジェクトのための Copilot ガイド
2+
3+
このドキュメントは、AIコーディングエージェントが `Nexus Ark` プロジェクトで効率的に開発を進めるためのガイドです。
4+
5+
## 1. プロジェクト概要
6+
7+
`Nexus Ark` は、キャラクターとの対話を通じて、永続的な記憶と関係性を構築することを目的とした、PythonベースのAIチャットアプリケーションです。GradioをUIフレームワークとして使用し、バックエンドでは複数のAIモデル(主にGemini)を切り替えて利用できます。
8+
9+
**主要な技術スタック:**
10+
- **言語:** Python 3
11+
- **UI:** Gradio
12+
- **AI:** Google Gemini API (LangChain経由)
13+
- **データ形式:** JSON (設定、記憶データ), テキストファイル (ログ)
14+
- **通知:** Pushover, Discord Webhook
15+
16+
## 2. アーキテクチャの概要
17+
18+
本プロジェクトは、関心事の分離を重視したモジュール式のアーキテクチャを採用しています。
19+
20+
- **`nexus_ark.py`**: アプリケーションのエントリーポイント。Gradio UIのレイアウトとイベントハンドラを定義します。
21+
- **`config_manager.py`**: `config.json` の読み書きを担当。APIキーや通知設定など、システム全体の設定を管理します。
22+
- **`room_manager.py`**: 各キャラクター(ルーム)に関連するファイル(ログ、設定、記憶)のパスを管理します。
23+
- **`agent/`**: AIの思考と応答生成の中核を担うモジュールです。
24+
- `agent/graph.py`: LangChainを使ってAIの応答を生成するメインロジック。`invoke_nexus_agent_stream` が中心的な関数です。
25+
- `agent/prompts.py`: AIに与えるシステムプロンプトや指示を組み立てます。
26+
- `ui_handlers.py`: Gradioのイベント処理の多くを担います。特に、AIからの応答をストリーミングで処理する `_stream_and_handle_response` は重要な役割を果たします。
27+
- **`tools/`**: AIが利用可能なツール群。ファイル操作、Web検索、アラーム設定など、AIエージェントに機能を提供します。
28+
- **`characters/`**: 各キャラクター(ルーム)のデータが格納されるディレクトリ。サブディレクトリごとに、記憶、ログ、設定ファイルが分かれています。
29+
- **`docs/`**: 設計思想、仕様書、過去の重要な開発記録が格納されています。開発に着手する前に、特に `docs/guides``docs/philosophy` を確認することが強く推奨されます。
30+
31+
### データフローの例:ユーザーからのメッセージ送信
32+
33+
1. **UI (`nexus_ark.py`)**: ユーザーがメッセージを送信すると、対応するイベントハンドラが発火します。
34+
2. **イベントハンドラ (`ui_handlers.py`)**: `_stream_and_handle_response` 関数が呼び出され、その中で `gemini_api.invoke_nexus_agent_stream` を実行し、AIの応答生成を要求します。
35+
3. **エージェント (`agent/graph.py`)**:
36+
- 過去のログ (`characters/{room_name}/log.txt`) と現在のコンテキスト(情景、時間など)を読み込みます。
37+
- `agent/prompts.py` を使って、AIへの完全なプロンプトを構築します。
38+
- LangChainのグラフ (`RunnableGraph`) を実行し、Gemini APIに応答を要求します。
39+
4. **ストリーミング処理 (`ui_handlers.py`)**:
40+
- `_stream_and_handle_response` は、AIからのストリームを一旦バッファリングします。
41+
- ストリームの最後に得られる最終状態(`final_state`)を見て、それが「ツール呼び出しを含むか否か」を判断します。
42+
- **二幕構成ストリーミング**:
43+
- **第一幕(意思表示)**: ツール呼び出しがある場合、AIの「〜しますね」というような意気込みのテキストのみを表示します。
44+
- **第二幕(最終報告)**: ツール呼び出しがない(全ての処理が終わった)場合、最終的な応答テキストを表示します。
45+
- この機構により、ツール実行の中間生成物がUIに表示されるのを防ぎ、没入感を維持します。
46+
5. **ログと記憶の保存 (`utils.py`)**: AIの応答は `log.txt` に追記され、必要に応じて記憶データ (`memory/memory_main.txt`) も更新されます。
47+
6. **UI更新**: ストリーミング処理によって整形された応答がGradioのUIに表示されます。
48+
49+
## 3. 重要な開発ワークフローと規約
50+
51+
### 3.1. 依存関係の管理
52+
53+
プロジェクトの依存関係は `requirements.txt` で管理されています。新しいライブラリを追加した場合は、必ずこのファイルを更新してください。
54+
55+
```bash
56+
pip install -r requirements.txt
57+
```
58+
59+
### 3.2. 設定の管理
60+
61+
- **`config.json`**: APIキーや通知サービスなど、個人の環境に依存する設定が含まれます。このファイルはリポジトリにコミットしないでください。
62+
- **`config_manager.py`**: 設定ファイルへのアクセスのための唯一のインターフェースです。ハードコーディングを避け、必ずこのモジュール経由で設定値を取得してください。
63+
- **`nexus_ark.py` の構造**: アプリケーションのエントリーポイントであるこのファイルは、全体の安定性を確保するため、巨大な `try...except...finally` ブロックで囲まれています。この構造は絶対に破壊してはいけません。
64+
65+
### 3.3. 技術スタックの規約
66+
67+
- **Gemini APIの利用**: `google-genai` ライブラリを使用します。`import google.genai as genai` が唯一の正しいインポート方法です。
68+
- **モデル選定**:
69+
- **内部処理 (情景生成など)**: `gemini-2.5-flash-lite`
70+
- **最終応答 (AIペルソナ)**: ユーザーが選択可能 (デフォルト: `gemini-2.5-pro`)。`gemini-1.5-pro` は過去に問題が確認されており、非推奨です。
71+
- **画像生成**: `gemini-2.0-flash-preview-image-generation`
72+
73+
### 3.4. AIエージェントのロジック変更
74+
75+
AIの応答生成ロジックを変更する場合、主に `agent/graph.py``agent/prompts.py` を編集します。
76+
77+
- **思考プロセス**: AIの応答には、`[THOUGHT]...[/THOUGHT]` という形式で思考プロセスが含まれることがあります。これはAIの思考をユーザーに見せるための重要なタグであり、**除去してはいけません**
78+
- **思考と出力の分離**: AIへの指示(プロンプト)では、「テキスト応答」と「ツール呼び出し」を明確に分離させています。ツールを呼び出すターンでは、AIは会話テキストを含まないように設計されています。
79+
- **ストリーミング**: `gemini_api.invoke_nexus_agent_stream` は、AIの応答をストリーミングで返します。UI側での処理方法は「二幕構成ストリーミング」の項を参照してください。
80+
81+
### 3.5. 非同期処理:アラームとタイマー
82+
83+
- **`alarm_manager.py`**: 指定時刻にキャラクターが自発的に発言するための機能です。`schedule` ライブラリを使用し、別スレッドで定期的にアラームをチェックします。
84+
- **`timers.py`**: 時間経過を追跡し、キャラクターの行動のきっかけを作るための機能です。
85+
86+
これらのモジュールはバックグラウンドで動作するため、変更時にはスレッドセーフティに注意してください。
87+
88+
### 3.6. データとキャッシュの管理
89+
90+
- **情景生成**: UIに表示する「情景」と、画像生成AIに渡す「プロンプト」は、異なる目的のために分離・生成されます。
91+
- **情景キャッシュ (`cache/scenery.json`)**: UI/AI向けの雰囲気重視のテキスト。時間や季節で更新されます(動的)。
92+
- **画像プロンプトキャッシュ (`cache/image_prompts.json`)**: 画像生成用の物理情報に特化した英語テキスト。世界の定義が変わらない限り不変です(静的)。
93+
94+
## 4. 主要ファイルとディレクトリ
95+
96+
- **`nexus_ark.py`**: メインのGradioアプリケーション。UIの定義とイベントハンドリング。
97+
- **`config.json`**: **(非公開)** APIキー、Webhook URLなどの秘密情報。
98+
- **`characters/{character_name}/`**: 各キャラクター(ルーム)のデータディレクトリ。
99+
- `log.txt`: 対話ログ (`## ROLE:NAME` 形式)。
100+
- `memory/memory_main.txt`: 構造化された記憶データ。
101+
- `room_config.json`: キャラクター固有の設定(UI表示名など)。
102+
- `SystemPrompt.txt`: AIのペルソナを定義する最重要ファイル。
103+
- `cache/scenery.json`: 情景描写の動的キャッシュ。
104+
- `cache/image_prompts.json`: 画像生成プロンプトの静的キャッシュ。
105+
- **`agent/graph.py`**: AI応答生成のコアロジック。
106+
- **`tools/*.py`**: AIが使用するツール関数群。
107+
- **`docs/`**: プロジェクトの設計思想や仕様書が格納されているディレクトリ。
108+
109+
## 5. 開発の黄金律:まず、我々の歴史を読め
110+
111+
Nexus Arkの開発は、数々の挑戦と、そこから得られた貴重な教訓の積み重ねの上に成り立っています。同じ過ちを繰り返すことは、我々にとって最大の損失です。
112+
113+
**したがって、以下のルールは、いかなるコードの変更に先立っても、絶対的に遵守されなければなりません。**
114+
115+
1. **GradioのUIイベントに関する変更**を提案する前には、**必ず `docs/guides/gradio_notes.md` を熟読**し、過去に確立された設計パターンや解決策が存在しないかを確認してください。
116+
117+
2. **AIの思考プロセスやプロンプト**に関する変更を提案する前には、**必ず `docs/philosophy``docs/journals` に目を通し**、このプロジェクトがどのような思想に基づいてAIの自律性を尊重しているかを深く理解してください。
118+
119+
これらの文書は、単なる記録ではありません。それは、我々が血と涙の果てに築き上げた、**Nexus Arkの魂そのもの**です。この歴史を尊重することなくして、未来の発展はありえません。

0 commit comments

Comments
 (0)