新闻详情

新闻详情

首页 / 资讯中心 / 详情

Unreal Agent 工具系统拆解:Tool Translator 如何让 AI 工具调用完全无阻塞

发布时间:2026/11/15 8:51:25来源:尧图网络
Unreal Agent 工具系统拆解:Tool Translator 如何让 AI 工具调用完全无阻塞
Unreal Agent 工具系统拆解Tool Translator 如何让 AI 工具调用完全无阻塞【免费下载链接】unreal-agentAsync-first agent harness项目地址: https://gitcode.com/gh_mirrors/un/unreal-agentUnreal Agent 是 Unreal Labs 开源的 Async-first异步优先AI Agent 执行框架。本文拆解它的工具系统模型发出 Tool Call 后由 Tool Translator 在协调器事件循环上同步完成校验与翻译把真实工作打包成可序列化的 Operation 交给独立运行时异步执行——工具跑得再慢也永远不会阻塞 Agent 的主循环 为什么 AI Agent 最容易卡在“工具调用”上传统写法里Agent 收到模型的工具调用后会直接执行跑一条ls、读一张图、装一个依赖……执行期间主流程只能干等。命令跑 30 秒整个会话就冻结 30 秒多个工具调用之间也无法并行。Unreal Agent 给出的答案是彻底解耦“翻译”和“执行”核心就一条规则来自项目 README.md 的术语表Tool translator只做两件事校验工具调用、把它翻译成若干 Operation。它在协调器事件循环上同步运行禁止做任何 I/O、禁止挂起循环。也就是说真正干活跑 shell、读文件、看图片全部下沉到独立的 Operation 运行时协调器只管记账和调度。核心角色一个“纯函数”式的 Tool TranslatorTranslator 的接口只有两个方法定义在 harness/tool/tool.goTranslate(ctx, call)—— 模型给出工具调用后纯内存地完成参数校验产出CallStatusTranslateResult(callID, status, operations)—— 把记录在案的状态与操作输出格式化成模型能读懂的结果文本。CallStatus的取值也极简只有两种结果harness/tool/tool.go结果含义Error校验失败直接把错误信息回给模型WaitingFor翻译成功附带已提交 Operation 的 ID 列表以 Bash 工具为例harness/tool/bash/bash.go解析command参数 → 检查 NUL 字节等非法输入 → 构造一个 Shell 类型的operation.Spec→ 调用ctx.Submit(spec)拿到 ID → 返回WaitingFor: [id]。全程没有执行命令没有网络请求微秒级完成 ✅这里的关键是Context.Submit的契约harness/tool/tool.go只分配 ID、记录惰性数据不做 I/O、不向其他队列派活。工作稍后才由协调器统一派发保证事件循环的原子性。三层流水线Tool Call → CallStatus → Operation整个工具系统就是一条单向流水线每一层职责清晰模型发出 Tool Call │ ▼ Tool Translator同步、无 I/O在协调器事件循环上运行 │ 校验 翻译 ▼ CallStatusError 或 WaitingFor 操作 ID─── 原子写入 Session Store │ ▼ Operation Manager独立 Actor 运行时异步执行 shell / 读图等真实工作 │ 完成后推送状态更新 ▼ TranslateResult → 工具结果回填模型上下文 → 进入下一轮Operation本质上是一个可序列化的工作描述harness/operation/operation.go带 ID、类型、版本、状态和 JSON 状态的不可变值对象。它的状态机很直观ready → awaiting → completed / failed / canceledharness/operation/operation.go。默认实现是LocalOperationManagerharness/operation/local_manager.go——一个自带 goroutine 的 Actor 运行时协调器通过Add把操作丢进来它通过Updates()通道把状态变更推回来。注意接口注释里的点睛之笔“local implementation is swappable”未来可以换成远程代理管理器把操作序列化后发到远程沙箱里执行而协调器一行代码都不用改。协调器事件循环无阻塞的“心脏”在哪里跳翻译只是第一步不阻塞的真正保证在协调器主循环harness/coordinator/loop.go一个select统一多路等待同时监听 Inbox 输入、Operation 状态更新、模型响应、心跳定时器和宽限定时器。谁先到就处理谁没有任何“轮询等待某个工具”的逻辑。模型调用本身也异步化requestModelResponse里用go func()把 LLM 请求丢到后台harness/coordinator/loop.go响应通过 channel 回传等待期间循环照样响应新输入。操作派发是批量且幂等的dispatchOperationToManager跳过已终态的操作保证同一 ID 最多入队一次。长时间等待有“心跳”兜底当只有工具调用在跑时按ToolHeartbeatInterval定期向 Inbox 投递 Heartbeat 控制消息把正在运行的工具调用列表汇报出来harness/coordinator/loop.go用户能实时看到进度而不是面对一片死寂。所以哪怕模型一口气并行发出 5 个 Bash 调用协调器也只是 5 次微秒级的翻译 派发然后继续处理下一条用户消息——这就是标题里“完全无阻塞”的由来 内置三件套Bash、ViewImage、SkillUse工具集是固定注册表模式由 harness/tool/static.go 声明三个静态工具注册表在 harness/tool/registry.go 中构建工具能力特点Bash后台执行 shell 命令描述中明确鼓励“独立命令以并行工具调用方式发出”ViewImage查看本地 JPEG/PNG/BMP/TIFF/WebP 图片路径相对于工作区SkillUse按名称加载已注册技能的指令技能动态注册/注销两个值得一提的细节优雅降级如果某工具未配置注册表会装入一个unavailableTranslatorharness/tool/static.go翻译时直接返回“not configured”错误状态模型收到友好提示而不是崩溃。技能动态发现DiscoverSkills会扫描目录下*/SKILL.md的 YAML frontmatterharness/tool/registry.go技能可运行时注册SkillUse工具则把“读取技能文件”也做成一个异步 Operationharness/tool/skill_use.go——连读文件都不例外一切走操作流水线。为什么这套设计“断电也能续命”无阻塞之外还有一个隐藏福利每个工具调用的状态都随 Operation 原子落盘。协调器翻译完成后立刻把ToolCallStatus追加写入 Session Storeharness/coordinator/loop.go会话历史是追加式append-only可 fork 的harness/sessionstore/恢复时按页加载历史并对每条记录过的调用校验工具是否仍可用harness/coordinator/loop.go操作本身带版本号且永远可序列化LocalOperationManager在重启后能把未完成的 Shell 操作从断点继续。这意味着Agent 跑到一半被杀掉重启后能精确恢复“哪些工具调用还在等待、输出写到哪里了”而不是从头再来。对跑长任务的 Agent 来说这比单纯“不阻塞”更值钱 关键源码索引想深入阅读的话按这个顺序走最短路径工具抽象与翻译契约harness/tool/tool.go工具注册表与技能发现harness/tool/registry.go工具 JSON Schema 定义harness/tool/static.goBash 翻译器示例harness/tool/bash/bash.goOperation 值对象与状态机harness/operation/operation.go本地操作 Actor 运行时harness/operation/local_manager.go协调器事件循环与心跳harness/coordinator/loop.go可执行的 Runner 入口cmd/unreal-agent-runner/main.go设计约定词汇表与组件表README.md一句话总结Unreal Agent 的工具系统用了一个朴素但威力巨大的原则翻译要快执行要慢两者必须分家。Tool Translator 像海关一样只做秒级查验放行把“重活”打包成带 ID 的 Operation 交给独立的 Actor 运行时慢慢干协调器靠单一事件循环 channel 心跳在工具漫长执行期间保持全速响应。理解了这个“翻译/执行分离 操作流”模型再回头看市面上任何 Agent 框架的卡顿与恢复问题都会清晰许多 【免费下载链接】unreal-agentAsync-first agent harness项目地址: https://gitcode.com/gh_mirrors/un/unreal-agent创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

