新上线2天前61 投票
Lua.ex:为AI代理打造的BEAM沙盒Lua 5.3实现
概述
Lua.ex 是一个纯 Elixir 实现的 Lua 5.3 虚拟机,专为在 BEAM(Erlang 虚拟机)上安全嵌入不可信代码而设计。它完全避免使用 NIF 和外部 shell 调用,每个操作码都可审计,默认启用沙盒,适合 AI 代理、用户自定义公式和多租户插件等场景。
核心特性
- 默认沙盒:禁止文件系统访问、系统命令执行等危险操作,确保代码安全运行。
- 纯 Elixir 实现:词法分析器、解析器、基于寄存器的虚拟机及标准库全部用 Elixir 编写,零 NIF,零 C 代码。
- 低延迟:单次内联执行约 4 微秒,适合高频调用。
- 编译期支持:通过
~LUAsigil 可在编译期预编译 Lua 脚本,运行时直接执行,提升性能。 - LLM 集成:可将 Elixir 函数暴露为 Lua API,让大语言模型(LLM)生成 Lua 脚本并安全执行,仅限调用已暴露的工具。
快速上手
在 Elixir 应用中嵌入 Lua 十分简单:
defmodule MyApp.Rules do
use Lua.API, scope: "rules"
deflua double(n), do: n * 2
end
lua = Lua.new() |> Lua.load_api(MyApp.Rules)
{:ok, [10], _lua} = Lua.eval!(lua, "return rules.double(5)")
编译期预编译示例:
import Lua, only: [sigil_LUA: 2]
chunk = ~LUA"""
local total = 0
for i = 1, 100 do
total = total + i
end
return total
"""c
{:ok, [5050], _state} = Lua.run(Lua.new(), chunk)
为什么选择 Lua?
Lua 是一种小巧、易学、专为嵌入设计的语言。它已被 Neovim、Roblox、World of Warcraft、Redis、Nginx、Adobe Lightroom 等广泛应用。Lua.ex 将同样的能力带入 BEAM 生态,无需依赖 C 扩展。
应用场景
- AI 代理工具:LLM 生成 Lua 脚本,调用预定义工具,安全可控。
- 用户自定义逻辑:允许用户编写公式或规则,无需担心安全风险。
- 多租户插件:每个租户拥有独立的沙盒 Lua 环境,隔离执行。
总结
Lua.ex 为 BEAM 开发者提供了一种安全、高效、易用的脚本嵌入方案。其纯 Elixir 实现和默认沙盒机制,使其在 AI 代理、用户自定义代码等场景中具有显著优势。

