AI 大模型推理

  • AI 大模型推理 > API 文档 > 用量与账单 >大模型Token预估账单查询

    大模型Token预估账单查询

    最近更新时间: 2026-04-08 19:36:29

    Base URL: https://api.qnaigc.com

    说明: 接口中展示的花费均为原始标准价格,未经资源包等优惠换算

    接口1

    查询apikey的当日、本周、本月用量

    认证方式

    支持两种鉴权方式:

    1. AK/SK 签名认证:使用七牛云标准的 AK/SK 签名认证

      Authorization: Qiniu <AccessKey>:<EncodedSign>
      
    2. APIKey 认证:使用 APIKey 进行认证

      Authorization: Bearer <APIKey>
      

    接口详情

    GET /v2/stat/usage/apikey/cost

    查询参数: type 可选值:day,week,month。分别为当天,本周,本月

    请求示例:

    curl --location "https://api.qnaigc.com/v2/stat/usage/apikey/cost?type=month" \
      --header "Authorization: Bearer sk-xx"
    

    响应示例(200 OK)

    {"status":true,"data":{"api_keys":[{"api_key":"sk-7c***fbe19","models":[{"model_id":"deepseek-v3","items":[{"name":"deepseek-v3输入","usage":{"count":100.00,"unit":"k/tokens"},"fee":1},{"name":"deepseek-v3输出","usage":{"count":100.00,"unit":"k/tokens"},"fee":1}],"total_fee":2}],"total_fee":2}]}}
    

    接口2

    查询 apikey 的消耗明细,支持指定时间范围和粒度。

    GET /v2/stat/usage/apikey/cost-detail

    查询参数:

    参数名 类型 必填 说明
    start_date string 开始日期,格式:2006-01-02(如 2026-01-01
    end_date string 结束日期,格式:2006-01-02(如 2026-01-31
    grain string 粒度,可选值:day(按天,默认)、month(按月)

    请求示例:

    # 按天粒度查询
    curl --location "https://api.qnaigc.com/v2/stat/usage/apikey/cost-detail?start_date=2026-01-01&end_date=2026-01-31&grain=day" \
      --header "Authorization: Bearer sk-xx"
    
    # 按月粒度查询
    curl --location "https://api.qnaigc.com/v2/stat/usage/apikey/cost-detail?start_date=2026-01-01&end_date=2026-01-31&grain=month" \
      --header "Authorization: Qiniu <AccessKey>:<EncodedSign>"
    

    响应示例(200 OK)

    根据认证方式不同,返回结构略有差异:

    使用 AK/SK 认证(返回该用户下所有 API Key 的账单)

    {
      "status": true,
      "data": {
        "period": "2025-01-01 ~ 2025-01-31",
        "grain": "day",
        "total_fee": 150.00,
        "api_keys": [
          {
            "api_key": "sk-7c***fbe19",
            "total_fee": 100.00,
            "bills": [
              {
                "date": "2025-01-01",
                "total_fee": 50.00,
                "models": [
                  {
                    "model_id": "deepseek-v3",
                    "items": [
                      {
                        "name": "deepseek-v3输入",
                        "key": "input",
                        "usage": {"count": 100.00, "unit": "k/tokens"},
                        "fee": 1
                      },
                      {
                        "name": "deepseek-v3输出",
                        "key": "output",
                        "usage": {"count": 100.00, "unit": "k/tokens"},
                        "fee": 1
                      }
                    ],
                    "total_fee": 2.00
                  }
                ]
              }
            ]
          },
          {
            "api_key": "sk-3a***9b12",
            "total_fee": 50.00,
            "bills": [...]
          }
        ]
      }
    }
    

    使用 APIKey 认证(返回单个 API Key 的账单)

    {
      "status": true,
      "data": {
        "api_key": "sk-7c***fbe19",
        "period": "2025-01-01 ~ 2025-01-31",
        "grain": "day",
        "total_fee": 100.00,
        "bills": [
          {
            "date": "2025-01-01",
            "total_fee": 50.00,
            "models": [
              {
                "model_id": "deepseek-v3",
                "items": [
                  {
                    "name": "deepseek-v3输入",
                    "key": "input",
                    "usage": {"count": 100.00, "unit": "k/tokens"},
                    "fee": 1
                  }
                ],
                "total_fee": 1.00
              }
            ]
          },
          {
            "date": "2025-01-02",
            "total_fee": 50.00,
            "models": [...]
          }
        ]
      }
    }
    

    响应字段说明:

    字段 类型 说明
    api_key string API Key(脱敏后,保留前3位和后6位)
    period string 时间范围,格式:2006-01-02 ~ 2006-01-02
    grain string 粒度:day(天)或 month(月)
    total_fee float 该时间范围内的总费用(人民币元),保留2位小数
    api_keys[] array API Key 列表(仅 AK/SK 认证时返回)
    bills[] array 按时间聚合的账单列表
    bills[].date string 日期(粒度为 day 时:2006-01-02;粒度为 month 时:2006-01
    bills[].total_fee float 该时间点的总费用
    bills[].models[] array 按模型分组的账单
    models[].model_id string 模型 ID(如 deepseek-v3
    models[].items[] array 计费项列表
    models[].items[].name string 计费项中文名称
    models[].items[].key string 计费项标识(bo_key)
    models[].items[].usage object 用量信息
    models[].items[].usage.count float 用量数值
    models[].items[].usage.unit string 用量单位(如 k/tokens百字符
    models[].items[].fee float 该计费项费用(人民币元)
    models[].total_fee float 该模型下所有计费项的总费用

    日期范围限制:

    • 最大查询范围为 100 天
    • 时间范围超过 100 天会返回错误:date range cannot exceed 100 days

    AK/SK 签名算法

    概述

    七牛云 API 使用 HMAC-SHA1 签名算法进行身份验证。签名结果附加在请求头的 Authorization 字段中,格式为:

    Authorization: Qiniu <AccessKey>:<EncodedSign>
    

    签名生成步骤

    1. 生成待签名字符串

    待签名字符串由以下部分组成(每部分用换行符分隔):

    <Method> <Path>[?Query]
    Host: <Host>
    Content-Type: <Content-Type>
    [X-Qiniu-<HeaderKey>: <HeaderValue>]
    <Body>
    

    注意:

    • Method 为 HTTP 方法(如 GET、POST),大写
    • Path 为请求路径,不包含域名和查询参数
    • Query 为查询参数(不包含开头的 ?),仅在有时才添加
    • Host 为主机名(如 api.qnaigc.com
    • Content-Type 为请求内容类型(如 application/json
    • X-Qiniu-* 为可选的自定义头,按 key 的 ASCII 顺序排列,格式化为 X-Qiniu-<Key>(每个单词首字母大写)
    • 最后有两个连续换行符 \n\n
    • Body 为请求体(仅当 Content-Type 不是 application/octet-stream 时才添加)

    2. 计算 HMAC-SHA1 签名

    使用 SecretKey 作为密钥,对待签名字符串进行 HMAC-SHA1 运算:

    const hmac = crypto.createHmac('sha1', secretKey);
    hmac.update(signingStr);
    const sign = hmac.digest();
    

    3. Base64 编码

    对签名结果进行 URL 安全的 Base64 编码(+ 替换为 -/ 替换为 _):

    function urlSafeBase64Encode(buffer) {
        return buffer.toString('base64')
            .replace(/\+/g, '-')
            .replace(/\//g, '_');
    }
    const encodedSign = urlSafeBase64Encode(sign);
    

    4. 生成最终凭证

    AccessKeyencodedSign 用冒号连接:

    <AccessKey>:<EncodedSign>
    

    完整示例代码

    const crypto = require('crypto')
    
    /**
     * URL 安全的 Base64 编码
     */
    function urlSafeBase64Encode(buffer) {
        return buffer.toString('base64')
            .replace(/\+/g, '-')
            .replace(/\//g, '_')
    }
    
    /**
     * 生成待签名的原始字符串
     */
    function generateSigningString(options) {
        const { method, path, query, host, contentType, headers, body } = options
        
        let signingStr = method.toUpperCase()
        signingStr += ' ' + path
        if (query) {
            signingStr += '?' + query
        }
        signingStr += '\nHost: ' + host
        
        if (contentType) {
            signingStr += '\nContent-Type: ' + contentType
        }
        
        if (headers) {
            const sortedKeys = Object.keys(headers).sort()
            sortedKeys.forEach(key => {
                if (key.toLowerCase().startsWith('x-qiniu-')) {
                    const formattedKey = key.split('-')
                        .map((part, index) => {
                            return part.charAt(0).toUpperCase() + part.slice(1).toLowerCase()
                        })
                        .join('-')
                    signingStr += '\n' + formattedKey + ': ' + headers[key]
                }
            })
        }
        
        signingStr += '\n\n'
        
        if (body && contentType && contentType !== 'application/octet-stream') {
            signingStr += body
        }
        
        return signingStr
    }
    
    /**
     * 生成七牛云管理凭证(Access Token)
     */
    function generateAccessToken(accessKey, secretKey, requestOptions) {
        const signingStr = generateSigningString(requestOptions)
        
        const hmac = crypto.createHmac('sha1', secretKey)
        hmac.update(signingStr)
        const sign = hmac.digest()
        
        const encodedSign = urlSafeBase64Encode(sign)
        const accessToken = accessKey + ':' + encodedSign
        
        return accessToken
    }
    
    // 示例:调用用量查询接口
    const accessKey = '你的 AccessKey'
    const secretKey = '你的 SecretKey'
    
    const requestOptions = {
        method: 'GET',
        path: '/v2/stat/usage/apikey/cost',
        query: 'type=month',
        // 请求接口2:        
        // path: '/v2/stat/usage/apikey/cost-detail',
        // query: 'grain=month&start_date=2026-01-01&end_date=2026-03-31',
        host: 'api.qnaigc.com'
    }
    
    const accessToken = generateAccessToken(accessKey, secretKey, requestOptions)
    console.log('Access Token:', accessToken)
    
    // 实际请求
    fetch('https://api.qnaigc.com/v2/stat/usage/apikey/cost?type=month', {
        // 请求接口2:        
        // 'https://api.qnaigc.com/v2/stat/usage/apikey/cost-detail?grain=month&start_date=2026-01-01&end_date=2026-03-31',
        headers: {
            'Authorization': 'Qiniu ' + accessToken
        }
    }).then(res => res.json()).then(console.log)
    
    以上内容是否对您有帮助?