七牛云 1024 活动页把融合模型 Conatus Free 的窗口写在 2026 年 10 月 24 日 00:00 到 11 月 30 日 23:59,模型 ID 是 qiniu/conatus-free。当天早上拉公开模型列表,这条已经在里面,created 对应北京时间 2026-10-24 08:00。不带 Key 打 Completions 会回 auth_api_key_missing,带假 Key 会回 auth_api_key_invalid。
主源是活动页 Conatus Free 和模型页 qiniu/conatus-free。BaseURL 写的是 https://api.qnaigc.com/v1,兼容 Completions 和 Messages。条款和额度是 10 月 24 日早上对着这两页核的,接口侧对过 GET /v1/models 和 POST /v1/chat/completions。
窗口、额度和调用规则
活动页写明:已登录并完成实名认证的用户,每日免费额度是 1 亿 Token;任意一笔大于 100 元且已到账的充值(历史充值同样计入,多笔不累计)后,每日上限提升到 10 亿 Token。未认证不可调用。额度按账号发放,同一账号下所有 API Key 共享,每日 00:00(北京时间)重置,未使用额度不结转。
页上还写:本期仅支持消耗活动每日免费 Token 额度,不提供按量付费。免费额度不足时,请求该免费模型将被拒绝,不扣减账户余额、资源包、订阅额度或积分,也不自动切换模型。活动结束后停止调用,不会自动转为付费模型。模型页标注上下文 1000K、最大输出 128K,发布时间 2026.10.24。
当天公开模型列表里这条是:
{
"id": "qiniu/conatus-free",
"object": "model",
"created": 1792800000,
"owned_by": "system",
"context_length": 1000000,
"max_tokens": 128000
}
活动页给的 curl 示例是:
curl https://api.qnaigc.com/v1/chat/completions \
-H "Authorization: Bearer $QINIU_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "qiniu/conatus-free",
"messages": [
{ "role": "user", "content": "你好,介绍一下你自己" }
],
"stream": true
}'
用 Spring Boot 接 OpenAI 兼容接口
Spring Boot 4.1.1、Spring AI 2.0.1、JDK 21,依赖用 spring-boot-starter-web 和 spring-ai-starter-model-openai。配置里把 base-url 指到七牛,模型钉成 qiniu/conatus-free:
spring.ai.openai.api-key=${QINIU_API_KEY:placeholder}
spring.ai.openai.base-url=https://api.qnaigc.com/v1
spring.ai.openai.chat.model=qiniu/conatus-free
server.port=8080
@RestController
public class ChatController {
private final ChatClient chatClient;
public ChatController(ChatClient.Builder builder) {
this.chatClient = builder.build();
}
@GetMapping("/chat")
public ResponseEntity<?> chat(
@RequestParam(defaultValue = "用一句话介绍你自己") String q) {
try {
return ResponseEntity.ok(chatClient.prompt().user(q).call().content());
} catch (HttpStatusCodeException e) {
return ResponseEntity.status(e.getStatusCode()).body(e.getResponseBodyAsString());
} catch (Exception e) {
Throwable c = e;
while (c.getCause() != null && c.getCause() != c) {
c = c.getCause();
}
if (c instanceof HttpStatusCodeException he) {
return ResponseEntity.status(he.getStatusCode()).body(he.getResponseBodyAsString());
}
String msg = c.getMessage() == null ? e.toString() : c.getMessage();
HttpStatus status = msg.contains("401") ? HttpStatus.UNAUTHORIZED : HttpStatus.INTERNAL_SERVER_ERROR;
return ResponseEntity.status(status).body(msg);
}
}
}
Maven 打包日志里有 BUILD SUCCESS,结束时间是 2026-10-24T08:05:15+08:00。随后启动到 8080:
2026-10-24T08:05:20.448+08:00 INFO ... o.s.boot.tomcat.TomcatWebServer : Tomcat started on port 8080 (http) with context path '/'
2026-10-24T08:05:20.463+08:00 INFO ... com.example.conatus.ConatusApplication : Started ConatusApplication in 2.867 seconds (process running for 3.54)
这次没有可用的七牛 API Key,请求是真发到 api.qnaigc.com 的,但没有拿到模型正文。直接 curl 不带 Authorization:
{"error":{"message":"No valid authentication credentials were provided (request_id: chatcmpl-61c272e007e1493ebbf7757a80f5a99a)","type":"authentication_error","code":"auth_api_key_missing"}}
HTTP 401
带 Authorization: Bearer sk-fake-key-for-test-12345:
{"error":{"message":"Invalid API key","type":"authentication_error","code":"auth_api_key_invalid"}}
HTTP 401
同一假 Key 跑本地 /chat,Spring AI 透出来的是:
401: Invalid API key
HTTP 401
一起交流
分享你的思考,让讨论更进一步。