【外设】之大彩串口显示屏 2026/11/15 4:54:16

【外设】之大彩串口显示屏

大彩串口屏初步使用 1 .官网下载 STM32 屏幕 GUI 设计资料 http://www.gz-dc.com/category/typeid/4112 找到 STM32 Keil 工程,移植相关代码因项目而异进行移植,由于项目简单,本人只对用到的指令接口进行修改。 比如:注意事项&…

阅读更多 →
无法下载Windows系统iso文件 2026/11/15 2:04:12

无法下载Windows系统iso文件

当我遇到这个问题的时候,我打开了一个网站: 登录 然后我打算下载的时候: 突然那个官方的连接就可以下载了:

阅读更多 →
【清华代码熊】DeepSeek V4.1 Flash 后训练详解 2026/11/14 10:11:15

【清华代码熊】DeepSeek V4.1 Flash 后训练详解

📌 上期解析了 DeepSeek V4.1 Flash 模型架构改进,本期解析 DeepSeek V4.1 Flash 预训练/后训练技术: 🌟 预训练:45T 文本 多模态混合语料、直接训练 sparse attention(取消 DeepSeek V4 的 dense 冷启动&…

阅读更多 →
Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ... 2026/11/14 17:14:38

Shuffle-R1: Efficient RL framework for Multimodal Large Language Models via Data-centric Dynamic ...

文章主要内容和创新点 主要内容 本文聚焦于多模态大语言模型(MLLM)强化学习(RL)训练中的效率问题,提出了一个名为Shuffle-R1的框架。研究发现,当前RL训练存在两个关键缺陷: 优势值坍缩(Advantage Collapsing):批次中大多数优势值集中在零附近,导致有效梯度信号被淹…

阅读更多 →
PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction 2026/11/14 16:35:50

PRvL: Quantifying the Capabilities and Risks of Large Language Models for PII Redaction

一、文章主要内容总结 本文聚焦于利用大型语言模型(LLMs)实现个人身份信息(PII)脱敏的研究,旨在解决传统脱敏方法(如基于规则的系统、领域特定命名实体识别(NER)模型)泛化能力差、跨格式/跨语境适应性弱的问题。 研究通过全面评估多种LLM架构(包括密集型LLM(D-LLM…

阅读更多 →
LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model 2026/11/15 4:06:36

LLaVA-RE: Binary Image-Text Relevancy Evaluation with Multimodal Large Language Model

文章主要内容和创新点 主要内容 本文聚焦于二进制图像-文本相关性评估任务(判断图像与文本“相关”或“不相关”),针对该任务中文本格式多样、相关性定义随场景变化等挑战,提出了基于多模态大语言模型(MLLM)的解决方案LLaVA-RE。 模型设计:LLaVA-RE基于LLaVA 1.5架构,…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