DeepWerewolf — agent-lightning派生の強化学習エージェントツール

AI/ML

概要

DeepWerewolfは、Microsoftのagent-lightningプロジェクト(指定のコミット: 5724f63…)をベースにした派生リポジトリです。リードによると、ソースコードに対してトレース出力やトリプレットの構築周りで直接的な変更を加えており、具体的にはagentlightning/runner.pyのtrace_spans関連処理をコメントアウトするなどの改修が含まれます。daemon側ではrolloutから得られるトリプレットをtoken_idや報酬を含む辞書リストに変換しており、トレース収集や後処理のワークフローをカスタマイズする目的がうかがえます。小規模な実験的リポジトリで、エージェントの挙動解析やデータ収集の改変を試みる際の参考になります。

GitHub

リポジトリの統計情報

  • スター数: 3
  • フォーク数: 0
  • ウォッチャー数: 3
  • コミット数: 7
  • ファイル数: 14
  • メインの言語: Python

主な特徴

  • agent-lightningをベースにした派生実装で、トレース/トリプレット周りの処理をカスタム化。
  • daemon側でrolloutからトークンIDと報酬を含むトレース辞書を組み立てる実装を追加。
  • 軽量な構成(README、LICENSE、pre-commit設定あり)で実験的に使える。
  • 小規模で変更箇所が明確、元プロジェクトとの比較・差分確認が容易。

技術的なポイント

このリポジトリで注目すべき技術的ポイントは、トレース(trace_spans)とトリプレット(rollout.triplets)の取り扱いに対する改修です。元のagent-lightningではtrace_spansをtriplet_exporterに渡してエクスポートする流れがあるようですが、ここではrunner.pyの該当行をコメントアウトしてエクスポート処理を無効化しているため、外部ストレージや可視化への自動出力が止められます。この変更はデバッグ目的や一時的な無効化を意図している可能性がありますが、トレースが欠落すると学習の解析や因果追跡が困難になります。

一方で、agentlightning/verl/daemon.py側ではrollout.tripletsから明示的に{“prompt_ids”: …, “response_ids”: …, “reward”: …}という辞書を作りtrace_listとして扱っています。ここで取り出しているtoken_idsはトークナイズされた入力と出力のID列で、報酬(reward)を合わせることでスカラー学習信号とシーケンス情報の対応付けが行えます。トレースの形を整えることで、後段の解析パイプライン(例: 再生、学習用データ変換、ヒューマン評価との照合)に接続しやすくなります。

実運用上の注意点として、ベースのagent-lightningのコミット相互依存やAPI変更に敏感である点が挙げられます。特定のコミット(5724f63…)に依存している旨がREADMEにあるため、ベースが更新されると互換性が崩れる可能性があります。また、トレースエクスポートを意図的に無効化している箇所はドキュメント化や条件付きフラグ化(環境変数や設定ファイルでON/OFF可能)することが望ましく、データ欠損による解析ミスを防げます。最後に、現状は動作例や実行手順が限定的なので、requirementsの明記、実行例と簡単なデータパイプライン(トークナイザの指定や報酬スケーリング)を追加すると採用・検証が容易になります。

プロジェクトの構成

主要なファイルとディレクトリ:

  • .github: dir
  • .gitignore: file
  • .pre-commit-config.yaml: file
  • LICENSE: file
  • README.md: file

…他 9 ファイル

(注)リポジトリは小規模で、ベースコードからの差分を追うことで目的の変更が把握しやすい構成です。

まとめ

agent-lightning派生の実験的改修でトレース収集回りをカスタマイズした小規模リポジトリ。

リポジトリ情報:

READMEの抜粋:

基于agent-lightning(5724f63cfc75bcc2f4fb56958ef384d307717c18,Sep 13, 2025) https://github.com/microsoft/agent-lightning 源码改动: 注释掉agentlightning/runner.py 115行 if trace_spans: triplets = self.triplet_exporter.export(trace_spans) agentlightning/verl/daemon.py 338行 trace_list = [ {“prompt_ids”: t.prompt.get(“token_ids”, []), “response_ids”: t.response.get(“token_ids”, []), “reward”: t.reward} for t in rollout.triplets ] agentlightning/verl/daemon…