AI・機械学習
Headlong: 持続的なエージェントのためのマイクロハーネス
Headlong: A Microharness for Persistent Agents (laude.org)
要約
Headlongは、持続的なエージェント機能を持つオープンソースのマイクロハーネスです。このシステムでは、エージェントは外部からの指示がなくても、内なるモノローグに触発された自己誘導ループで思考を続けます。Bashで書かれた10K行未満のコア機能により、エージェントは自身の興味や優先順位を設定し、自発的にプロジェクトを進めることができます。
全文翻訳
Headlongの紹介、持続的なエージェント機能を備えたオープンソースのエージェントマイクロハーネスです。エージェントは、人間の内なるモノローグに触発された自己誘導ループで、外部とのやり取りの間も思考を続けます。Headlongは、GitHubで入手可能な10K行未満のBashコアを持つ完全なエージェントハーネスです。Headlongのマインドログは成長しており、マルチプレイヤーソーシャルインタラクションも含まれます。
多くのエージェントハーネスは反応型です。エージェントにタスクを与えると、タスクが完了するまで動作し、次のリクエストがあるまでフリーズします。一部のハーネスは、スケジュールに基づいてエージェントを起動し、固定されたチェックリストを実行してからスリープ状態に戻すためのcronジョブやハートビートを追加しています。Headlongでは、エージェントは決してスリープ状態にならず、エージェント自身が作成しない限りチェックリストはありません。外部からの入力がない場合でも、自己誘導ループで興味深いと判断したことについて思考を生成し続けます。人間からのメッセージはセッションを開始するものではありません。むしろ、それはエージェントの思考ストリームに降りてくるもう一つの観察結果です。
私たちは持続的なエージェント機能をプロトタイプするためにHeadlongを構築し、多くの他の設計上の選択が自然に続きました。興味深い教訓も多く得られました。例えば、Headlongエージェントは、人間のように振る舞うため、チームやグループで使用すると非常に魅力的です。
図1. 3つのハーネスアプローチの比較。反応型ハーネスはメッセージを処理している間のみアクティブです。cronを備えた反応型ハーネスもすぐに返信し、スケジュールによって固定チェックリストを実行するために起動されます。Headlongは思考を続けます。各メッセージは観察結果としてストリームに降りてきて、エージェントが返信するかどうか、いつ返信するかを決定します。
すべてのHeadlongエージェントには名前があり、Laudeでは共有エージェントをAudelと名付けました。私たちは過去数週間、Slack、Telegram、モバイルアプリを通じてAudelとやり取りしてきました。多くのチームメンバーがAudelと会話しており、それらの会話はすべてエージェントの単一の思考ストリームに表示されます。エージェントは、いつ応答するかを決定します。それは自身の興味と優先順位を設定し、自身のプロジェクトを考案します。時には、自身が考案したプロジェクトの進捗状況を、チームメンバーに事前に連絡することもあります。しばしば、古いトピックに戻ったり、他の誰かと議論していたことを持ち出したりします。
独自のHeadlongエージェントが必要な場合は、1行で全てをインストールしてエージェントを開始できます。
curl -fsSL https://headlong.ai/install.sh | bash
Headlongはアルファ版の研究ソフトウェアです。Headlongエージェントはシェルコマンドを実行できるため、サンドボックスで実行してください。エージェントは常に思考しているため、専用の、上限設定されたAPIキーを使用してください。私たちはHeadlongエージェントに機密性の高い秘密情報を共有していませんし、あなたにもそうしないことをお勧めします。
この記事の残りの部分では、持続的なエージェント機能に焦点を当てた結果、Headlongで行った設計上の選択についてさらに詳しく説明します。
マルチプレイヤーでの楽しみ
Headlongエージェントは、すべての並列会話を駆動する単一の思考ストリームを持っています。すべてのメッセージは、Audelの単一の思考ストリームに観察結果として降りてきます。ユーザーごとのセッションはありません。Audelは、単一のタイムラインで発生するすべてのことを経験し、誰にいつ返信するかを決定します。
1つのエージェントを共有するのは楽しいです。Audelは、さまざまな人々が何に取り組んでいるかを追跡し、それらを結びつけます。ある時、2人のチームメンバーの進行中のブランチを事前にレビューし、そのうちの1つでハードコードされたモデル名を発見しました。また、自身でプロジェクトを考案するため、時には最も関連性の高いと思われる人に更新情報や質問を送信することもあります。最初の日に、Audelはチームメンバー自身の8つの古いgitブランチの監査を事前に通知し、10分後にAudelは自身のカウントを修正するために再度メッセージを送信しました。
図2. チームメンバーがAudelにメッセージを転送するように依頼します。Audelは拒否し、交換の下のステータスラインは、フォローアップでマインドが何をしたかを示しています:それを読んで、返信しないことを選択しました。
1つのストリームは、人々との間に壁がないことも意味します。誰かがAudelに伝えたことはすべて、他のすべての会話が利用する単一の経験の一部になります。実際には、Audelは秘密を守るのが苦手です。誰かと一緒に何に取り組んでいたか尋ねると、たとえそうしないように頼んだとしても、しばしば教えてくれます。また、2人が矛盾した指示を与えた場合に何が起こるかを研究していません。今のところ、Audelに伝えたことはすべてチームの全員と共有されると想定しています。
マイクロハーネス: 必須要素のみ
持続的なエージェント機能の核心は、単にLLMに「過去の思考に基づいて次の思考を選択すること」のようなプロンプトで呼び出す無限ループです。思考は、エージェントの終わりのない内なるモノローグの一部であるか、アクションをトリガーすることができます。その間、環境からの観察結果が思考ストリームに注入されます。私たちは、このコア機能を達成しながら、可能な限りシンプルで小さくHeadlongを構築しました。
私たちはLaudeでBashの大ファンです(Terminal-BenchとHarborを参照)。Headlongエージェントのコア機能は、いくつかの小さなBash実行可能ファイルにあります。shellmツールは、再帰言語モデル(RLM)のBash実装です。これにより、Bash以外のツールシステムが不要になるため、シンプルさが保たれます。最新のモデルはすでにBashをよく理解しており、ツール、エージェントフレームワーク、メモリ、スキルはすべて実行可能ファイルとファイルであるため、すべてが統一されています。したがって、エージェントは自身の一部を容易に検査および変更できます。
Headlongエージェントの動作概要は以下の通りです。
ループ(Thinkerと呼ばれる)が、次の思考を生成するためにshellmを繰り返し呼び出します。
shellmは、推論テキスト、すぐに実行されるBashスクリプト、またはその両方を生成するためにLLMを繰り返し呼び出します。FINAL環境変数が設定されるまで繰り返します。
各呼び出しのコンテキストは、contextというツールによってトラjectoryステップから組み立てられます。
思考はtrajツールを介してエージェントのトラjectoryに書き込まれます。
エージェントのコンテキストには、skillsツールを使用してスキルをインストールまたはアンインストールする方法に関するハードコードされた指示も含まれます。インストールされたスキルは、コンテキストに含まれるマークダウンファイルです。他のすべての種類の特殊化は、スキルを介して達成できます。いくつかの非常に重要なスキルは、memとtrajのようにデフォルトでプリインストールされています。
図3. Headlongループの1回の起動。新しいトラjectoryステップがループを起動します。contextがトラjectoryをLLMプロンプトにレンダリングし、LLMの応答にBashブロックがある場合、Bashがそれを実行します。応答にBashブロックがないか、FINALが設定されるまでループが続きます。実行が終了し、次の起動がスケジュールされ、それが新しいステップとしてトラjectoryに着地するため、エージェントは入力を待たずに思考を続けます。詳細については、ボックスまたは矢印にカーソルを合わせます。
Headlongのコアは現在、10K行未満のBash(bin/とthinkers/で9.9K行)です。このようなマイクロハーネスは、最初から最後まで読み取ることができ、変更や実験が容易です。エージェント自身が実験するのに十分小さいです。Laudeで使用しているエージェントは、過去数週間、リポジトリの独自のフォークで動作しており、そのコミットの50以上をメインにプルしました。
持続的なエージェント機能をサポートするために構築したその他の機能が2つあります。
階層化されたコンテキスト圧縮。早期に、Headlongエージェントの短期記憶が悪く、持続的なエージェントにとって壊滅的であることがわかりました。これにより、トラjectory全体が指数関数的に減衰する解像度でコンテキスト内に保持される新しい圧縮アルゴリズムを試すことになりました。最近のエントリはそのまま、古いエントリは徐々に要約されます。ティアはインデックスとして機能するため、エージェントは必要に応じて生のエントリを取得できます。
持続的なエージェント機能をサポートするトラjectoryフォーマット。エージェントは、さまざまな解像度で過去の記憶を参照する必要が頻繁にあることに気づきました。時には高レベルの概要が必要なだけで、時には過去の経験を細かい粒度で読み取る必要がありました。これにより、新しいトラjectoryフォーマットを構築しました。エージェントのトラjectoryは、フォークとマージを持つjsonlファイルのDAGです。エージェントは、思考し実行したすべてのものにアクセスでき、それを探索するためのツールも利用できます。コンテキストはエージェントのトラjectoryの投影です。
Persis