最近、特に長期にわたりエージェントを扱う(そしてMLXを使ったいくつかのおもちゃの実験を行ったこと)に関して、継続的な学習について少し考えています。 迅速なコンパクト化と再帰サブエージェントの組み合わせは、非常に効果的です。これならかなり遠くまで進めそうです。(プロンプト圧縮=コンテキストウィンドウがほぼ満杯になったとき、モデルが短い要約を生成し、その後その要約を使って一からやり直す。再帰的サブエージェント=有限コンテキストウィンドウに対応するためにタスクをより小さなタスクに分解する) 再帰的なサブエージェントは常に役立つでしょう。しかし、プロンプト圧縮は少し非効率的(とはいえ非常に効果的な)裏技のように思えます。 私が知っている他の選択肢は2つあります。1.オンラインの微調整、そして2.記憶に基づく技術。 オンラインのファインチューニング:展開中にモデルが遭遇するデータをもとにLoRAアダプターを訓練します。全体的にはあまり楽観的ではありません。各ユースケースやユーザー向けにカスタムモデルやアダプターを導入するというエンジニアリング上の課題以外にも、いくつかの根本的な課題があります。 - オンラインファインチューニングは本質的に不安定です。ターゲットドメインのデータでトレーニングすると、ターゲットにしていない能力を壊滅的に破壊する可能性があります。これを回避する方法の一つは、新旧のデータセットを混在させて保持することです。しかし、これはかなり早い段階で複雑になります。 - オンラインの微調整のデータは一体どんなものなのでしょうか?モデルをトレーニングするためにターゲットドメインに基づいてQ/Aペアを生成しますか?有限容量が与えられたデータ混合物の情報の優先順位付けにも問題があります。 メモリベースの技術:基本的には有用なメモリを残し、不要なものは破棄する方針です。これは人間が情報を保持する方法に近い感覚です。「使うか失うか」です。これを成功させるには、いくつかの要素だけで済みます: - 立ち退き/保持ポリシー。例えば「過去1万トークンのうち少なくとも一度はアクセスされた記憶を保持する」といった感じです。 - ポリシーが効率的に計算可能であること - モデルが長期記憶を保存・アクセスするための場所。アクセスが少ないKVキャッシュで十分かもしれません。しかし、大規模なメモリへの効率的なアクセスのためには階層型のデータ構造がより適切かもしれません。