NVIDIA-NeMo/labs-OO-Agents

NVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.

NVIDIA-labs 面向对象智能体(NOOA)

它是什么 – NOOA 是一个模型无关的 Python 框架,用于构建 AI 智能体。它允许你将智能体编写为普通的 Python 类:字段保存状态,常规方法是确定性代码,而方法体仅为 ... 的方法是智能体方法——它们在运行时由 LLM 根据方法的签名和文档字符串填充。

为什么重要 – 通过将整个智能体视为单个对象,NOOA 消除了许多其他框架所需的单独提示、工具和工作流规范。这使得智能体更容易使用普通的 Python 工具进行测试、版本控制和重构。


关键思想

思想 它给你什么
智能体是 Python 对象 状态存在于实例上,类型提示成为契约,文档字符串成为提示。
... 方法体成为 LLM 驱动的方法 在调用时,框架将签名和文档字符串发送给语言模型,接收生成的 Python 代码,验证并执行它。
类型化输入/输出和自动重试 输入和输出类型被强制执行,运行时将自动重试失败的生成。
活对象参数 方法可以接收对其他对象的引用,因此模型可以直接操作现有状态。
内置追踪 每个 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 生成的分析。更改方法名称、参数或文档字符串会自动更改提示。


安全说明

  • NOOA 是研究软件;生成的代码可以执行任意操作。框架执行静态 AST 检查和模块拒绝列表,但这些不是安全边界。
  • 当智能体执行生成的代码时,在操作系统级沙箱(容器、VM 或 NVIDIA OpenShell)中运行它们。
  • 当生成会产生流(不支持)或违反契约时,库会提供清晰的错误消息。

何时使用 NOOA

  • LLM 驱动的助手的快速原型开发,希望智能体的状态和能力用普通 Python 表达。
  • 构建使用工具的智能体 – 生成的代码可以导入模块、调用其他对象,或使用内置的 MemoryManager 进行长期上下文。
  • 智能体架构研究 – 框架是模型无关的,并包含基准测试套件(nooa-bench)和评估管道。
  • 与现有代码库集成 – 因为智能体只是类,你可以将它们放入任何 Python 项目,并使用 pytest 测试它们。

文档和资源


贡献和许可

  • 在 Apache 2.0 下开源。
  • 开发使用 uv 进行环境管理;参见 CONTRIBUTING.md 了解工作流程、预提交钩子和测试命令。
  • 如果在研究中使用 NOOA,请使用提供的 BibTeX 条目引用该工作。

底线: NOOA 为你提供了一种纯 Python 的方式来编写 LLM 支持的智能体,感觉像普通类,内置类型、追踪和可选的内存/CLI 扩展。它面向那些想要代码生成行为的灵活性而不放弃标准软件工程实践的开发者。

相关

  • 项目
  • 项目
  • 项目
  • 项目
  • 项目