Unreal Agent Context Builder 设计解析:纯内存上下文构建与截断压缩报告机制
Unreal Agent Context Builder 设计解析纯内存上下文构建与截断压缩报告机制【免费下载链接】unreal-agentAsync-first agent harness项目地址: https://gitcode.com/gh_mirrors/un/unreal-agent在 AI Agent 框架中上下文构建决定了模型每一轮能看到什么、看不到什么。Unreal Agent 是一个异步优先async-first的智能体框架其 Context Builder 采用纯内存上下文构建策略不发起任何 I/O、不依赖持久化只在内存中组装发给大模型的请求并附带一份截断压缩报告Report透明地记录被省略、截断或压缩的内容。本文将带你读懂这套机制的设计思路。Context Builder 在 Unreal Agent 中的位置 Unreal Agent 的 harness 库由多个协作组件构成Context Builder 是其中职责最纯粹的一个。官方组件表对它的定义只有一句话见 README.md有状态地在内存中组装模型输入返回模型输入以及任何被省略、截断或压缩内容的记录不执行 I/O不接受持久化依赖。它和相邻组件的分工如下组件职责与 Context Builder 的关系Session Inbox会话级输入去重产出的输入交给 Builder 拼装Coordinator执行 LLM 轮次每轮调用Build()取请求Session Store持久化会话历史Builder 完全不碰它LLM Adapter发送请求、认证、取消只接收 Builder 构建好的请求这种单一职责 零 I/O的划分让上下文构建逻辑可以独立测试、独立替换——这是理解后续所有设计决策的起点。纯内存设计为什么禁止 I/O核心约束写在包注释里contextbuilder.go// Package contextbuilder defines I/O-pure, in-memory model request construction.禁止 I/O 带来三个实际好处可预测性——构建请求是同步、确定性的操作不会因网络或磁盘延迟阻塞 Coordinator 的事件循环可测试性——所有行为都能在纯内存中用单元测试覆盖参考实现的全部行为由 builder_test.go、control_test.go、submission_test.go 验证可替换性——接口 Builder 不绑定任何存储后端你可以实现一个带真实截断/压缩策略的 Builder 注入进来。截断压缩报告机制Report 与 Change 这套机制是 Context Builder 最有辨识度的设计。构建结果不是裸请求而是Result结构contextbuilder.gotype Result struct { Request llm.Request // 发给模型的请求 Report Report // 构建过程中发生什么变化 }报告由若干Change记录组成每种变化都有明确的类型变化类型含义omitted省略某段内容完全没进上下文truncated截断某段内容被截短compacted压缩某段内容被摘要或重写每条Change还带有Source来源和Reason原因字段contextbuilder.go。这个设计的价值在于上下文透明性调试模型为什么没看到某个文件内容这类问题时你不需要猜直接看 Report 即可。参考实现目前返回空报告builder.go因为内置策略不做删减但接口已为自定义的截断/压缩策略预留了上报通道。两段式状态committedPrefix 与 stagedSuffix ✂️Builder 的内部状态只有一组核心字段builder.gotype builder struct { request llm.Request preamble string systemPrompt string committedPrefix []llm.Item // 已提交前缀 stagedSuffix []llm.Item // 暂存后缀 }这体现了一种两阶段提交思想暂存staged外部输入、心跳消息、工具结果先进入stagedSuffix尚未定稿提交Commit调用 Commit() 把暂存区整体并入前缀构建BuildBuild()把committedPrefix stagedSuffix拼成最终输入并返回不改变 Builder 自身状态。Coordinator 在每个 LLM 轮次开始前调用Build()loop.go拿到请求后交给 LLM Adapter 发送。Builder 本身作为 Coordinator 的依赖注入coordinator.go整个过程对持久层完全无感。各类事件如何进入上下文Builder 接口按事件类型划分入口方法contextbuilder.go每类事件的处理策略值得细看1. 外部输入——AddExternalInput校验输入类型后解码为文本作为用户消息进入暂存区builder.go。2. 控制消息—— 分两种模式builder.goUpdateSettings只更新模型的推理强度等配置不产生对话内容Heartbeat心跳唤醒则把唤醒原因作为用户消息加入上下文。3. 模型响应——AddModelResponse直接把模型输出追加到已提交前缀因为模型自己的历史是定稿的。4. 工具结果与运行占位符—— 这是异步优先架构的精华。Unreal Agent 的工具调用是异步的发起后立即返回后台执行。尚未完成时上下文里放一个占位结果builder.goTool call is still running. Its result arrives in a later turn: continue with independent work, or end your turn to wait for it.结果真正到达后AddToolResult会用真实输出替换掉占位符builder.go避免上下文里出现过期状态。5. 技能Skills—— 通过go:embed嵌入提示词模板把宿主选择的技能列表序列化成 XML 清单追加到系统提示词末尾skills.go让模型知道有哪些专长可用、何时用SkillUse加载。系统提示词本身 内置前导词 宿主提示词 技能清单。内置前导词prompts/preamble.md专门教模型理解异步轮次语义每个轮次都会重发完整对话所以应并行发起相互独立的工具调用调用运行中结束轮次等于睡觉等待而没有任何运行中调用时结束轮次则意味着会话结束。这套设计给 Agent 开发者的启发 ✅把 harness/contextbuilder/ 作为参照实现可以提炼出四条实践请求构建与持久化解耦——上下文组装是纯函数式的内存操作持久化交给 Session Store两边各自可测透明优于静默——任何对上下文的删改都应通过 Report 上报省略/截断/压缩 来源 原因这是可调试性的关键占位符模式处理异步结果——运行中的工具调用先占坑结果到达再替换模型永远看不到矛盾状态两阶段提交管理定稿边界——已定稿的前缀与未定稿的暂存区分离Commit明确划定提交点。如果你想动手实践可以从 harness/contextbuilder/contextbuilder.go 的接口定义读起再看 builder.go 的参考实现最后结合 harness/coordinator/loop.go 观察它在真实轮次中的调用位置。纯内存 报告机制的组合让模型到底看到了什么从玄学变成了可以逐条审计的工程问题——这正是 Unreal Agent Context Builder 设计中最值得借鉴的部分。【免费下载链接】unreal-agentAsync-first agent harness项目地址: https://gitcode.com/gh_mirrors/un/unreal-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

