NexusRun:把 AI 智能体打包成可移植的单一文件
开源工具 NexusRun 将模型、提示词、工具与凭据封装为单一可移植包,依赖 llama.cpp 或 Ollama 本…
NexusRun 是一个面向本地部署场景的开源 AI 智能体打包与运行框架,核心思路是把模型引用、提示词、工具调用与凭据声明统一封装进一个可移植文件,让智能体在任意目标机器上「开箱即用」,同时保持数据不出本地网络。
项目概览
NexusRun 的二进制仅约 11 MB,使用 Go 编写,需要 Go 1.26 及以上版本即可编译,除自身外不依赖任何外部运行时。它建立在 llama.cpp 或 Ollama 等已有本地推理引擎之上,不替代这些引擎,而是补齐「打包、分发、如实反馈」这一层能力。项目仓库为 verdictlayer/nexusrun,已在 GitHub 开源。
使用方式被简化为三条命令:
nexus init my-agent --model llama3.1:8b生成一个 YAML 配置文件,用户可在其中编辑提示词与工具配置。nexus run ./my-agent -p "hello"直接从本地目录运行该智能体,方便迭代提示词。nexus push my-agent:0.1.0 ghcr.io/you/my-agent:0.1.0把智能体推送到任意容器镜像仓库;若目标环境无网络,可用nexus build --seal把模型一并封进文件,通过 U 盘等方式物理搬运。
单文件描述智能体
NexusRun 用一份可读的 YAML 文件(nexus.yaml)完整描述一个智能体的行为,结构大致如下:
models:仅引用外部模型(如ollama:llama3.1:8b),不把模型权重本身写进文件,使配置保持在 KB 级别而非 GB 级别。entrypoint:声明入口类型与系统提示词。mcp_servers:声明智能体依赖的 MCP 工具服务器,可指定来源(如 GitHub 仓库)、版本与启动命令,并配合sandbox.allowed_paths由内核对工具可访问路径进行约束——「未声明即拒绝」。secrets:只声明所需密钥名称,密钥值加密保存在运行机器本地,不会写入可分发的文件本身。
这种设计让智能体既「安全可提交」(不含明文凭据、不含模型权重),又「安全可分享」(读者可直接阅读文件了解它能做什么、不能做什么)。
面向不可控的运行环境
NexusRun 把重点放在「别人的笔记本、混合硬件机架、门店里的 kiosk、从没联网过的设备」这一类目标机器上,认为这才是智能体真正需要工作的场景。为此它做了三件事:
- 数据留在本地:完全离线运行,模型可被打包封进文件随智能体一同搬运,运行成本不会随调用次数增长。
- 硬件感知选模:当目标机器没有合适的 GPU 时,NexusRun 会显式提示回退到 CPU,并基于该机器实际表现给智能体打分;当一个模型得分过低时(例如某机器上得分 0/3),框架会自动拒绝该模型并挑选替代者,因为「答案取决于硬件与模型,而不只取决于提示词」。
- 沙箱隔离执行:MCP 工具服务器在沙箱内运行,文件写入与对外网络访问均受限于 YAML 中声明的范围,验证显示沙箱外没有出现未声明的文件写入或外向连接。
实际运行示例
项目给出了一段终端演示:在断网、无 API Key 的笔记本上,使用 nexus run notes-agent -p "When does the launch window open?" 运行一个内置智能体。智能体通过 llama.cpp 在 CPU 上启动一个 MCP 笔记服务器,调用 notes__list_notes 与 notes__read_note 两个工具,从 launch.txt 中读到「The launch window opens on 14 March 2027.」并输出结果。本次运行共消耗 54 tokens,速度约 7.0 tok/s,跨 3 轮完成 2 次工具调用。
小结
NexusRun 并非要取代 llama.cpp 或 Ollama,而是在它们之上补一层「让智能体可以被打包、被分享、被如实描述并被安全运行」的中间件。对于需要在隔离环境、共享设备或离线场景中分发 AI 智能体的开发者而言,它提供了一种结构化的打包与沙箱方案;但作为来源不广的开源新项目,其生态成熟度、长期维护与社区采纳情况仍有待观察。
