如何用 Nerve 自托管 AI Agent 运行时:ClickHouse 的开源方案实战
AI coding Agent 的普及带来了一个实际矛盾:功能最强大的 Agent(Claude Code、Codex CLI 等)要么依赖云端服务,要么需要复杂的本地配置。如果你的团队希望在自有的基础设施上运行 Agent——无论是出于隐私、成本还是定制化需求——那么 ClickHouse 最近开源的 Nerve 值得关注。
Nerve 定位为”自托管的 AI Agent 运行时”,基于 Claude Agent SDK 构建,用 Apache 2.0 协议开源。目前 GitHub 上 51 个 Star,HN 上只有 5 个 points——但正如我们之前讲过的,低分低星不代表内容价值低,解决真实痛点的工具往往更有深度。
Nerve 是什么
Nerve 是一个 Python 框架,让你可以在自己的服务器上部署和运行 AI Agent。它支持两类 Agent:
- 个人助手(Personal Assistant):对话式 Agent,可以回答问题、执行任务
- 自主工作者(Autonomous Worker):定时触发的后台 Agent,无需人工干预
两者都运行在你自己控制的容器或进程中,Agent 执行的所有 API 调用和数据访问都在你的网络边界内完成。
为什么需要自托管 Agent
在深入技术细节之前,先想清楚这个问题的答案。选择自托管 Agent 运行时有三个核心动机:
- 数据隐私:Agent 在操作过程中会接触到源代码、数据库 schema、API 密钥等敏感信息。自托管意味着这些数据不会离开你的网络
- 成本可控:云端 Agent 按 token 和会话计费,对于高频使用的团队来说,自托管结合本地模型(如 Ollama)可以显著降低边际成本
- 定制深度:你可以控制 Agent 的工具集、权限范围、运行策略,而不是受限于 SaaS 平台提供的选项
快速安装与配置
Nerve 的安装过程非常直接。确保你本地有 Python 3.10+ 和 pip:
git clone https://github.com/ClickHouse/nerve.git cd nerve pip install -r requirements.txt cp .env.example .env
核心配置在 .env 文件中:
ANTHROPIC_API_KEY=sk-ant-... NERVE_STORAGE=postgresql://user:pass@localhost/nerve NERVE_WORK_DIR=./workspace
Nerve 当前依赖 Claude API(通过 Claude Agent SDK),所以需要 Anthropic 的 API key。从 roadmap 来看,未来可能支持更多模型后端。
实战:部署一个文件处理助手
让我们来看一个实际场景:部署一个能自动处理上传文件的 Agent。
步骤 1:启动 Nerve 服务
python -m nerve.server --port 8080
服务启动后,会在 http://localhost:8080 上监听请求。
步骤 2:定义 Agent 配置
创建 agents/file-worker.yaml:
name: file-worker type: autonomous schedule: "*/5 * * * *" # 每 5 分钟运行一次 tools: - filesystem.read - filesystem.write - filesystem.list - command.execute workspace: /data/inbox max_steps: 20 instructions: | 你是文件处理助手。检查 /data/inbox 目录中的新文件, 按文件类型处理: - .csv 文件:检查格式,统计行数,生成摘要 - .json 文件:验证 JSON 格式,提取关键字段 - .log 文件:扫描错误和警告,生成报告 处理完成后,将结果写入 /data/processed 目录。
步骤 3:注册并启动 Agent
python -m nerve agent register --config agents/file-worker.yaml python -m nerve agent list python -m nerve agent run --name file-worker
步骤 4:监控执行日志
Nerve 会记录每次 Agent 执行的详细日志:
python -m nerve log list --agent file-worker python -m nerve log show --id
实战:搭建个人知识问答助手
更有趣的场景是部署一个个人助手型 Agent,让它基于你的本地知识库回答问题:
name: knowledge-assistant type: personal tools: - filesystem.search - filesystem.read - web.search - command.execute knowledge_base: /data/docs instructions: | 你是知识助手。当用户提问时: 1. 先在 /data/docs 目录中搜索相关文件 2. 阅读匹配的文件,提取相关信息 3. 如果需要最新信息,使用 web.search 补充 4. 给出有来源引用的回答
启动个人助手模式:
python -m nerve.chat --agent knowledge-assistant
这时你会进入一个交互式对话界面,Agent 会在后台使用你配置的工具集回答问题。
安全注意事项
Nerve 在 HN 上被讨论时,有开发者提出了一个合理的担忧:
“这个东西有 bash 访问权限 AND 接收来自不可信来源的 LLM 输入,全都跑在一个无人值守的 cron 任务里——这不安全。”
这是自托管 Agent 框架的共性问题,并非 Nerve 独有。几个最佳实践:
- 限制工具权限:在 Agent 配置中只开放必要的工具。如果 Agent 不需要执行 shell 命令,就不要添加
command.execute - 使用容器隔离:在 Docker 容器中运行 Nerve,限制文件系统和网络访问:
FROM python:3.11-slim WORKDIR /app COPY . . RUN pip install -r requirements.txt RUN useradd -m nerve USER nerve CMD ["python", "-m", "nerve.server", "--port", "8080"]
- 网络出口控制:为 Agent 配置独立的网络策略,只允许出站连接到必要的 API 端点
- 审计日志:开启 Nerve 的详细日志记录,定期审查 Agent 的操作行为
与其他方案对比
| 特性 | Nerve | E2B Sandbox | Docker + Script |
|---|---|---|---|
| 安装复杂度 | 低(pip install) | 中(需要 SDK) | 高 |
| Agent 框架 | 内置(Claude Agent SDK) | 需要自建 | 无 |
| 定时任务 | 内置 cron 支持 | 无 | 需要外部调度 |
| 数据隔离 | 文件系统级别 | 沙箱级别 | 容器级别 |
| 模型支持 | Claude(当前) | 多模型 | 不限 |
| 许可证 | Apache 2.0 | 专有 | 不限 |
Nerve 的优势在于开箱即用的 Agent 框架——你不需要从零搭建 tool calling、step limit、对话管理,这些都已经内置了。但如果你需要更严格的沙箱隔离,E2B 可能是更好的选择。
适用场景总结
Nerve 最适合以下场景:
- 个人自动化:用 AI Agent 处理文件整理、日志分析、数据提取等重复性工作
- 团队知识管理:让 Agent 基于团队文档库回答问题,替代简单的内部 FAQ 机器人
- CI/CD 辅助:在流水线中嵌入 Agent,自动处理构建日志、生成发布说明
如果你正在云端 Agent 的便利性和本地运行的控制权之间纠结,Nerve 提供了一个不错的中间地带——用现成的 Agent 框架,但运行在你自己的地盘上。对于起步阶段的团队,这是一种低门槛的自托管方案。