ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

NOAA编排指南:如何用纯Python掌控Agent工作流,避免一个巨型Prompt

NOAA编排指南:如何用纯Python掌控Agent工作流,避免一个巨型Prompt NOAA编排指南如何用纯Python掌控Agent工作流避免一个巨型Prompt【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-AgentsNVIDIA labs Object Oriented AgentsNOAA是一个模型无关的 Python AI Agent 框架。这篇 NOAA 编排指南将告诉你如何用纯 Python 掌控 Agent 工作流——顺序、分支、重试、并发、验收标准——而不是把这些逻辑塞进一个巨型 Prompt让模型记住它该做什么。核心只有一句话让模型负责判断让 Python 负责流程。为什么一个巨型 Prompt是编排大坑️很多新手写 Agent 工作流的第一反应是第一步做计划第二步实现第三步审查第四步验证……请务必按顺序完成不要跳步然后祈祷模型听话。但 LLM 的记忆并不可靠它可能跳步、可能声称已验证却没验证、可能把三个任务的结果混在一起。Prompt 越长模型越容易丢失重点。NOAA 的编排理念恰好相反Agentic 方法擅长判断Python 擅长强制。可靠的工作流两者都用。核心思想一个方法 一次 LLM 任务在 NOAA 中一个方法体写成...省略号的方法就是生成方法——运行时由 LLM 驱动实现而有真实方法体的方法就是确定性的纯 Python。把大工作流拆成聚焦的小判断hidden async def run(self, request: str) - FinalResult: plan await self.plan(request) # LLM 任务 1规划 change await self.implement(plan) # LLM 任务 2实现 review await self.review(change) # LLM 任务 3审查 return self.accept(change, review) # 纯 Python验收每个阶段都有自己的签名、提示词、返回契约、追踪 span 和测试面。Python 让执行顺序变得不可商量——这不是请记得先做 A而是代码结构上必须先做 A。这个hidden装饰器的作用是隐藏整个编排入口防止生成代码递归调用整个工作流但它依然是 Agent 方法在追踪中依然可见。确定性验证门类型校验值Python 校验世界 ️一个精妙的分工谁来校验能校验什么Pydantic 类型行号是正数、类别是三选一、置信度在 0~1 之间纯 Python引用的文件真的存在、测试真的通过了、行号上的证据真的匹配官方文档给了一个代码审查 Agent 的范例async def discover(self, target: str) - list[Finding]: 发现候选问题并引用相关源码作为证据。 ... def evidence_exists(self, finding: Finding) - bool: # 确定性检查文件和行号上的证据是否真实存在 path (self._root / finding.path).resolve() lines path.read_text().splitlines() return finding.line len(lines) and finding.evidence in lines[finding.line - 1]discover()把模糊分析交给 LLMevidence_exists()做精确核对编排方法保证验证一定发生在结果流出工作流之前。永远不要问模型你验证过了吗然后把它的回答当证据。四个步骤搭建你的第一个 NOAA 编排工作流 选一个模型get_llm_client(gpt-5-mini)或任意 LiteLLM 支持的模型含本地 Ollama/vLLM。拆方法把分类、调查、编辑、验证这类混合职责拆成各自的 agentic 方法每个方法只承担一个判断。写编排入口用一个真实方法体的方法按顺序await各阶段插入if、重试、超时、验收逻辑。打开追踪每次 LLM 调用、代码执行、方法调用默认都有追踪父子 span 完整保留——uv run nooa start-dev启动可视化查看器在浏览器里看到整条流水线。 区分两个容易混淆的概念prefill省略号前的代码为一次 LLM 调用准备数据解决的是单次调用的准备orchestration编排解决的是多个方法之间的关系。详见示例 examples/advanced/prefill.py。多 Agent 协作子 Agent 也只是 Python 对象 当一个任务需要独立的模型交互历史、上下文、工具状态或可复用角色时才引入子 Agent。子 Agent 就是一个普通的 Python 对象class AnswerPipeline: def __init__(self, llm): self.researcher Researcher(llmllm) self.writer Writer(llmllm) async def run(self, question: str) - str: evidence await self.researcher.research(question) return await self.writer.write(question, evidence)关键要点协调器不需要继承Agent。如果协调类里没有任何 agentic 方法它就是普通 Python 类——拥有 Agent 实例并调用它们即可。子 Agent 不自动继承父级的历史和上下文数据通过类型化参数显式传递。图/链框架的映射边变成普通 Python 调用条件变成if扇出fan-out变成asyncio.gather。并发时每个任务一个独立实例因为内置策略会在单实例上串行化生成调用。常见错误清单避坑指南把整个工作流塞进一个巨型 agentic 方法 ❌让 LLM 记住必经步骤而不是把步骤编码进 Python ❌接受模型自己编写的证据不去核对外部状态 ❌把关键预处理写在模块级代码里导致它从 Agent 调用追踪中消失 ❌纯确定性协调的类也硬去子类化Agent❌用 LLM 做监督者路由而这个路由其实可以用确定性 Python 表达 ❌拆分的黄金法则如果一个类里没有任何 agentic 方法它大概不需要继承Agent。Agent 太多会带来更多提示词、历史、模型调用和故障边界——把每个函数都拆成 Agent 不是扩展性策略。延伸资料 想了解什么去哪里编排完整概念分解、证据门、常见错误docs/concepts/orchestration.md多 Agent 隔离、并发、持久化docs/concepts/multi-agent-systems.mdAgent 与方法的设计原则docs/concepts/agents-and-methods.md10 分钟框架全景 Tourdocs/tour.md组合子 Agent 的交互式教程notebook_tutorials/04_composing_subagents.ipynb一句话总结 NOOA 的编排哲学从一个会思考的方法开始外面包一层窄窄的 Python 接口只有当工作确实需要独立角色或状态边界时才引入更多对象。【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-Agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表