Agent in Agent
enhancementrefactoring
## 概要
Agentの中にAgentを持つことで、単純な機能のAgentを複合してより複雑なAgentを実装可能なフレームワークを実装します。
## 背景と目的
Agentの実装は複雑化し、一つのクラスでマルチモーダル化や時系列対応等を行うことが困難になってきました。
そこで、Agentクラスの中に複数のAgentを実装し、特徴量抽出や時系列予測、行動生成を行い、コードの再利用性や見通しを良くすることが目的です。
## 提案内容
BaseAgentのコンストラクタ`__init__`に他のAgentのインスタンスを渡せるようにします。
`attach_inference_models`やそのコールバック関数を内部的に呼び出すようにします。
また、破壊的な変更として、`setup`, `teardown`の引数を無くし、また返り値を`None`にします。
予測誤差による報酬計算のための1stepの準備は`common_step`を実装していることから、`step`メソッド内でその判定処理を行い、実行するようにします。
### スケッチ
```py
class BaseAgent:
def __init__(self, *agents: BaseAgent) -> None:
self._agents = agents
def attach_inference_wrappers_dict(self, inference_wrappers_dict):
for agent in self._agents:
self.agent.attach_inference_wrappers_dict(inference_wrappers_dict)
self._inference_wrappers_dict = inference_wrappers_dict
self.on_inference_wrappers_dict_attached()
def setup(self) -> None:
for agent in self._agents:
agent.setup()
def teardown(self) -> None:
for agent in self._agents:
agent.teardown()
class MultiModalAgent(BaseAgent):
def __init__(self, image_encoding_agent, audio_encoding_agent):
super().__init__(image_encoding_agent, audio_encoding_agent)
```
## タスク
- [ ] BaseAgentがBaseAgentを受け取れるよう変更
- [ ] モッククラスでテスト
## 参考
关闭于 2024-11-15 0 条评论