ARTICLE DETAIL

资讯详情

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

告别上下文爆炸:NOAA事件历史自动摘要与Context Blocks上下文工程指南

告别上下文爆炸:NOAA事件历史自动摘要与Context Blocks上下文工程指南 告别上下文爆炸NOAA事件历史自动摘要与Context Blocks上下文工程指南【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-Agents长对话、多轮工具调用之后AI Agent 的上下文窗口越来越挤token 成本飙升、回答质量下降甚至直接报错——这就是困扰所有 Agent 开发者的上下文爆炸问题。本文介绍 NVIDIA 开源的 Python Agent 框架NOOANVIDIA Object Oriented Agents的两套核心机制TokenBudgetSummarizer事件历史自动摘要与Context Blocks 上下文工程帮助新手用最小成本构建跑再久也不崩的 AI Agent。一、为什么 AI Agent 会上下文爆炸在 NOAA 中Agent 的每一次交互都会被记录为事件EventsLLM 调用、代码执行、错误、结果……这些事件构成了后续对话的历史。历史越长每次发给模型的 token 就越多。现象后果事件历史无限增长单次请求 token 爆炸、费用激增把项目状态塞进提示词每轮都重复付费提示词臃肿上下文窗口被撑满请求直接失败Agent失忆NOOA 的解法是把信息分成两类管理历史Events交给自动摘要压缩当前状态Context Blocks交给精心设计的上下文块。两者配合既省 token 又保证模型看得清、记得住。二、机制一TokenBudgetSummarizer 事件历史自动摘要1. 什么是 Token 预算摘要器TokenBudgetSummarizer是 NOAA 内置的自动摘要器当 Agent 事件历史的 token 数超过你设定的预算如 8 万它会在后台用同一个模型把较早的历史压缩成一段摘要同时保留最近的若干条事件不动。三个关键概念一看就懂max_tokens预算阈值历史超过这个 token 数就触发一次摘要preserve_recent保留近邻最新 N 条事件原样保留保证连贯性缓存共享摘要请求复用了父请求刚发过的前缀让模型服务商的输入缓存命中不额外花钱2. 它如何做到无感压缩这套机制有几个贴心的设计详见 docs/cache-sharing-summaries.md不阻塞主流程主 Agent 继续干活摘要在后台并行运行一次最多只有一个摘要在等待或执行安全落地摘要完成后会校验原始事件 ID 是否还匹配匹配才应用到下一轮历史失败自愈空内容、格式错误、被截断的摘要一律丢弃并告警连续失败两次后自动停止避免为无用摘要反复付费兜底不缺席即使摘要失败运行时的上下文溢出安全网仍会把更老的事件归档并自动重试3. 五分钟上手官方示例 examples/quickstart/09_summarization.py 用一个技术面试官演示了完整效果from nooa.agents import TokenBudgetSummarizer from nooa.config import TokenBudgetConfig agent InterviewAgent() TokenBudgetSummarizer.install(agent, configTokenBudgetConfig(max_tokens1000))每进行一轮提问你可以用agent.events.query()数一数事件数量——历史被自动折叠成摘要而evaluate()依然能基于完整面试印象给出评价。核心实现位于 src/nooa/agents/summarization.py配套的离线与端到端测试在 tests/agents/test_forked_summarizer.py。三、机制二Context Blocks 上下文工程1. Context Blocks 是什么Context Blocks上下文块是系统提示词中的命名分区——你可以像管理目录一样管理发给模型的每一份信息添加、覆盖、屏蔽、定位全部通过一个统一接口完成。API 全貌参考 skills/context-blocks/SKILL.md。2. 两种内容、两个位置自由组合上下文块有两条独立的选择轴组合出四种形态写法内容位置Context(固定文本, prefixTrue)固定内容前缀可跨轮缓存Context(exprself.render_state())每轮重新求值的活内容后缀易变区直接赋值字符串固定内容后缀易变区None—屏蔽该区块前缀prefix放在稳定、可缓存的区域。模型服务商能对相同前缀复用缓存省钱提速——适合 Agent 身份、工具文档、稳定策略表达式expr每一轮 LLM 调用前重新求值模型永远看到最新状态——适合实时进度、当前项目状态再看一个例子examples/quickstart/08_context_blocks.py# 活内容每轮自动刷新模型永远看到最新笔记 agent.context[notes] Context(exprself.render_notes()) # 固定内容钉进缓存友好的前缀适合策略与决策 agent.context[policy] Context(Always prefer rollback..., prefixTrue)实现源码位于 src/nooa/context_blocks/渲染与截断逻辑可深入 src/nooa/context_blocks/renderer.py 与 src/nooa/context_blocks/scoped.py支持with语句的临时上下文作用域。3. 每类信息该放哪里一张表讲清楚NOAA 官方概念文档 docs/concepts/prompts-and-context.md 给出了信息分家的黄金规则信息类型正确归宿Agent 全局角色与稳定约束类 docstring简短单次任务指令方法名 方法 docstring本次调用的数据方法参数需要跨轮持续可见的事实Context Blocks按时间顺序的交互历史Events交给摘要器管理只供 Python 使用的中间值私有字段不暴露给模型一句话总结历史用事件、状态用上下文块、指令用 docstring。把不该进提示词的东西留在普通 Python 字段里提示词自然就瘦了。四、实战清单长运行 Agent 的最佳实践✅开启 Token 预算摘要长对话 Agent 安装TokenBudgetSummarizermax_tokens按模型窗口留足余量设定✅状态有限再进 Context Block上下文块是刻意复述的当前信息不是数据库别把整个项目倒进去✅稳定内容放前缀初始化时设定的块加prefixTrue吃满模型缓存✅原始参数别手写进 docstring策略层已自动渲染参数并做尺寸控制重复插值只会绕过保护、放大提示词✅密钥与大对象留在隐藏字段需要时用有界渲染或确定性方法暴露给模型✅摘要失败要排查原因连续两次失败后自动摘要会停摆修复后再重新安装五、快速开始用uv安装 NOAA 核心框架然后直接跑官方示例uv init my-agent-project cd my-agent-project uv add nooa# 上下文块把活状态钉进提示词 uv run python examples/quickstart/08_context_blocks.py # 自动摘要历史折叠评估不失真 uv run python examples/quickstart/09_summarization.py更多可运行示例见 examples/README.md完整概念文档入口在 docs/README.md架构总览参考 docs/architecture.md。 提示NOOA 默认开启追踪tracing运行uv run nooa start-dev就能在浏览器里看到每次 LLM 调用的完整调用树直观观察摘要折叠前后上下文的变化。上下文爆炸不是宿命。用事件历史自动摘要管住过去用 Context Blocks 工程化现在你的 Agent 就能在几十个回合之后依然答非所问的概率趋近于零——这正是 NOAA Pythonic 构建 AI Agent 理念的精髓所在。【免费下载链接】labs-OO-AgentsNVIDIA Object Oriented Agents: the Pythonic way to build AI Agents.项目地址: https://gitcode.com/gh_mirrors/la/labs-OO-Agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表