跳到主要内容

给 agent 一把假钥匙:搭一个 OneCLI 凭据网关

Kevin
Kevin

· 阅读约 4 分钟

你让 agent 去调外面的 API,它开口就要那把真 key。你就这么给它?它哪天跑飞一次,或者被人拿 prompt 把话套出来,那把 key 就不是你的了。这篇就办一件事:把真 key 锁在你自己机器上,agent 手里只拿一把假的,出站的时候由一个网关负责换。前后大概二十分钟,跑完网关和仪表盘都是活的。

开搞之前先确认这几样齐了:

  • Docker 装好了,docker compose version 能跑
  • 手头有一张真 key,等会儿要拿它试替换逻辑
  • 10254 / 10255 两个端口没被占

缺哪样先去补哪样,都齐了开搞。

Step 1:把服务拉起来

这一步的目标就一个:让网关和仪表盘都活着。

新建一个空目录,放一份 docker-compose.yaml,把这段贴进去:

services:
  onecli:
    image: onecli/onecli:latest
    ports:
      - "10254:10254"
      - "10255:10255"
    volumes:
      - onecli-data:/data

然后:

docker compose up -d

浏览器开 http://localhost:10254,能看到登录页,这一步就算活了。默认是免登录模式,直接进。这里别手贱去改监听地址,保持 127.0.0.1——你绑了 0.0.0.0,这台机器上任何一个程序都能伸进你的保险库,那跟裸奔没区别。

Step 2:把真 key 存进 Vault

别急着把 key 粘进 agent 的环境变量,先让它住进 Vault。

仪表盘里找到 Vault 页面,新建一条记录,名字随便写(比如 OPENAI_API_KEY),值贴真 key,保存。落盘是加密的,不是明文躺在某个 config.json 里,这点可以放心。我不可能替你把存储层的每个字节验一遍,但至少设计上没走弯路。

本来想顺手给你一条 curl 添加命令,想了想算了——不同版本 API 路径不一样,给你一条大概率对不上的命令是添乱。仪表盘表单够用了。

Step 3:写替换规则

这是整篇的题眼。到这一步,前面存的真 key 才开始派上用场。

先想清楚要干嘛:agent 的请求到网关,网关得知道——这个请求该换成哪把真钥匙。规则写的就是这个。规则长这样:

match:
  host: api.openai.com
  path_prefix: /v1/
inject:
  type: header
  name: Authorization
  from_secret: OPENAI_API_KEY

意思就三行:发往 api.openai.com 且路径以 /v1/ 开头的请求,把 Authorization 头换成 Vault 里 OPENAI_API_KEY 那条记录。字段名不同版本可能略有差异,以仪表盘表单为准。

第一眼看到这套"按主机+路径换钥匙"的设计我是服的——相当于给 agent 一张门卡,只刷得开指定的门,换一扇门就废。

这一步很多人会卡在路径匹配的粒度上。写太宽,比如直接匹配 /,等于所有发往这个主机的请求都塞同一把钥匙,以后想单独撤一个服务,得先把整条规则拔掉,别的服务跟着遭殃;写太窄,比如精确到 /v1/chat/completions,agent 换个路径就被 401 弹回来,你还不知道它死在哪一环。先按服务的固定前缀写,跑通整体链路,再慢慢收窄。

保存后回规则列表能看到这一条,这一步就算过了。

Step 4:把假钥匙交给 agent

最后一步,让 agent 拿着假钥匙去干活。

把它原来的环境变量换掉,真 key 摘走,放一把占位的:

# 原来
export OPENAI_API_KEY=sk-real-key...

# 现在
export OPENAI_API_KEY=sk-placeholder-key...

再把 agent 的 baseURL 指到网关,比如 http://localhost:10255。各家 agent 改 baseURL 的入口不一样,你平时在哪儿改就在哪儿改,不展开。

对了,插播一句:如果网关和 agent 不在同一台机器,agent 配置里那个地址别写 localhost,写机器的局域网 IP。这个坑我踩过,卡了十分钟才反应过来。

都改完,丢一个小任务给它跑。agent 能正常调到外部服务,同时你翻它的配置文件、环境变量、prompt 都找不到那把真 key——这篇就算真的跑通了!

到这里,OneCLI 网关就在你机器上跑起来了。跑起来了吗,照这个自查:

  • 仪表盘能打开
  • Vault 里至少有一条真凭据
  • 规则列表里有一条匹配真实服务的主机+路径规则
  • agent 用的是占位 key,真 key 没出现在它任何配置里

都打上勾,这篇就交付了。接下来可以试着把 Google OAuth 打开,让团队共用同一个网关;或者补几条规则,把其他要调的外部服务也接进来——都是这个地基上顺手加的装修。

评论

还没有评论,写下第一条讨论。

给 agent 一把假钥匙:搭一个 OneCLI 凭据网关 | 跑通