RiskKernel 实战:给你的 AI Agent 装上运行时保险丝
背景
每个深度使用 AI 编码 Agent 的开发者都遇到过这种情况:凌晨两点,一个循环失控的 Agent 在不知不觉中烧掉了上百美元的 API 额度;或者一个长时间运行的 Agent 进程崩溃后,之前的进度和花费全部作废。
Agent 框架(LangGraph、CrewAI、AutoGen)擅长编排推理流程,但它们几乎都不自带运行时护栏。你需要的不是一个”更强的 Agent 框架”,而是一个介于 LLM 调用和实际执行之间的确定性安全层。
RiskKernel 正是这样的工具——一个用 Go 编写的自托管 Agent 可靠性运行时,提供硬性成本上限、循环迭代限制、崩溃可恢复检查点和人工审批门禁。核心卖点:kill -9 一个 Agent 后可以恢复它,无需二次付费。
本文将从零开始,带你用三个实战场景掌握 RiskKernel 的核心能力。
安装与环境
RiskKernel 有两种启动方式:Docker 容器或 Go CLI 二进制。
方式一:Docker(推荐快速体验)
docker run --rm -p 7070:7070 -v "$PWD/data:/data" \ -e ANTHROPIC_API_KEY=sk-ant-*** \ -e RISKKERNEL_DEFAULT_DOLLARS=0.50 \ ghcr.io/prashar32/riskkernel:latest
这一行命令启动了整个运行时服务。-e RISKKERNEL_DEFAULT_DOLLARS=0.50 设置每次运行默认 50 美分的硬性预算上限——Agent 的每一次 LLM 调用都会被拦截并累计费用,一旦超过上限,直接返回 HTTP 402,不给模型回答的机会。
方式二:Go CLI(适合长期使用)
go install github.com/prashar32/riskkernel/cmd/riskkernel@latest riskkernel init # 生成 .env 和示例配置 riskkernel serve # 启动守护进程
riskkernel init 会创建一个可运行的示例项目,包含预算策略、工具白名单和审批配置模板。
实战场景 1:零代码接入——一个环境变量掌控所有 Agent
RiskKernel 最令人印象深刻的设计哲学是零改动接入。如果你已经在使用 OpenAI 兼容的 API 格式(包括 Claude 的 OpenAI-compatible 代理),你只需要设置一个环境变量:
export OPENAI_BASE_URL=http://localhost:7070/v1
之后你现有的所有 Agent 代码无需任何修改。 每次 LLM 调用都会自动经过 RiskKernel 的预算检查、费用累计、检查点和日志记录。
你可以直接测试:
curl -s -D- http://localhost:7070/v1/chat/completions \
-H 'content-type: application/json' \
-H 'X-RiskKernel-Run-Id: demo-run' \
-d '{"model":"claude-sonnet-4-5","messages":[{"role":"user","content":"hello"}]}'
返回的 HTTP 响应头中会出现三个关键字段:
| 响应头 | 含义 |
|---|---|
X-RiskKernel-Cost-Usd | 本次调用已花费的美元 |
X-RiskKernel-Tokens | 累计消耗的 token 数 |
X-RiskKernel-Step | 当前运行步骤编号 |
如果调用累计费用超过了 RISKKERNEL_DEFAULT_DOLLARS,你会立刻看到 HTTP 402 Payment Required——Agent 在花光预算的那一刻被果断截停。
💡 LLM 只建议,Go 代码说了算。 这是 RiskKernel 的设计原则——所有预算、门禁、检查点逻辑都在编译后的 Go 代码中执行,永远不会交给 LLM 判断。
实战场景 2:硬性预算 + 循环上限 + 审批门禁
仅靠默认的 $0.50 上限当然不够灵活。RiskKernel 的策略系统允许你为不同类型的运行定义独立的治理规则。
策略配置文件 riskkernel.yaml:
policies:
- name: codebase-qa
budget:
dollars: 1.00
max_loops: 10
max_wall_clock: 30m
tools:
allowlist:
- read_file
- grep
- glob
- fetch
blocklist:
- write_file
- bash
approvals:
- on: write_file
method: slack
- on: bash
method: webhook
三层预算保护:
- 美元预算($1.00):API 调用累计费用突破 $1 时终止运行
- 循环上限(10 次):即使 Agent 在一个问题上反复循环,第 11 次开始前就会被截断
- 时钟上限(30 分钟):运行时间超过 30 分钟时强制停止
工具安全层:
- 白名单——只允许代码库读取和网络请求,禁止写入文件和执行 shell
- 审批门禁——
write_file和bash等副作用操作在执行前会暂停,通过 Slack 或 Webhook 等待人工确认
生效后,在每次运行时通过 X-RiskKernel-Run-Id 引用策略名称:
curl -H "X-RiskKernel-Run-Id: codebase-qa" ...
或者通过策略 API 注册并一键绑定:
策略文件在服务启动时自动加载(通过 riskkernel serve 读取当前目录下的 riskkernel.yaml),也可以通过 REST API 动态注册:
curl -X POST http://localhost:7070/v1/policies \ -H "content-type: application/yaml" \ -d @riskkernel.yaml
对于团队协作场景,运行结束后可以通过审计命令查看完整的成本归属:
riskkernel audit summary --by metadata.team riskkernel audit tools
实战场景 3:kill -9 恢复——崩溃后零成本重启
这是 RiskKernel 最独特的能力——也是标题中那个”不花双倍钱”的承诺。
AI Agent 在长时间运行时,最令人沮丧的场景莫过于:进程崩溃后,之前调用的所有 API 费用全部白付了。恢复时从头开始调用,钱包被同一份工作收了两次费。
RiskKernel 通过崩溃可恢复检查点解决这个问题。它的工作原理如下:
- 每次 LLM 调用完成后,RiskKernel 会在 SQLite(或可选 Postgres)中持久化状态
- 检查点包含:已花费的预算、已调用的工具、当前对话上下文
- 当进程被
kill -9后重启时,RiskKernel 自动检测到上次运行的残留状态 - 恢复运行时预算计数器从上次的已花费金额继续,而不是从零开始
用官方提供的 kill-9-resume 示例可以直观体验这个过程:
git clone https://github.com/prashar32/riskkernel cd riskkernel/examples/kill-9-resume ./demo.sh
这个脚本会:启动守护进程 → 发起一次运行 → 在运行中途 kill -9 杀掉进程 → 重启 → 验证恢复后的预算计数没有翻倍。整个过程无需 API key,完全在本地跑。
对于需要更高可用性的场景,RiskKernel 也支持 PostgreSQL 作为状态存储后端(通过 docs/POSTGRES.md 中的配置指引),实现跨进程实例的状态共享。
三条集成路径
RiskKernel 提供了三种集成方式,覆盖不同程度的需求:
| 方式 | 适用场景 | 改动量 |
|---|---|---|
| 代理模式 | 已有 Agent 不想改代码 | 一个环境变量 |
| SDK 模式 | 需要精细控制每一步的预算和检查点 | pip install riskkernel / npm install @riskkernel/sdk |
| OTLP 接入 | 已用 OpenLLMetry 等工具做了可观测性埋点 | 指向 RiskKernel 的 OTLP 端点即可 |
SDK 模式支持 Python 和 TypeScript,框架适配器覆盖 Claude Agent SDK、OpenAI Agents SDK、LangChain、LlamaIndex、CrewAI、AutoGen、PydanticAI 和 Vercel AI SDK——几乎覆盖了所有主流 Agent 框架。
最佳实践
- 先用默认预算跑一周。 设
RISKKERNEL_DEFAULT_DOLLARS=5跑一周,然后用riskkernel audit查看实际开销分布,再根据不同任务类型创建精细策略。
- 工具审批 + 白名单组合使用。 单独用白名单是不够的——Agent 可能通过允许的工具间接产生副作用。审批门禁在工具执行前暂停,提供了最后一道防线。
- 检查点不是备份。 RiskKernel 的检查点恢复的是预算计数和运行状态,不是完整的 Agent 上下文。如果需要恢复对话历史,需要额外的持久化方案。
- MCP 代理也受治理。 RiskKernel 支持 MCP 协议的网关模式——
examples/mcp示例展示了如何将 MCP 工具调用置于工具白名单和审批门禁之下。
总结
RiskKernel 是 AI Agent 产线化运营中缺失的那一环——它不是又一个 Agent 框架,而是一个确定性的运行时防护层。硬性预算、崩溃恢复、审批门禁和 OpenTelemetry 兼容的可观测性,让它成为从”跑着玩”到”跑在生产环境”的关键基础设施。
项目采用 Apache-2.0 许可证,自托管、无遥测、你的密钥永不离开你的机器。
项目链接:https://github.com/prashar32/riskkernel