运行时工程决定Agent未来:BoxAgnts深度解析
行业花费了巨大精力优化模型如何思考,却几乎没有人关注 Agent 如何执行。这种不平衡正在变得越来越危险。
---
## 提示词工程解决了简单的那部分
提示词工程在 LLM 早期阶段确实不可或缺。通过思维链、ReAct 循环、规划 Agent 等技术,我们大幅提升了模型的推理质量。
但这些技术也制造了一个危险的错觉:
一旦 Agent 开始与真实系统交互——读写文件、执行命令、调用 API、操作数据库——这个假设瞬间崩塌。**提示词可以影响推理,但提示词无法强制执行安全边界。**
---
## 真正的问题始于工具执行
大多数现代 AI Agent 最终都会收敛到同一种架构:
```
LLM → 工具选择 → Python 函数 → Shell / 网络 / 文件系统
```
模型决定调用哪个工具、传递什么参数、何时停止。在 BoxAgnts 的设计中,对此有清醒的认识。看一下 `boxagnts/query/src/query.rs` 中的查询循环(run_query_loop)——这是整个系统的心脏:
```
// run_query_loop 的核心逻辑:
// 1. 向 API 发送对话
// 2. 处理流式响应
// 3. 检测工具调用请求并分发执行
// 4. 将工具结果反馈给模型
// 5. 处理自动压缩、token 限制恢复、预算超支等边界条件
```
这个循环暴露了一个根本问题:**模型成为了运行时决策引擎,但这个引擎本身并不可信。** 提示注入攻击已经证明 LLM 可以通过网页、文档、工具响应、检索结果被操控。
这意味着 Agent 无法安全地假设自己的推理可信、外部内容可信、工具输出可信。然而许多 Agent 运行时仍然允许无限制执行——这本质上是一个架构矛盾。
---
## AI Agent 需要运行时边界
传统软件基础设施早就假设了应用会失败、进程会崩溃、服务可能被攻破。这就是我们构建容器、虚拟机、进程隔离、能力系统的原因。
有趣的是,AI Agent 正在反向行驶——许多 Agent 以不受限的 shell 访问、不受限的文件系统访问、不受限的网络访问运行。**相当于给 LLM 赋予了 root 权限。** 这与生产级基础设施完全不相容。
BoxAgnts 在这个问题上的态度很明确。看一下 `boxagnts/tools/src/tool.rs` 中 Tool trait 的设计:
```rust
pub trait Tool: Send + Sync {
fn name(&self) -> &str;
fn description(&self) -> &str;
fn permission_level(&self) -> PermissionLevel;
fn input_schema(&self) -> Value;
async fn execute(&self, input: Value, ctx: &ToolContext) -> ToolResult;
}
```
每个工具都有明确的 `PermissionLevel`——ReadOnly、Write、Execute 或 None。这不是装饰性的标签,而是运行时强制执行的约束。在 `filter_tools_for_agent` 函数中,根据 Agent 的 access level(full / read-only / search-only)动态裁剪可用工具集。
正确的做法不是想办法让模型更可信,而是让运行时对不可信模型具有弹性——这是一个根本的哲学转变。
---
## 运行时工程改变了设计哲学
大多数 AI 框架以工作流为中心:提示词串联、Agent 规划、记忆管理、工具注册。这些有用,但忽略了运行时行为。运行时工程引入了一套完全不同的优先级:
| 工作流中心思维 | 运行时中心思维 |
| --- | --- |
| 模型如何推理? | 执行边界是什么? |
| 哪些提示词提高准确率? | 哪些能力被允许? |
| 工具如何串联? | 工具如何隔离? |
| 记忆如何持久化? | 状态如何被安全治理? |
在 BoxAgnts 中,运行时负责能力隔离、权限治理、资源约束、工具生命周期管理、状态持久化和故障隔离。模型只是更大执行系统中的一个组件——这就是可靠基础设施的正确构建方式。
---
## 为什么 Rust 对 Agent 基础设施越来越重要
大多数 AI 工具用 Python 构建——这在实验阶段是合理的。但运行时基础设施有不同要求:内存安全、确定性行为、低开销、单二进制部署。
BoxAgnts 选择 Rust 的原因很简单。看 `Cargo.toml`,整个项目编译为一个静态链接的可执行文件。没有 Python 环境配置、没有 pip install、没有虚拟环境——**下载即运行**。
```
# 启动 BoxAgnts
boxagnts --workspace-dir /path/to/workspace --port 30001
```
更关键的是,Rust 的所有权语义与能力安全哲学天然契合。在 `boxagnts/wasm-sandbox/src/run.rs` 中,RunOption 结构体显式定义了每个 WASM 执行实例的边界:
```rust
pub struct RunOption {
pub work_dir: Option