RiskKernel 实战:为 AI Agent 设置硬预算上限、崩溃恢复和人肉审批门
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-Usd、X-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 在生态中的位置
| 能力 | RiskKernel | LiteLLM | Langfuse | Guardrails 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@latest 或 docker pull ghcr.io/prashar32/riskkernel:latest