07.1 模型是大脑,沙箱是工作间
我第一次用 local() 沙箱,Agent 直接把我主机文件改了。吓一跳。才认真研究沙箱。
选错了,要么跑不动(沙箱太弱),要么不安全(沙箱太宽)。这章把这两个旋钮讲清。
07.2 沙箱三选一
| 沙箱 | 用途 | 隔离性 | 标叔的结论 |
|---|---|---|---|
| 虚拟沙箱(默认) | 轻量工作,内存文件系统 | 中,非网络隔离 | 起步首选,够用 |
| local() | 直接碰主机文件/命令 | 无隔离 | 只信主机时才用 |
| 远程沙箱 | 不信任/多租户任务 | 强 | 上云或跑代码时用 |
虚拟沙箱是默认的,无需配置。一个工作流能先塞文件进去,再让 Agent 处理:
const harness = await init(reviewer);
// 这行是关键:应用代码先放好输入文件
await harness.fs.writeFile('document.md', payload.document);
const session = await harness.session();
await session.prompt('Review document.md and write findings to review.md.');
// 收结果
return { review: await harness.fs.readFile('review.md') };
注意:
harness.fs在工作流里用,harness.env在 Agent 里用。没有
harness.fs这个 API。在 Agent 会话里读写,走harness.env.writeFile。别记反。
07.3 模型:用字符串选大脑
模型用 provider/model-id 格式指定。Flue 内置多家:
createAgent(() => ({
model: 'anthropic/claude-sonnet-4-6', // Anthropic
// model: 'deepseek/deepseek-v4-flash', // DeepSeek,内置,免注册
thinkingLevel: 'high', // 推理强度:off→xhigh
}));
thinkingLevel 控制模型花多少心思。默认 medium。简单活设 low 省钱。
07.4 关于 DeepSeek 的一个坑
DeepSeek 是内置 provider。设个环境变量就能用,不用注册。
但有人想把 DeepSeek 当 Anthropic 用,走它的 Anthropic 兼容端点。这时要改 baseUrl:
# .env 里设这两个,让 anthropic provider 指向 DeepSeek
ANTHROPIC_API_KEY=sk-your-deepseek-key
ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
标叔的经验:
registerProvider必须写在app.ts。我把它写在 Agent 文件里,死活不生效。后来才懂:Flue 构建只抽取 handler 函数,顶层副作用会被丢掉。
app.ts才是注册 provider 的地方。
工作间和大脑都讲清了。下一 Part 进入进阶实战。