Argentic 把 L402 和闪电网络串起来
以前总担心 AI Agent 到处乱爬把带宽跑崩,或者数据方想变现却没法按次收费。Argentic 这东西出来,算是把「按需付费」这套逻辑在代理层面跑通了:拦截请求 → 返回 402 + Lightning 发票 → Agent 付款 → 放行。全程无需注册账号、绑卡、对接 Stripe,纯协议层面的握手。
核心思路其实不复杂,关键在 L402 (HTTP 402 Payment Required) 这个被遗忘的状态码终于找到了用武之地。Argentic 做的事是把它和 Lightning Network 的原子性支付绑定:服务端挂载中间件,客户端(或 Agent 框架)集成支付逻辑。只要钱到账,Preimage 释放,请求立马放行,中间没有人工审核、没有账期。
我本地跑了个最简 Demo,大概三步走:
一、服务端接入(以 Go 为例)
package main
import (
"log"
"net/http"
"github.com/argentic/argentic-go/middleware"
)
func main() {
mux := http.NewServeMux()
mux.HandleFunc("/api/data", func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte(`{"status": "ok", "data": "premium content"}`))
})
// 注入 L402 中间件,配置 LND 节点或任意兼容 L402 的后端
l402mw := middleware.New(middleware.Config{
LndHost: "localhost:10009",
MacaroonPath: "/path/to/admin.macaroon",
CertPath: "/path/to/tls.cert",
PriceMsat: 1000, // 1000 msats ≈ $0.0003,按需改
})
log.Fatal(http.ListenAndServe(":8080", l402mw.Handler(mux)))
}配置里的 PriceMsat 直接定价,单位毫聪,想卖多贵改个数字就行,不用改代码重新部署计费逻辑。二、Agent 端自动支付
Agent 这边不用写复杂逻辑,Argentic 提供的客户端库(Python/JS/Go 都有)遇到 402 自动解析 WWW-Authenticate: L402 头里的 Bolt11 发票,调钱包付款,拿到 Preimage 回填 Authorization: L402 <token>:<preimage> 重试。伪代码大概这样:
from argentic import ArgenticClient
client = ArgenticClient(lnd_grpc="localhost:10009", macaroon="...", cert="...")
resp = client.get("http://localhost:8080/api/data") # 内部自动完成 402 -> Pay -> Retry
print(resp.json())跑通后你会看到日志里先报 402,紧接着钱包扣款,第二次请求直接 200。延迟主要在 Lightning 网络路由上,通常 1-3 秒内搞定。三、实际踩过的坑
- LND 版本兼容:Argentic 依赖
lnrpc的AddInvoice和SettleInvoice,LND v0.18+ 才稳定,老版本容易报unknown service lnrpc.Lightning。 - Macaroon 权限最小化:别直接丢
admin.macaroon进容器,用lncli bakemacaroon烤个只含invoices:writeinvoices:read的只读/写票据。 - 价格定太低会被灰尘攻击:1000 msats 理论上可行,但链上手续费波动大时,路由节点可能拒绝转发;建议门槛设在 5000-10000 msats,既过滤垃圾流量又不吓跑正常 Agent。
- 幂等性:同一个请求重试别重复扣费,Argentic 中间件会校验 Preimage 对应的 Invoice 是否已结算,但客户端最好自己在本地缓存已支付的
payment_hash,避免网络抖动
免费 AI 工具箱 · 全部完全免费
Proxy-Buffering off,不然 402 还没到客户端就被吃了,折腾半天才查到