)
一文读懂NOAA架构元类如何把...方法变成LLM智能体源码级拆解【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-AgentsNOAANVIDIA Object Oriented Agents是一个 Pythonic 的 AI Agent 框架它用**元类metaclass**在类创建时自动识别方法体以...结尾的方法并将其变成由 LLM 生成实现的智能体方法。本文从源码级拆解 NOAA 架构AgentMeta元类如何扫描类命名空间、...标记如何用 AST 检测、以及调用时如何路由到生成策略——帮你快速理解 LLM 智能体框架的核心机制。一句话的...如何变成 LLM 智能体传统 Agent 框架里提示词、工具、回调、工作流是一堆零散的抽象。NOAA 的做法是一个 Python 类 状态 能力 提示词 类型契约。class SupportAgent(Agent): You are a support agent. # 类文档字符串 系统提示词 order_db: OrderDB # 字段 状态 def is_refund_eligible(self, order: Order) - bool: return order.delivered ... # 真实方法体 确定性 Python async def triage(self, message: str, order: Order) - Ticket: Create a typed support ticket. ... # ... 交给 LLM 实现有真实方法体 → 按普通 Python 运行以...结尾的async def→ 变成智能体方法调用时由 LLM 生成实现并返回符合类型契约的结果。你不需要工具注册表、图编译器或单独的调用 API——Python 类本身就是可执行定义见 docs/architecture.md。NOAA 架构速览从类定义到 LLM 生成的四个阶段 整个架构可以拆成四个阶段对应仓库中的核心模块阶段做什么核心模块① 类创建时元类扫描方法自动包装...方法src/nooa/metaclass.py② 识别阶段用 AST 判断方法体是否以...结尾src/nooa/ellipsis_detection.py③ 调用阶段统一 wrapper参数校验、追踪、路由src/nooa/runtime/method_wrapper.py④ 生成阶段策略驱动 LLM 生成实现Predict / CodeActsrc/nooa/strategies/Agent基类通过class Agent(metaclassAgentMeta)启用这一机制见 src/nooa/agent.py并设置_enable_tracing True打开约定式追踪。源码拆解①AgentMeta 元类——类创建时的自动包装核心入口是 AgentMeta.new每个继承Agent的类被定义时元类会遍历该类的命名空间按方法形态分派异步生成器async defyield→ 仅加追踪 wrapper协程函数async def→ 若方法体是...则标记需要生成同时按需加追踪同步方法def→ 不能调用 LLM只做追踪双下划线方法直接跳过property/classmethod/staticmethod不是普通函数天然被跳过。几个值得注意的设计约定优于配置类上设置_enable_tracing True即启用追踪方法上加 no_trace 装饰器可单独退出策略可覆盖strategy装饰器会写入_strategy_override元数据元类在 _resolve_strategy 中读取否则运行期用默认策略防御式校验_reject_ellipsis_generator 会在类创建时直接报错——生成器方法含yield不能用...标记因为生成只产出单个最终结果与流式语义矛盾鸭子类型路由包装后的方法不依赖Agent类型。调用时若self有runtime属性就走 Agent 路径否则直接调用原函数——这让元类也能用于策略类等非 Agent 对象。源码拆解②...是如何被精准识别的这个方法需要 LLM 吗的判断逻辑在 src/nooa/ellipsis_detection.pyhas_ellipsis_body 解析函数源码的AST去掉文档字符串后检查最后一条语句是否为...。这意味着方法体可以在...之前写前置代码如初始化变量仍被视为生成方法get_pre_ellipsis_code 把...之前的代码提取出来作为预置代码保留给 LLM 生成流程对动态生成的函数无源码回退到字节码启发式判断has_ellipsis_marker 则更广连yield ...也算生成标记用于生成器场景的报错提示。一句话总结...不是 Python 的占位语法糖而是 NOAA 自定义的生成契约——用 AST 精确识别而非文本匹配。源码拆解③调用时wrapper 如何路由方法被调用时进入统一 wrappercreate_agent_method_wrapper。它的职责链是参数校验按签名校验实参剥离框架保留的 kwargs解析策略strategy覆盖 → 否则用默认策略CodeAct生成 LLM 调用 ID 与追踪属性记录嵌套深度、父调用关系触发钩子before/after agent call 中间件产生事件与追踪 span交给运行时由 runtime 组装上下文块、事件历史驱动策略生成实现并校验返回类型。生成完成后返回值会按方法签名做类型校验校验失败会作为反馈返回给策略重试而不是把非法值泄露给调用方。整个过程对外就是一个普通的await agent.triage(...)。生成策略...最终怎么变成真实实现策略层在 src/nooa/strategies/两大主力PredictStrategypredict.py一次性结构化输出尝试 类型校验适合分类、抽取这类不需要工具的任务CodeActStrategycodeact.py给模型一个 Jupyter 风格的 Python REPL它通过写代码来行动——可以self.xxx()调用可见方法、访问实时对象、使用工具循环执行直到产出符合返回类型的结果。这是默认策略。也就是说元类负责发现...wrapper 负责调度策略负责实现。三层分工清晰也方便替换执行引擎见 examples/advanced/swappable_execution_engines.py。三个常见坑与最佳实践 ⚠️...必须是最后一条语句写在中间或前面不会被识别为生成方法文档字符串除外生成器方法不能带...def/async def含yield再加...会在类定义时直接抛TypeError这是刻意的快速失败设计同步方法只会被追踪def方法不会触发 LLM 生成需要异步 LLM 调用的逻辑请写成async def。最佳实践确定性逻辑写真实方法体可测试、可缓存把需要判断力的步骤留给...方法并通过类型注解给 LLM 一个明确的输出契约。快速上手5 分钟写第一个 NOAA 智能体 pip install nooa # 或 uv add nooafrom nooa import Agent, llm class Analyst(Agent, llmllm): async def classify(self, text: str) - str: Classify the text as positive or negative. ...想跟读官方教程可以从 10 分钟巡礼 docs/tour.md 入手第一个生成方法的完整示例见 examples/quickstart/01_first_generation_method.pyAgent 与方法的概念细节见 docs/concepts/agents-and-methods.md。小结NOAA 架构的精髓在于把LLM 生成实现这个动作收敛为一个元类 一个...标记——类创建时识别AST、调用时路由wrapper、运行时生成策略让 AI Agent 的开发回到最熟悉的 Python 类范式。读懂了 metaclass.py 这一个文件NOAA 的核心机制你已经掌握了大半。【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-Agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考