本地 Agent 快速开始
创建带 Workspace 持久 Sandbox 的本地 Agent,并完成第一次 Session 执行
安装
pnpm add @downcity/agent @downcity/city @downcity/federation @downcity/sandbox-microsandbox
npx microsandbox setup@downcity/sandbox-microsandbox 是跨平台 Sandbox Provider,为每个 Workspace 提供独立、持久的 microVM 环境。
完整示例
import { Agent } from "@downcity/agent";
import { City, Shell, Workspace } from "@downcity/city";
import { create_openai_compatible_model } from "@downcity/federation";
import { MicrosandboxProvider } from "@downcity/sandbox-microsandbox";
const model = create_openai_compatible_model({
id: "gpt-5",
upstream_model: "gpt-5",
base_url: "https://api.openai.com/v1",
api_key: process.env.OPENAI_API_KEY!,
});
const workspace = new Workspace({
id: "project",
path: "/path/to/project",
shell: new Shell({
sandbox_provider: new MicrosandboxProvider(),
}),
});
const agent = new Agent({ id: "repo-helper", model });
const city = new City({
workspaces: [workspace],
agents: [agent],
});
try {
const session = await agent.sessions.create({ workspace });
const turn = await session.prompt({ query: "总结当前仓库结构" });
console.log((await turn.finished).text);
} finally {
await city.close();
}所有权
- City 持有 Power 与登记资源,但不理解 Workspace 的执行后端。
- Workspace 持有项目资源、环境变量与可选 Shell。
- Shell 持有 Sandbox Provider、Workspace 持久 Sandbox 与 Shell Sessions;
shell_id与 Chatsession_id相互独立。 - Agent 持有 Chat Sessions。Chat Session 只借用选中的 Workspace,不拥有 Shell 或 Sandbox。
Shell 命令默认使用 target: "sandbox",项目固定挂载到 /workspace。同一 Workspace 会跨 Chat Session 保留 HOME 和已安装工具。target: "host" 必须提供原因并经过审批。Sandbox 启动失败不会降级成宿主执行。
没有 Shell 时,Workspace 仍提供文件与搜索工具。city.close() 会释放 Agent、Power 与 Workspace;Workspace 再委托 Shell 停止 Sandbox 计算资源并保留其持久文件系统。