# プロジェクト構造: TradingAgents ## 1. ルートディレクトリの構成 プロジェクトのルートには、メインのアプリケーションパッケージ、CLI、ドキュメント、および設定ファイルが含まれています。 - **`tradingagents/`**: フレームワークのコアとなるPythonソースコードで、インストール可能なパッケージとして構成されています。 - **`cli/`**: 対話型のコマンドラインインターフェースのソースコードが含まれています。 - **`main.py`**: `tradingagents`パッケージをプログラム的に使用する方法を示す簡単なスクリプトです。 - **`test.py`**: 特定の機能をテストするためのスクリプトです。 - **`assets/`**: `README.md`やドキュメントで使用される画像、スキーマ、その他の静的アセットが含まれています。 - **`.kiro/`**: Kiroのスペック駆動開発用のファイルディレクトリで、ステアリングドキュメントや仕様書が含まれます。 - **`.gemini/`**: Gemini CLIのコマンド定義用ディレクトリです。 - **`requirements.txt` / `pyproject.toml`**: Pythonの依存関係管理ファイルです。 - **`README.md`**: プロジェクトのメインドキュメントです。 ## 2. サブディレクトリの構造 ### `tradingagents/` これがメインのパッケージディレクトリです。 - **`agents/`**: すべての個別のAIエージェントのロジックが含まれています。 - `analysts/`: 特定の種類のデータ(市場、ニュースなど)を収集・分析するエージェント。 - `researchers/`: アナリストの調査結果について議論するエージェント(ブルとベア)。 - `managers/`: 議論を進行させ、高レベルの意思決定を行うエージェント(リサーチマネージャー、リスクマネージャー)。 - `trader/`: 最終的な取引計画を策定するエージェント。 - `risk_mgmt/`: トレーダーの計画を異なるリスク観点から分析するエージェント。 - `utils/`: エージェント用の共有ユーティリティ。状態定義(`agent_states.py`)、メモリ(`memory.py`)、ツール定義など。 - **`dataflows/`**: 外部およびローカルのデータソースとのすべてのやり取りを管理します。 - `interface.py`: プロジェクトの設定に基づいてデータリクエストを適切なベンダー(例:Alpha Vantage, yfinance, local)にルーティングする重要なファイル。これにより、データバックエンドの構成が非常に柔軟になります。 - `alpha_vantage.py`, `y_finance.py`など: ベンダー固有のデータ取得実装。 - `config.py`: データベンダーの設定を管理します。 - **`graph/`**: LangGraphワークフローの構造とロジックを定義します。 - `trading_graph.py`: エージェントグラフ全体を構築し、オーケストレーションするメインファイル。 - `setup.py`: グラフのノードとエッジの設定を処理します。 - `conditional_logic.py`: グラフ内の条件付きエッジのルーティングロジックを定義します(例:議論をいつ終了するかを決定する)。 - `propagation.py`: グラフの初期状態の作成を管理します。 - `reflection.py`: エージェントが過去の決定を振り返るためのロジックを実装します。 ### `cli/` - **`main.py`**: `typer`で構築されたコマンドラインアプリケーションのエントリーポイント。 - **`utils.py`**: CLIのヘルパー関数。対話型プロンプト(`questionary`)など。 - **`models.py`**: CLIで使用されるPydanticモデルやEnum。 - **`static/`**: ウェルカムメッセージなどの静的テキストファイル。 ## 3. 主要なアーキテクチャ原則 - **モジュール性と関心の分離**: プロジェクトは、エージェントのロジック(`agents/`)、データアクセス(`dataflows/`)、オーケストレーション(`graph/`)を分離するように構成されています。これにより、他の部分に影響を与えることなく、単一の部分を簡単に修正または拡張できます。 - **状態駆動のワークフロー**: プロセス全体が状態グラフ(`AgentState`)によって管理され、各ステップが次のノードに渡される状態を変更します。これにより、明確で追跡可能な実行フローが提供されます。 - **設定可能なデータ抽象化**: `dataflows/interface.py`は、エージェントを特定のデータベンダーから切り離す強力な抽象化レイヤーを提供します。これにより、ユーザーはバックテストやコスト削減のために、ライブAPIとローカルデータを簡単に切り替えることができます。 - **リフレクティブメモリ**: エージェントは、過去のパフォーマンスから学ぶためにリフレクション(振り返り)メカニズムを通じて設計されています。これにより、将来の参照のためにベクトルデータベース(`chromadb`)に洞察が保存されます。