构建智能体,有 MoonBit 就够了

摘要
智能体是否可信,取决于它所依赖的运行基础是否可信。要让智能体自主行动,平台需要提供三样东西:判断成功与失败的客观标准、足够迅速以便融入其推理过程的反馈循环,以及由操作者掌控的边界,让智能体的代码能够执行任务,又不会逃出沙箱。MoonBit 正是为这样的场景而设计的。它是一套面向云计算和边缘计算的端到端编程语言工具链,支持 wasm、wasm-gc、js 和 native 后端,并将测试、证明、结构化并发、脚本模式和沙箱置于核心。本文认为,这些并非附带功能,而恰恰是智能体平台所需的特性;MoonBit 已将它们作为语言的一等特性提供,而非事后拼接的工具。
1. 什么是 MoonBit?
MoonBit 是一门在设计时就考虑了 AI 需求的编程语言,也是一套端到端工具链。它可以编译到 wasm、js 和 native 等后端。因此,同一个项目可以同时包含基于 wasm 的命令行工具、基于原生后端的应用和 Web 前端,并共享同一个领域模型包。这种适用范围对智能体很重要:智能体编写的同一份代码,既可以在受限环境中运行,也可以在完整环境中运行,使用相同的工具链, 并获得相同的保障。
关键在于,MoonBit 将验证和执行边界视为语言层面需要解决的问题,而不是让用户用外部脚本自行拼装的功能。测试、形式化验证、结构化并发和沙箱化后端都是平台的一部分,并通过 moon 命令统一提供。
2. 智能体自动化需要什么?
一个平台能否承载自主执行的任务,取决于三个特性。
-
可靠:成功与失败应当有清晰、可由机器检查的判定标准,也就是能够区分正确与错误,而不依赖人来阅读文字说明。一个无法判断自己是否成功的智能体,既无法改进,也无法让人放心地交由它无人值守地执行任务。
-
足够快: 平台不能拖慢智能体的开发进程。如果每轮“编辑—运行—检查”都要花上数秒编译,智能体就会把预算花在等待上,而不是推理上;如果这个循环足够快,智能体就能像人类开发者一样持续迭代。
-
原生支持沙箱,并且能够跨平台运行: 智能体的代码必须能够受到约束,其行为也必须在不同操作系统、不同用户之间保持一致。依赖特定操作系统 Shell 脚本的平台,既不安全,也不具备可移植性。
3. MoonBit 如何满足这些要求
3.1 可靠性:让智能体根据反馈修正代码
MoonBit 提供了由弱到强、逐级递进的可靠性保障,让智能体和审查者可以根据任务选择合适的层级。
-
断言测试。
test "name" { ... }代码块的类型为() -> Unit raise Error,通过moon test运行。普通断言(assert_eq、assert_true)会在失败时明确报错。 -
快照测试。 当手动编写预期值过于繁琐时,
inspect可以记录任意实现了Show的值,json_inspect可以记录可读的 JSON 表示,而@test.T::write/writeln配合snapshot可以将输出保存到文件中。这些内容都可以通过moon test --update自动插入和更新,让“这里应该输出什么?”变成一条命令就能回答的问题。 -
Cram 测试。 内置的命令行交互记录式测试(
moon cram test)会精确固定实际命令行二进制程序的标准输出、标准错误和退出状态,使端到端的 CLI 行为成为可长期复用的测试基准,而不再依赖手动检查。 -
属性测试。 借助
quickcheck和derive(Arbitrary)/derive(Shrink),随机输入可以触及边界情况,并将失败案例缩减为最小反例。这类测试覆盖通常是智能体手动编写测试时难以做到的。 -
形式化验证。 除了测试,MoonBit 还提供了
moon prove