中转 API 首次本地审计上手指南
在将第三方中转端点写入 Claude Code 或 Codex 等编码工具前,先在本地执行分阶段探针,整理一份可复核的基线记录,并在外发前完成报告脱敏。
第一阶段:检查本地环境与依赖工具
执行审计前,先确认当前系统已具备 Python 与 curl 运行环境。该脚本依赖 Python 3.10 或更新版本,以及系统可用的 curl 命令行工具。读者可在终端分别运行 python3 --version 与 curl --version 查看版本信息。本文固定对应脚本版本 v2.5.0(Git commit 75bdac000051871c9f088a3be58e6f17a8854ffb,核对日期 2026-10-27)。
第二阶段:获取固定脚本与启动验证
下载脚本会访问 GitHub 域名。下载完成后,先运行帮助命令核对脚本能否正常加载:
curl -fsSL https://raw.githubusercontent.com/toby-bridges/api-relay-audit/75bdac000051871c9f088a3be58e6f17a8854ffb/audit.py -o audit.py
python3 audit.py --help--help 成功退出仅说明脚本在当前 Python 环境下可以启动,并不验证系统中 curl 的可用性、网络连通性、后端真实模型或端点安全性。该步骤不会连接中转端点,也不需要提供 API Key。
第三阶段:准备测试密钥并注入环境变量
请先在中转服务商后台准备一个专用、低额度、随时可撤销的测试 Key,不要直接使用生产密钥。由读者通过本地已有的秘密管理方式,将测试密钥注入环境变量 API_RELAY_AUDIT_KEY;禁止在命令行示例或脚本中写入真实密钥。系统密钥环或密码管理器不会自动替你设置环境变量,需由读者显式配置到当前运行会话。
使用 --key-env 时请厘清其运行边界:--key-env 让 audit.py 主命令行参数接收变量名,不必将密钥值写在该命令里,但子进程及其他数据面并未获得免泄漏保证;实际发起探针请求时,该密钥仍会发送给指定的中转站。此外,该版本的独立传输实现直接调用 curl -sk,参数显式关闭了 TLS 证书完整性校验,因此即使通信成功,也不能证明远端服务器的真实身份。传输细节可查阅 _transport.py 源码。
第四阶段:执行低开销连通性测试
在发起多项探针前,先确认中转端点能否响应基础调用:
python3 audit.py --key-env API_RELAY_AUDIT_KEY \
--url https://relay.example.com/v1 --model YOUR_SUPPORTED_MODEL \
--connectivity --output connectivity.md命令中的 https://relay.example.com/v1 与 YOUR_SUPPORTED_MODEL 为示意占位符,执行时替换为读者实际获得授权的中转地址与支持的模型代号。根据 connectivity.py 源码,该命令会分别使用 Anthropic Chat 与 OpenAI Chat 格式发送两个低输出预算请求。目标中转站会处理这两次真实请求并可能计费。该检查仅测试接口连通状态,该命令默认生成 Markdown 连通性报告,不作安全评级;选择 JSON 输出时,risk_level 字段为 null。
第五阶段:运行缩小范围审计与控制探针
连通性确认后,推荐先运行跳过外围搜集与大上下文的缩小范围命令:
python3 audit.py --key-env API_RELAY_AUDIT_KEY \
--url https://relay.example.com/v1 --model YOUR_SUPPORTED_MODEL \
--skip-infra --skip-context --output relay-audit.md缩小范围审计显式保留了两项跳过规则:
--skip-infra:跳过 Step 1 基础设施侦察。若不加此参数,脚本默认会发起 DNS、WHOIS、证书与 HTTP 查询,因此默认审计不是只连接单一中转端点。--skip-context:跳过 Step 7 上下文测试,减少这部分请求与 Token 消耗。
所选 profile 下,其他未跳过的网络探针仍会发出真实 API 请求,并可能产生计费。其中错误探测会向端点发送故意构造的畸形请求,以观察上游返回的错误格式;如果中转方不允许畸形请求探测,可追加 --skip-error-leakage 参数,并在审计记录中注明该项覆盖已减少。
去除这两项跳过参数并不等同于运行所有探针,默认 general 配置中并不包含 Web3 专属检查。
如需评估上下文,可选参数 --fast-context 会使用 10K、50K、100K、200K 字符(非 Token 数)作为初始阶梯并做边界细化,使用时需用其替换 --skip-context,同时保留两项时,Step 7 仍会被跳过。
v2.5.0 的 Step 8 仅比对 4 条安装命令的文本回显,并不在本地执行命令,也不验证结构化 tool_calls 或流式参数重组,实现参见 tool_substitution.py 源码。
默认命令仅输出 Markdown 报告,若需机器可读数据可在一行内追加 --format json。
第六阶段:解读风险指标并完成外发脱敏
阅读生成的审计报告时,应结合检查明细采取对应处理动作:
- 分级含义与后续动作:LOW、MEDIUM、HIGH 是本次已运行探针的风险汇总,结合了协议校验、文本比对与启发式信号。LOW 是风险矩阵给出的较低汇总等级,不代表所有检查均已通过,也不是安全认证;仍需通读各项明细;MEDIUM 与 HIGH 需要先看具体异常段落与证据再做人工复核;标注为 skip 或 inconclusive 的项代表未测或无法确定,不能当成测试通过,应在记录原因后视情况排查复跑。
- 信号需交叉验证:返回的 Token 偏差、模型自我介绍以及 JSON 响应里的
model字段均属于需要交叉核对的线索,不能单独作为上游模型归属或恶意行为的判定依据,交叉核对方式见 英文指南的信号解释。 - 历史样例边界:仓库中的 sanitized-audit-report.md 是历史 v2.3 的离线合成样例,它与网页里的 runpy 文本比较器演示是不同对象,两者均不是真实中转站的实测数据。
本地生成的 Markdown 和 JSON 报告不会自动完成公共脱敏,正文可能包含私有中转地址、响应文本或特征证据。在将文件提交至公共仓库、工单或社区前,必须人工审阅并抹去敏感信息。