2026年6月15日 2 分钟阅读

RiskKernel 实战:为 AI Agent 设置硬预算上限、崩溃恢复和人肉审批门

tinyash 0 条评论

AI Agent 跑着跑着突然开始原地打转,疯狂烧 Token,凌晨两点你的手机收到一笔 $400 的 API 账单——这不是段子,是每个重度 AI 编码用户迟早会遇到的事。

Claude Code、Codex、OpenCode 这类 Agent 在写代码时确实很能干,但框架层(LangGraph、CrewAI、AutoGen)只负责编排推理流程,不负责兜底。没有硬预算上限、没有崩溃恢复、没有不可逆操作的审批门——Agent 失控时,你是那个被账单叫醒的人。

RiskKernel 是一个开源的 Agent 运行时可靠性层,用 Go 写成的单二进制文件,通过代理模式、SDK 集成或 OpenTelemetry 注入,在你的 Agent 和 LLM API 之间插入一道确定性围栏。项目由一人开发、Apache 2.0 许可,GitHub 上 18 颗星,但 README 的完整度和架构设计远超这个数字。

为什么框架层管不了这些事

LangGraph 知道 Agent 下一步要调用哪个工具,但不会在它循环到第 500 步时掐断连接。CrewAI 能编排多 Agent 的对话,但不会在预算耗尽时返回 HTTP 402。AutoGen 可以配置终止条件,但 Agent 修改代码后,终止条件本身也可能被改掉。

也就是说,你把规则写在 prompt 里,Agent 也可以不遵守。RiskKernel 的核心哲学就是把规则写在编译过的 Go 代码里,LLM 永远无法绕过。

安装:一行命令启动屏障

RiskKernel 提供了 Docker 和 Go install 两种安装方式。用 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

这会在 localhost:7070 启动一个代理服务。未配置的运行时默认安全预算为 $5 / 100 轮循环 / 1 小时,上面显式设成了 50 美分。

然后把你现有的 Agent 指向它——只需一个环境变量:

export OPENAI_BASE_URL=http://localhost:7070/v1

如果更喜欢原生二进制,一行安装:

go install github.com/prashar32/riskkernel/cmd/riskkernel@latest
riskkernel init    # 生成 .env + 示例配置
riskkernel serve   # 启动守护进程

四大核心功能实战

1. 硬成本上限——跑不完的账单

在 Agent 启动前就设定好每次运行的 Token 上限和金额上限。一旦触及上限,RiskKernel 返回 HTTP 402,干净地终止运行并保留状态:

curl -s -D- http://localhost:7070/v1/chat/completions \
  -H 'content-type: application/json' \
  -H 'X-RiskKernel-Run-Id: demo' \
  -d '{"model":"claude-sonnet-4-5","messages":[{"role":"user","content":"遍历整个代码库并重构"}]}'

你可以在响应头里看到每步的实时成本(X-RiskKernel-Cost-UsdX-RiskKernel-Tokens),在预算耗尽前就获得可观测性。

2. 崩溃恢复——kill -9 也不丢进度

最实用的功能:Agent 运行时被 kill -9 干掉,重启后自动从最后的 checkpoint 恢复,已花费的预算会计入但不会重复扣费。

riskkernel runs list

riskkernel serve --resume

这对长时间运行的任务(代码库批量重构、多文件迁移、大型测试套件执行)尤其关键——一旦运行几个小时,一次机器重启就全部白做。RiskKernel 的 checkpoint 机制保存在 SQLite(或可选的 Postgres)中,粒度到每次工具调用。

3. 人肉审批门——不可逆操作先问一句

Agent 要执行 git push、数据库写入、生产环境部署这类不可逆操作时,RiskKernel 可以挂起该步骤,等待人工批准。审批入口支持 CLI、本地 Web 面板、Webhook 或 Slack:


审批通过前,LLM 无法绕过这道门——因为门在 Go 代码里,不在 prompt 里。

4. 策略即代码——可复用的治理规则包

把预算、工具白名单、审批规则打包成可复用的 policy 文件(以下为概念示例):

policies:
  - name: code-review
    dollars: 0.20
    loops: 30
    tools:
      allow: [read_file, search_files, grep, explain]
      deny: [write_file, git_push, exec_command]
  - name: full-refactor
    dollars: 5.00
    loops: 200
    approval_tools: [git_push, deploy]

通过 POST /v1/policies 或 YAML 文件加载,支持 dry-run 模式在记录的历史运行上模拟执行效果。

审计与合规:谁说自托管就不能合规

每次运行的完整账本都在你的磁盘上,支持按团队、用户、功能标签汇总成本:

riskkernel audit export                    # 成本账本 JSON
riskkernel audit summary --by metadata.team         # 按团队汇总
riskkernel audit compliance                 # OWASP / EU AI Act 证据导出

不出站、不遥测、密钥不落盘——自托管的可验证承诺在 SECURITY.md 中有完整描述。

对比:RiskKernel 在生态中的位置

能力RiskKernelLiteLLMLangfuseGuardrails AI
硬预算上限✅ Go 代码级❌ 路由层❌ 仪表盘❌ 内容过滤
崩溃恢复/checkpoint✅ 原生支持
不可逆操作审批门✅ 框架无关
自托管/无遥测✅ 部分❌ SaaS
策略即代码✅ YAML✅ 但只读
运行时位置代理层前置路由层观测层内容层

RiskKernel 不做 LiteLLM 的路由、Langfuse 的观测、Guardrails AI 的 PII 过滤——它只做一件事而且做到极致:在确定性代码中为 Agent 运行设硬边界

适合谁用

  • 用 Claude Code / Codex 做大型代码库改造,担心跑到一半崩溃的开发者
  • 团队共享 API key,怕一个人跑出一个团队的额度
  • 在生产环境运行 Agent 化工作流,需要合规审计日志
  • 用过 LangGraph / CrewAI 后发现框架层管不住预算的人

一句话总结:如果你的 AI Agent 跑得比你能看住的速度快,RiskKernel 就是那道刹车。


项目地址: github.com/prashar32/riskkernel

许可协议: Apache 2.0

安装: go install github.com/prashar32/riskkernel/cmd/riskkernel@latestdocker pull ghcr.io/prashar32/riskkernel:latest

发表评论

你的邮箱地址不会被公开,带 * 的为必填项。