如何3步装好human-writing:一句话让Agent完成安装的快速教程

如何3步装好human-writing:一句话让Agent完成安装的快速教程

如何3步装好human-writing:一句话让Agent完成安装的快速教程 【免费下载链接】human-writing 让 AI 写的中文读起来像一个具体的人在说话。通用创作与改稿 Skill,开箱即用。 项目地址: https://gitcode.com/gh_mirrors/hu/human-writing human-wr…

2026/9/25 6:58:24 阅读更多 →
金融场景下Claude协作体系:Managed Agents API与plugin实战

金融场景下Claude协作体系:Managed Agents API与plugin实战

1. 金融场景下的 Claude 协作体系拆解1.1 为什么金融行业需要一套独立的协作规范金融行业对 AI 工具的使用,跟一般互联网团队完全不是一个逻辑。普通团队用 Claude 写代码、改文案,出错了大不了重来;但金融场景里,一段自动生成的合…

2026/9/25 6:58:24 阅读更多 →
华为Atlas 300V 24G推理卡部署YOLO实战指南

华为Atlas 300V 24G推理卡部署YOLO实战指南

1. Atlas 300V 24G 到底是什么卡1.1 从热搜词说起:它是不是“运算加速卡”最近后台和群里不少人在问“atlas 300v 24g 是运算加速卡吗”,然后紧接着的下一句基本都是“能不能用来跑 YOLO”。先把结论放这儿:Atlas 300V 24G 是华为昇腾生态下的…

2026/9/25 6:58:24 阅读更多 →

最新新闻

OpenRouter+Agent+CLI+MCP:从零搭建AI命令行代理工具链实战

