你有没有遇到过这种场景:Agent 上线跑了一周,账单突然涨了三倍,却不知道是哪段逻辑、哪个用户、哪个模型把 Token 烧光的?传统的「在代码里到处加 print 算账」既侵入业务,又算不清分摊。本教程教你用 Helicone——一个开源的 LLM 网关与可观测层——把请求从「直连官方 API」改成「先过 Helicone 代理」,业务代码几乎不用改,就能在仪表盘里看到每次调用的成本、延迟、错误率,并可以按功能、用户、模型任意切片。
先搞懂:Helicone 解决什么问题?
大模型官方 API 只管「给你返回结果」,不帮你记「这次花了多少、慢在哪里、为什么失败」。Helicone 站在你和官方 API 之间:你照常调用,只是把请求地址从官方域名换成 Helicone 的网关域名,并在请求头带上 Helicone 的 Key。网关会把请求转发给官方、把响应原样返回给你,同时把这次调用的元数据(模型、Token、耗时、状态)落库,供你事后分析。
| 不接可观测 | 接 Helicone 之后 |
|---|---|
| 成本只能看官方月度总账单 | 每次调用都有明细,可下钻到单条请求 |
| 延迟问题靠猜 | 按模型、按路由看出 p50 / p95 延迟 |
| 出错难复现 | 请求体、响应、报错全留存,可回放 |
先定边界:Helicone 是「可观测代理」,不是「模型供应商」。它不替你生成内容,只负责转发与记录。计费仍然发生在你背后的官方模型账户上,Helicone 的免费档足够个人与小团队使用,超出后按用量计费。
Step 1:注册并创建 Helicone 项目
Helicone 提供云端托管(开箱即用)与自托管(数据完全在自己手里)两种形态。新手建议先用云端:
1. 浏览器打开:helicone.ai
2. 用 GitHub 或邮箱注册登录
3. 进入 Dashboard,点「New Project」创建一个项目
4. 在项目设置里找到「API Keys」,创建一个 Key
(形如 pk-lf-xxxxxxxxxxxxxxxx,这是你的代理凭证)
拿到后,把它放进环境变量,别写死在源码里。
Step 2:把请求改走 Helicone 网关
Helicone 兼容 OpenAI 的接口形态,所以你几乎不用改调用逻辑,只把 base_url 指向 Helicone 网关,并通过请求头带上 Helicone Key。下面是环境变量写法:
# .env 文件(切勿提交到公开仓库)
OPENAI_API_KEY=sk-你的官方模型Key
HELICONE_API_KEY=pk-lf-你的HeliconeKey
# 把官方地址换成 Helicone 网关地址
OPENAI_BASE_URL=https://oai.hconeai.com/v1
对 Anthropic 官方 SDK 同理,把 base_url 换成 https://anthropic.hconeai.com。只要你的代码本来就用一个可配置的 base_url 变量,这一行就是全部改动。
密钥安全红线:Helicone Key 是「能代你转发并读取请求/响应」的代理凭证,权限等同你的模型 Key。务必放在服务端环境变量或密钥管理服务里,绝对不能出现在前端代码、浏览器包或公开 Git 仓库。一旦泄露,别人可以用你的额度发起调用。
Step 3:跑通第一次调用,确认数据进仪表盘
用你熟悉的 SDK 发一次请求,把 base_url 指到 Helicone 网关,并在请求头注入 Helicone Key:
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url=os.environ["OPENAI_BASE_URL"], # https://oai.hconeai.com/v1
default_headers={"Helicone-Auth": "Bearer " + os.environ["HELICONE_API_KEY"]},
)
resp = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": "用一句话解释什么是智能体。"}],
)
print(resp.choices[0].message.content)
运行后回到 Helicone Dashboard 的「Requests」页面,应该能看到这一条调用——模型、Tokens、耗时、状态都列出来了。看不到的话,先检查 base_url 拼写和 Helicone-Auth 请求头有没有带上。
Step 4:给调用打「属性标签」,做成本归因
光看总账还不够,你要知道「客服 Agent 比写作 Agent 贵多少」「哪个用户把额度烧光了」。Helicone 用自定义属性(property)给每次调用贴标签,仪表盘就能按标签聚合:
client = OpenAI(
api_key=os.environ["OPENAI_API_KEY"],
base_url=os.environ["OPENAI_BASE_URL"],
default_headers={
"Helicone-Auth": "Bearer " + os.environ["HELICONE_API_KEY"],
# 自定义属性:功能模块 + 用户标识 + 请求类型
"Helicone-Property-Feature": "customer-support",
"Helicone-Property-User": "user_8821",
"Helicone-Property-Type": "chat",
},
)
这样在 Dashboard 里就能切到「Feature = customer-support」看这一块的花费曲线,也能按 User 把成本归属到具体账号。多智能体系统里,建议给每个子 Agent 一个独立的 Feature 标签,谁贵谁便宜一目了然。
Step 5:在仪表盘看成本、延迟与错误率
跑一段时间后,打开 Helicone 的几个核心面板:
# Dashboard 里重点看三块
Requests # 单条请求明细,可点开看完整 prompt / 响应 / 报错
Cost # 按时间、模型、property 聚合的花费曲线
Latency # p50 / p95 延迟,定位慢调用来自哪个路由
- 成本异常:某天曲线陡增,按 Feature 下钻,通常是某个新上线的 Agent 在死循环调用。
- 延迟异常:p95 明显高于 p50,说明少数请求卡在长上下文或工具调用,考虑加缓存或限流。
- 错误率:5xx 集中出现,先看是不是官方服务抖动,再看是不是自己的 prompt 触发了安全拦截。
Step 6:接缓存与告警,把成本压下来并盯住异常
Helicone 支持「语义缓存」:内容相近的提问直接命中缓存返回,不再调模型,成本立降。开启方式是在请求头打开缓存开关:
default_headers={
"Helicone-Auth": "Bearer " + os.environ["HELICONE_API_KEY"],
"Helicone-Cache-Enabled": "true",
}
同时,在 Dashboard 的 Alerts 里设一条规则:当「单用户 1 分钟花费超过阈值」或「错误率超过比例」时发邮件 / Webhook。这样即使半夜跑飞,你也能第一时间收到通知而不是第二天看账单。
代理延迟提醒:请求多经过一跳网关,会带来极小的额外延迟。绝大多数应用无感;但对延迟极度敏感的紧密内循环(例如毫秒级重试),建议只对「需要观测的那部分」走代理,或改用自托管把网关部署在同区域乃至内网,把这一跳压到最低。
常见问题速查
| 现象 | 大概率原因与解决 |
|---|---|
| Dashboard 看不到请求 | base_url 没换成网关域名,或 Helicone-Auth 请求头漏带;先回 Step 3 验证 |
| 能调用但报错 401 | Helicone Key 与官方模型 Key 搞混;Helicone-Auth 用 Helicone Key,api_key 用官方 Key |
| 成本聚合不到模块 | property 标签没在请求头设置;确认 Header 名是 Helicone-Property-XXX |
| 涉及敏感数据不敢上云 | 改用 Helicone 自托管(开源),网关与数据全在自己服务器 |