先把当时的情况摆出来。用 OpenRouter 的兼容接口调 anthropic/claude-3.5-sonnet,返回 404,原文 No endpoints found matching your data policy,换 openai/gpt-4o 又能通,请求里带了 provider 排序参数。

这类报错背后常见的原因有几处,逐个排除就行。账号的隐私设置不允许把请求发给会记录数据的供应商。少数情况下是provider.order 里写死的供应商没有该模型的端点。

还有一种情况,模型 slug 少写了厂商前缀,路由匹配不到。另外,allow_fallbacks 设成 false 后没有可用备选。

动手时先查这个模型当前有哪些可用端点

curl -s https://openrouter.ai/api/v1/models -H "Authorization: Bearer $OPENROUTER_KEY" | jq -r '.data[] | select(.id=="anthropic/claude-3.5-sonnet") | .id'

接着把请求里的 provider 字段整段去掉再试

curl -s https://openrouter.ai/api/v1/chat/completions -H "Authorization: Bearer $OPENROUTER_KEY" -H "Content-Type: application/json" -d '{"model":"anthropic/claude-3.5-sonnet","messages":[{"role":"user","content":"ping"}]}'

随后打开 allow_fallbacks 让路由自己挑

curl -s https://openrouter.ai/api/v1/chat/completions -H "Authorization: Bearer $OPENROUTER_KEY" -d '{"model":"anthropic/claude-3.5-sonnet","allow_fallbacks":true,"messages":[{"role":"user","content":"ping"}]}'

剩下的就是在账号设置里把数据策略改成允许后再验证

curl -s https://openrouter.ai/api/v1/key -H "Authorization: Bearer $OPENROUTER_KEY" | jq '.data'

怎么算真的好了,看的是同一批现象。同一请求返回 200,响应体 provider 字段有具体供应商名,日志里不再出现 No endpoints found。

404 在这里不代表模型不存在,而是没有符合数据策略的端点,先看账号策略再看路由参数。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189