RiskKernel 实战:给 AI Agent 装上确定性预算和崩溃恢复引擎
你的 AI Agent 在生产环境跑了一个通宵的循环,账单上多了 400 美元——然后进程崩溃,所有工作全部丢失。这不是假设,这是 LangChain、AutoGen、CrewAI 用户的真实日常。
Agent 框架(LangGraph、CrewAI、AutoGen)擅长编排推理流程,但它们不提供运行控制层——没有预算硬上限、没有循环次数封顶、没有崩溃恢复。RiskKernel 填补了这个空白:一个自托管的 Agent 可靠性运行时,用确定性 Go 代码而非 LLM 来执行所有预算、开关、门控和检查点。
安装:60 秒启动
RiskKernel 提供两种运行方式:
Docker(推荐快速体验):
docker run --rm -p 7070:7070 -v "$PWD/data:/data" \ -e ANTHROPIC_API_KEY=你的密钥 \ -e RISKKERNEL_DEFAULT_DOLLARS=0.50 \ ghcr.io/prashar32/riskkernel:latest
Go 原生安装:
go install github.com/prashar32/riskkernel/cmd/riskkernel@latest riskkernel init # 生成 .env 和示例 riskkernel serve # 启动守护进程
启动后,任何 OpenAI 兼容的客户端只要把 OPENAI_BASE_URL 指向 http://localhost:7070/v1,就自动置于预算管控之下。
实战场景 1:零代码代理模式——给现有 Agent 加上预算硬上限
假设你已经在用 Claude Code 或一个基于 OpenAI SDK 构建的 Agent 应用。无需改一行代码:
export OPENAI_BASE_URL=http://localhost:7070/v1
每条请求返回时都附带治理头信息:
X-RiskKernel-Cost-Usd: 0.0023 X-RiskKernel-Tokens: 450 X-RiskKernel-Step: 7
一旦超出预算(默认 5 美元 / 100 轮 / 1 小时),RiskKernel 返回 HTTP 402,干净地终止运行并持久化当前状态。你可以随时查看被治理的运行:
riskkernel runs list # 列出所有被治理的运行 riskkernel audit export# 导出成本账本为 JSON riskkernel audit tools # 导出被治理的工具调用记录
这是一种「先有护栏再上线」的极低成本方式——甚至不需要修改你的 Agent 代码。
实战场景 2:kill -9 崩溃恢复——进程被杀后零重复消费恢复
这是 RiskKernel 的核心亮点。Agent 运行时可能因 OOM、节点重启、运维操作等原因被 kill -9 强制杀死。常规方案下,重新运行意味着从头支付所有 API 费用。
RiskKernel 在每次模型调用后自动创建检查点。杀死守护进程后重新启动:
riskkernel serve
curl -s -D- http://localhost:7070/v1/chat/completions \
-H 'content-type: application/json' \
-H 'X-RiskKernel-Run-Id: crash-test' \
-d '{"model":"claude-sonnet-4-5","messages":[{"role":"user","content":"分析项目结构"}]}'
kill -9 $(pgrep riskkernel)
riskkernel serve
riskkernel runs list
当 Agent 从最后一个检查点继续而不是从头开始时,已调用的模型请求不会重复计费。这意味着:你可以在凌晨放心运行长时间 Agent 任务,即使服务器重启也不会浪费已支付的 API 费用。
实战场景 3:Python SDK——@governed_run 装饰器 + 人工审批门
对于需要精细控制的场景,RiskKernel 提供 Python SDK:
from riskkernel import runtime, governed_run, ApprovalGate
gate = ApprovalGate(mode="local_web")
@governed_run(budget_dollars=2.0, max_loops=50)
def code_review_agent(repo_path: str):
runtime.checkpoint("started")
files = scan_files(repo_path)
for f in files:
result = runtime.llm_call(
model="claude-sonnet-4-5",
messages=[{"role": "user", "content": f"Review {f}"}]
)
runtime.checkpoint(f"reviewed_{f}")
# 耗时的操作需要人工批准
if result.has_issues:
gate.wait("apply_fix", f"Apply fix for {f}?")
apply_patch(f, result.fix)
return runtime.summary()
三个关键 API:
@governed_run— 为整个运行设置预算/循环/时间上限runtime.checkpoint()— 手动创建可恢复的检查点gate.wait()— 阻塞直到人工批准或拒绝,支持 CLI、本地 Web 和 Webhook 三种模式
SDK 提供针对 Claude Agent SDK、OpenAI Agents SDK 和 LangChain 的适配器,不需要重写现有代码。
最佳实践
- 预算设置从默认值开始:RiskKernel 的默认 5 美元 / 100 轮 / 1 小时已经是安全的起点。上线后根据实际消耗调整。
- 检查点频率控制:每次 LLM 调用后自动创建检查点,不需要手动插入——但关键业务节点(如数据库写入前)可以显式调用
checkpoint()增加冗余。 - 结合 OpenTelemetry 使用:RiskKernel 内建 OTEL GenAI span 输出,对接 Grafana/SigNoz/Datadog 可可视化每个运行的成本和时间线。
- 审批门用于敏感操作:写入数据库、发送网络请求、修改文件的工具调用应标记为需要人工审批,防止 Agent 在循环中反复执行破坏性操作。
- MCP 工具链集成:RiskKernel 提供 MCP 网关,支持工具白名单和审批队列,与现有 MCP 生态兼容。
总结
RiskKernel 解决了一个 Agent 框架刻意回避的问题——运行时的确定性控制。预算硬上限、循环封顶、崩溃恢复和审批门,这些能力在传统的 LLM 编排框架中不存在,但生产环境又不可或缺。作为一个 17 星、Apache 2.0 许可的单人开源项目,它的代码质量(CI、CodeQL、架构文档)和设计哲学(零遥测、用户密钥、一致性优先)值得关注。
如果你的 Agent 已经离开笔记本进入生产环境,RiskKernel 是那种「装上一分钟、省下一千刀」的工具。