これまでローカルLLM用のエージェント(ハーネスって呼んだほうが良いのでしょうか?)にHermesを使っていたのを、PI Agentに移行しました

Hermesの辛かった点

  • ラップトップやスマホなど、複数の機器から指示を送りたいので、Hermesを使い始めた当初からブラウザ経由でアクセスしていました。
  • Hermesのセッション管理は結構ガバガバで、compactionするとセッション一覧から消えるとか、ループしたからやり取りを巻き戻したらループした部分もコンテキストに入っていて品質がガタ落ちとか(こっちは仕様っぽい)、ちらほら使いづらい点が見受けられました。
  • 最初は nesquena/hermes-webui を使っていたものの、Hermes環境をバージョンアップしたタイミングで上手く動かなくなり、公式のwebuiに移りました。この公式webuiが正直かなり使いづらいものでした。
    • HermesのCUIの画面をブラウザ越しに触れるような形なのですが、このセッションの管理がかなり曲者でした
      • 表示が乱れたり
      • 複数の端末で見ると1つの端末にしか出力が送られなかったり
      • 複数のタブでセッションを並列して見ようとすると前のタブが何故か違うセッションに切り替わってたり
  • 特に、compactionするとセッション一覧から消えるバグとの相性は最悪で、タブを閉じたり他のセッションを見に行こうとすると、せっかくコンテキストを含ませて育ててきたセッションに二度とアクセスできなくなる、というような有様でした。
  • あまりにも使いづらいので、自宅でセルフホストしているMatrixサーバーと連携させて、MatrixのクライアントであるCinnyからMatrixを経由させて指示を送っていました。ですが、Cinnyのスレッド機能もいまいち使いづらいもので、ここでも消耗していました。
    • 今思い返すと他のMatrixクライアント、例えばFluffyChatとかを使えば少しはマシだったかもしれないですね。

PI Agentへの乗り換え

  • 流石にあまりにも使いづらいので、代替の軽量なエージェントとして、前から気になっていたPI Agentに乗り換えることにしてみました。
    • 実際には試しにPI Agentに乗り換えてみたところ、前のwebuiとのあまりの差に、さっさとこっちに乗り換えるべきだ、という気持ちになりました。
  • PI Agentには公式のwebuiは無く、非公式のwebuiが幾つもあります。その中で、GitHub - jmfederico/pi-web: Web UI for Pi Coding Agent that keeps sessions alive in real workspaces. · GitHub を採用してみました。
    • これを選んだ理由は
      • 仮想化されたサーバー環境上で動くPI Agentのセッションを保持すること
      • ブラウザを閉じてもセッションが動き続けること
      • PCとスマホの両方から同時にセッションの動きを見たり、複数のタブで見たりできること
      • 動かすための設定がシンプルなこと
        • 大抵のコーディングエージェントはホスト環境で動作させるのが推奨されているのですが、あまり環境を好き勝手いじられたくないので、Dockerコンテナ内に隔離することにしています。
        • そのために自前でDockerfileやcompose.ymlの設定を書いていく必要があるので、そのための手間が強いソフトは避けました。

移行した感想

  • やっぱちゃんとしたUIって大事ですね。使いやすい。
  • デフォルト設定で初期トークンが4k台とめちゃくちゃ軽量で、初めて動かした時にプロンプト処理が一瞬で終わってびっくりしました。
    • それまで使っていたHermesでは、ツールをかなり絞って16kくらい、Claude Codeはデフォルトで26kくらいでした。
    • 今はツールを幾つか増やしたので6k台です。
  • セッションの履歴の管理が安定していて、セッション内のやり取りの巻き戻しも見たとおりに行われているのが良いです。
    • ローカルLLMだと出力がループしたり変な方向に思考が走っていったりと、こちらで介入する必要のある事態に陥ることが度々あるので、巻き戻しをすることはよくあります。
    • セッションのデータはJSONLで管理されているので、エディタで開いて書き換えることも可能です。
      • thinkingが上手くいかず、何度試しても無限ループするようなハマり方をした際に、実際にセッションの内容を書き換えて対処しました。Hermesだったら諦めてた。
  • 標準だと〇〇の機能が無いのか〜となることもありますが、そういう時に拡張機能をエージェントに探させて追加させる、というのもできて、これが結構良いです。
    • 例えば/goalコマンドがなくて不便だったので拡張機能で追加しました。
  • ただ逆に、Hermesのスキルやメモリーが自動でいい感じになる仕組みは便利でした。PI側でも拡張機能で同等のことは出来るみたいなので、試してみたいです。
    • Hermes以上の形で上手く対処する仕組みを構築中です。乞うご期待

pi-webのスクショ

Hermesのセッション統計コーナー

  • セッション数: 1,291件
  • メッセージ数: 約61,000件
  • ツール呼び出し: 約27,900件
  • API呼び出し: 約15,000件
  • トークン量: 入力 約1.2B (キャッシュヒット率 86.6%) / 出力 約18.7M

【ツール利用回数 TOP 5】

  1. terminal: 6,034回
  2. read_file: 3,302回
  3. search_files: 1,757回
  4. patch: 980回
  5. write_file: 980回