NVIDIA-NeMo/labs-OO-Agents
NVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.
NVIDIA-labs Object Oriented Agents(NOOA)
それは何か – NOOA は、AI エージェントを構築するためのモデル非依存の Python フレームワークです。エージェントを通常の Python クラスとして記述できます。フィールドは状態を保持し、通常のメソッドは決定的なコードであり、本体が ... だけのメソッドはエージェント的です。これらは、メソッドのシグネチャと docstring に基づいて実行時に LLM によって埋められます。
なぜ重要か – エージェント全体を単一のオブジェクトとして扱うことで、NOOA は他の多くのフレームワークが必要とする個別のプロンプト、ツール、ワークフロー仕様を不要にします。これにより、エージェントは通常の Python ツールでテスト、バージョン管理、リファクタリングが容易になります。
主要なアイデア
| アイデア | それがもたらすもの |
|---|---|
| エージェントは Python オブジェクト | 状態はインスタンス上にあり、型ヒントは契約になり、docstring はプロンプトになります。 |
... 本体は LLM 駆動のメソッドになる |
呼び出し時に、フレームワークはシグネチャと docstring を言語モデルに送信し、生成された Python コードを受け取り、検証して実行します。 |
| 型付き I/O と自動再試行 | 入力および出力タイプが強制され、ランタイムは失敗した生成を自動的に再試行します。 |
| ライブオブジェクト引数 | メソッドは他のオブジェクトへの参照を受け取ることができるため、モデルは既存の状態を直接操作できます。 |
| 組み込みトレーシング | すべての LLM リクエスト、コード実行、メソッド呼び出しがスパンとして記録されます。CLI ビューアはブラウザでトレースを表示できます。 |
| モジュラー拡張 | オプションパッケージは、CLI(nooa-cli)、メモリサブシステム、エージェントクライアントプロトコル(ACP)クライアント、ベンチマークツールを追加します。 |
インストール
# uv を使用(推奨)
uv init my-agent-project && cd my-agent-project
uv add nooa # コアフレームワーク
# オプションの拡張
uv add "nooa[cli,memory]" # CLI + 長期メモリ
または pip を使用:
pip install nooa
ベンチマークおよび評価ユーティリティは、リポジトリから直接インストールできます:
uv add "eval_pipeline @ git+https://github.com/NVIDIA-NeMo/labs-OO-Agents.git@main#subdirectory=util/eval_pipeline"
クイックスタート例
import asyncio
from nooa import Agent
from nooa.unifiedllm.registry import get_llm_client
# 1️⃣ モデルを選択(LiteLLM 互換の任意のエンドポイント)
llm = get_llm_client("claude-haiku-4-5") # 事前に ANTHROPIC_API_KEY を設定
# 2️⃣ エージェントを定義 – `...` は生成メソッドを示す
class FeedbackAgent(Agent, llm=llm):
"""あなたは顧客フィードバックを分析するエージェントです。"""
async def analyze_feedback(self, text: str) -> str:
"""一文の感情要約と主要トピックを返します。"""
...
# 3️⃣ 実行
async def main():
agent = FeedbackAgent()
out = await agent.analyze_feedback("素晴らしい製品ですが、配送が遅かったです")
print(out)
asyncio.run(main())
スクリプトを実行すると、LLM が生成した短い分析が出力されます。メソッド名、パラメータ、または docstring を変更すると、プロンプトが自動的に変更されます。
安全上の注意
- NOOA は研究用ソフトウェアです。生成されたコードは任意のアクションを実行できます。フレームワークは静的 AST チェックとモジュール拒否リストを実行しますが、これらはセキュリティ境界ではありません。
- 生成されたコードを実行するときは、OS レベルのサンドボックス(コンテナ、VM、または NVIDIA OpenShell)でエージェントを実行してください。
- 生成がストリーム(サポートされていない)を生成する場合や契約に違反する場合、ライブラリは明確なエラーメッセージを提供します。
NOOA を使用する場合
- LLM 駆動アシスタントの迅速なプロトタイピング – エージェントの状態と機能を通常の Python で表現したい場合。
- ツールを使用するエージェントの構築 – 生成されたコードはモジュールをインポートしたり、他のオブジェクトを呼び出したり、組み込みの
MemoryManagerを使用して長期コンテキストを保持できます。 - エージェントアーキテクチャの研究 – フレームワークはモデル非依存で、ベンチマークスイート(
nooa-bench)と評価パイプラインが含まれています。 - 既存のコードベースとの統合 – エージェントは単なるクラスであるため、任意の Python プロジェクトにドロップして
pytestでテストできます。
ドキュメントとリソース
- [完全なドキュメント](https://github.com/NVIDIA-NeMo/labs-OO-Agents/blob/main/docs/README.md)– 概念、API リファレンス、安全ガイド。
- [10 分ツアー] – コアアイデアの簡潔なウォークスルー。
- [ノートブックチュートリアル] – 実践的な学習のための Colab フレンドリなノートブック。
- [例カタログ] – 構造化出力、ツール使用、意思決定モデル、トレーシングなどを示す実行可能なスクリプト。
- [論文](https://arxiv.org/abs/2607.20709)– 設計根拠とベンチマーク結果。
- [ブログ記事] – 6 つの「エージェントハーネス機能」の概要。
貢献とライセンス
- Apache 2.0 の下でオープンソース。
- 開発には
uvを使用して環境管理を行います。ワークフロー、pre-commit フック、テストコマンドについてはCONTRIBUTING.mdを参照してください。 - 研究で NOOA を使用する場合は、提供された BibTeX エントリを使用して引用してください。
結論: NOOA は、通常のクラスのように感じられる LLM バックエンドのエージェントを書くための純粋な Python の方法を提供し、組み込みの型付け、トレーシング、オプションのメモリ/CLI 拡張を備えています。コード生成動作の柔軟性を求めつつ、標準的なソフトウェアエンジニアリングプラクティスを放棄したくない開発者を対象としています。
関連
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト
- プロジェクト