Flue Agent行为规格全解:6大内置工具、沙箱环境与上下文限制一篇看懂
【免费下载链接】flueThe sandbox agent framework.项目地址: https://gitcode.com/GitHub_Trending/flue1/flue
Flue 是一个开源的沙箱 Agent 框架(The Agent Harness Framework),让开发者用 TypeScript 构建真正自主的 Agent。这篇文章带你全解 Flue Agent 的默认行为规格:开箱即用的 6 大沙箱工具、沙箱环境默认、消息处理队列、上下文窗口管理与运行时硬限制——不读源码,一篇看懂你的 Agent 在"出厂状态"下会做什么。
🧰 内置工具全家桶:6 个沙箱工具 + 框架保留工具
Agent 一旦挂上沙箱,模型就自动获得 6 个作用于沙箱的工具,每个都有精心设计的"防翻车"规则:
| 工具 | 作用 | 关键规则 |
|---|---|---|
read | 读文件 | 输出截断到2000 行 / 50 KB(先到为准),并附"用 offset=N 继续"标记,长文件可分页读完 |
write | 整文件写入 | 自动创建缺失的父目录,已存在则静默覆盖 |
edit | 精确文本替换 | oldText必须唯一命中一处,歧义会报错让模型补充上下文;同文件变更加锁串行,冲突报错而非静默丢编辑 |
bash | 执行 shell 命令 | 只返回尾部2000 行 / 50 KB(错误和结果都在尾部);超时返回可恢复的 exit-124,模型能自行应对 |
grep | 正则搜索文件内容 | 上限100 条匹配、每行 500 字符,超限会提示"换个更精确的搜索" |
glob | 按文件名找文件 | 最多返回1000个路径,匹配的是文件名而非路径 |
除沙箱工具外,框架还会按能力自动追加保留工具(自定义工具不能占用这些名字):
task:子代理委托,永远存在,声明子代理后即可用;activate_skill:Agent 加载技能(当挂载了技能时出现);read_skill_resource:读取导入技能携带的资源文件。
💡 注意:某个沙箱适配器可以替换这 6 个默认工具,使用前建议先查对应集成的文档。完整规格见 agent-behavior.md#L15-L97。
📦 沙箱环境默认:不挂沙箱 = 没有文件工具
这是新手最容易误解的一点:Agent 默认没有沙箱,必须用useSandbox()显式挂载,且最多挂一个。
- 没挂沙箱时:6 个文件/Shell 工具不在工具集里、系统提示词中不含工作区上下文、
harness.sandbox会抛错。但自定义工具、技能、子代理、持久状态一切照常。 - 挂载沙箱时:一次性获得工具集、工作区上下文(工作目录路径 + 目录列表 +
AGENTS.md内容)、工作区技能发现,并让子代理继承同一环境。 - 动态可切换:每轮对话边界都会重新读取沙箱挂载状态——条件式
useSandbox()可以在对话中途挂上或卸下环境,变化会以environment信号"叙述"给模型,而不是重写提示词。
官方建议:选择能支撑任务的最小环境,因为环境越大,模型可读取、修改、执行和触达的范围就越大。详见 sandboxes.md。
📬 消息处理机制:submission 排队,一条都不丢
无论输入来自 HTTP 请求、dispatch()、渠道投递还是定时触发,Flue 都把它登记为一个submission(提交项),在任何模型工作开始前先持久化落盘。同一条会话的 submissions 按接收顺序排队:
- 一次只处理一个 submission;
- Agent 正忙时到达的消息,能并入当前响应就在下一个轮次边界并入,不能并入就排成自己的 submission——任何消息都不会被丢弃;
- 每个被接受的 submission必然到达唯一的持久终态:
completed、failed或aborted,期间崩溃多少次都不影响。
重试、恢复与中止的完整机制属于持久性(Durability)范畴,参考 durability.md。
🧠 上下文窗口:系统提示词如何"冻结"又如何压缩
初始化时,运行时把找到的内容组装成系统提示词:Agent 函数返回的指令,加上(若有沙箱时)工作目录路径、目录列表、AGENTS.md内容,以及发现到的技能 / 子代理 / 工具清单。
组装完成后,系统提示词就被冻结(frozen):
- 窗口中途发生的变化(工具挂载/卸载、技能开关、环境切换)不会重写提示词,而是以只追加的**信号(signals)**形式叙述给模型——既保证历史轮次与它实际运行的提示词一致,又能让模型商的提示词缓存保持"热"、更省钱。
- 直到下一次**压缩(compaction)**发生,才会按当前环境重新打基线。
当对话逼近模型的上下文窗口时,运行时会自动压缩:旧消息折叠成摘要,近期消息逐字保留:
- 触发阈值 = 窗口大小 − 模型感知的预留量(上限 20,000 tokens);
- 默认最近 8,000 tokens 逐字保留。
两个旋钮、摘要模型与退出压缩,都通过CompactionConfig配置,详见 agent-hooks-api.md。
📊 运行时限制速查表:所有硬上限一览
以下是运行时强制执行的数字,来自 agent-behavior.md#L172-L181:
| 限制项 | 数值 |
|---|---|
read输出 | 2000 行 / 50 KB,头部截断 + 续读标记 |
bash输出 | 2000 行 / 50 KB,尾部截断 |
grep结果 | 100 条匹配,每行 500 字符 |
glob结果 | 1000 个路径 |
| 委托深度 | 4 层——task链更深则报delegation_depth_exceeded |
| 压缩预留 | 模型感知,上限 20,000 tokens |
| 压缩后逐字保留 | 默认 8,000 tokens |
⚠️ 工具集数量没有框架上限,但每挂一个工具都要花上下文——工具多时记得保持精简(参考 tools.md 中的"条件工具")。
✅ 小结:Flue Agent 行为规格一句话版本
- 默认无沙箱:
useSandbox()才是开关,挂了才有 6 个文件/Shell 工具; - 消息零丢失:submission 持久化 + 排队 + 唯一终态;
- 提示词冻结 + 信号通知:省缓存、保一致;
- 自动压缩:旧消息摘要化,近 8,000 tokens 逐字保留;
- 硬限制有限:委托深度 4 层,输出截断规则清晰可预期。
延伸阅读(相对路径):
- 官方行为规格文档:apps/docs/src/content/docs/reference/agent-behavior.md
- 沙箱指南:apps/docs/src/content/docs/guide/sandboxes.md
- 子代理指南:apps/docs/src/content/docs/guide/subagents.md
- 技能指南:apps/docs/src/content/docs/guide/skills.md
- 运行时核心源码:packages/runtime/src/
【免费下载链接】flueThe sandbox agent framework.项目地址: https://gitcode.com/GitHub_Trending/flue1/flue
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考