2026年6月17日 2 分钟阅读

RiskKernel 实战:给你的 AI Agent 装上运行时保险丝

tinyash 0 条评论

背景

每个深度使用 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. 美元预算($1.00):API 调用累计费用突破 $1 时终止运行
  2. 循环上限(10 次):即使 Agent 在一个问题上反复循环,第 11 次开始前就会被截断
  3. 时钟上限(30 分钟):运行时间超过 30 分钟时强制停止

工具安全层:

  • 白名单——只允许代码库读取和网络请求,禁止写入文件和执行 shell
  • 审批门禁——write_filebash 等副作用操作在执行前会暂停,通过 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 通过崩溃可恢复检查点解决这个问题。它的工作原理如下:

  1. 每次 LLM 调用完成后,RiskKernel 会在 SQLite(或可选 Postgres)中持久化状态
  2. 检查点包含:已花费的预算、已调用的工具、当前对话上下文
  3. 当进程被 kill -9 后重启时,RiskKernel 自动检测到上次运行的残留状态
  4. 恢复运行时预算计数器从上次的已花费金额继续,而不是从零开始

用官方提供的 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 框架。

最佳实践

  1. 先用默认预算跑一周。RISKKERNEL_DEFAULT_DOLLARS=5 跑一周,然后用 riskkernel audit 查看实际开销分布,再根据不同任务类型创建精细策略。
  1. 工具审批 + 白名单组合使用。 单独用白名单是不够的——Agent 可能通过允许的工具间接产生副作用。审批门禁在工具执行前暂停,提供了最后一道防线。
  1. 检查点不是备份。 RiskKernel 的检查点恢复的是预算计数和运行状态,不是完整的 Agent 上下文。如果需要恢复对话历史,需要额外的持久化方案。
  1. MCP 代理也受治理。 RiskKernel 支持 MCP 协议的网关模式——examples/mcp 示例展示了如何将 MCP 工具调用置于工具白名单和审批门禁之下。

总结

RiskKernel 是 AI Agent 产线化运营中缺失的那一环——它不是又一个 Agent 框架,而是一个确定性的运行时防护层。硬性预算、崩溃恢复、审批门禁和 OpenTelemetry 兼容的可观测性,让它成为从”跑着玩”到”跑在生产环境”的关键基础设施。

项目采用 Apache-2.0 许可证,自托管、无遥测、你的密钥永不离开你的机器。

项目链接:https://github.com/prashar32/riskkernel

发表评论

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