OpenRouter+Agent+CLI+MCP:从零搭建AI命令行代理工具链实战

1. 从"treg"这个标题说起:一个被低估的CLI工具链整合思路第一次看到"treg"这个标题,我脑子里蹦出来的第一反应是"这又是什么缩写"。翻了一圈热词列表,OpenRouter、agent、CLI、MCP这几个词反复出现&#xff0c…

2026/9/25 10:07:01 阅读更多 →
开源代码评审新范式:规则驱动+LLM增强的多语言CR实践

开源代码评审新范式:规则驱动+LLM增强的多语言CR实践

1. 项目概述:这不是一个工具,而是一套可落地的开源代码评审范式“open-code-review”这个词乍看像某个GitHub仓库名,但实际它代表的是一种正在快速演进的工程实践——把传统依赖人工、靠经验、看心情的代码评审(Code Review&#…

2026/9/25 10:07:01 阅读更多 →
openclaw卸载终极大法:用不上、不想要、修不好,一次清干净

openclaw卸载终极大法:用不上、不想要、修不好,一次清干净

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/25 10:07:01 阅读更多 →
从本地踩坑到云端落地:FramePack+ComfyUI图生视频部署与调优实战

从本地踩坑到云端落地:FramePack+ComfyUI图生视频部署与调优实战

图生视频这件事,我从去年就开始折腾了。最开始是在本地那台带RTX 4060 Laptop的机器上跑,结果显存告急、驱动崩溃、D3D设备移除轮番上阵,折腾了整整一个周末才勉强跑通一个5秒的片段。后来转向云端GPU租用,才算真正把这条路走顺了…

2026/9/25 10:07:01 阅读更多 →
Status Deck:全栈开发者桌面仪表盘实战

Status Deck:全栈开发者桌面仪表盘实战

先说结论:Status Deck 是我给自己写的一个桌面仪表盘,跑在本机,全天候盯着我关心的那几件事——PR 有没有人 review、CI 有没有挂、本地那几个服务是不是还活着、磁盘还剩多少、今天的构建产物有没有偷偷胖一圈。它既不是在浏览器标签页里再开…

2026/9/25 10:07:01 阅读更多 →
以http开头的URL:从结构解析到故障排查实战

以http开头的URL:从结构解析到故障排查实战

写这种“以 http 为协议头开头的 url”的话题,很多人第一反应是:这有什么好说的?不就是http://开头的一串字符吗?但实际上,这些年我排查过不少线上问题,从 URL 编码错误导致接口 400,到明明看着…

2026/9/25 10:06:00 阅读更多 →

日新闻

AI元人文:从工具使用到思维重构的深度探索

AI元人文:从工具使用到思维重构的深度探索

最近半年我一直在琢磨一件事:AI元人文到底是什么?说白了,就是“用元视角重新审视人与AI的关系”,也在“探索AI如何反向逼着我们发现自己的思考边界”。标题里的“元探索”,在我看就是一层套一层的追问——当你用AI解决…

2026/9/25 0:00:41 阅读更多 →
Python+CNN车牌识别实战:从数据预处理到模型训练与部署

Python+CNN车牌识别实战:从数据预处理到模型训练与部署

简介:基于Python与卷积神经网络的车牌识别项目,面向计算机视觉初学者及智能交通开发者,目标是帮助用户掌握从数据预处理、模型构建到实际部署的完整流程。压缩包共25个文件,包含jpg/png图像样本、py训练脚本、md说明文档、dat数据…

2026/9/25 0:00:41 阅读更多 →
Vim基础操作全攻略:保存退出、模式切换与高频命令实战

Vim基础操作全攻略:保存退出、模式切换与高频命令实战

1. 项目概述1.1 核心需求解析今天聊聊Vim。写这个题目的原因是:几乎每个后端开发者、运维人员、数据工程师某天都会遇到一个场景——深夜加班,服务器登录界面只有黑底白字,编辑器只有vi/vim,你必须在五分钟内完成一次配置修改并保…

2026/9/25 0:00:41 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →