跳到正文
土土金API

为 SaaS 产品集成 AI 功能

给 SaaS 产品加 AI 功能(摘要、写作助手、智能搜索),通常用一个性价比高的对话模型做主力,另一家厂商的模型做降级备用,再用向量模型支撑产品内搜索。按每月 30 万次 AI 调用、3% 走备用模型估算,用最低价分组计算,模型费用每月约 ¥1,496。每个租户或环境用单独的 Key,额度和权限分开管理。

价格更新于 2026年11月13日 01:33

月成本估算

假设:产品每月产生 30 万次 AI 功能调用,每次输入约 1,500 tokens、输出约 300 tokens;其中 3%(9,000 次)因主力模型限流或故障转到备用模型;另有 10 万次搜索请求,每次向量化约 50 tokens。

¥1,496/ 月

  • 主力模型调用¥1,485
  • 降级到备用模型¥10.8
  • 搜索向量化¥0.2
看用量假设

业务问题

在 SaaS 产品里接一个模型、把功能调通并不难,麻烦在上线之后:租户之间用量差别很大,怎么限额;某家模型服务出问题时,功能还能不能用;每月账单怎么拆到每个租户头上。

如果分别对接各家厂商,每多一个模型就多一套 SDK、一份合同、一种付款方式,切换模型和降级都要改代码。

通过一个兼容接口接入,同一套代码就能调用多家模型;在控制台给每把 Key 设好额度、过期时间和白名单,再按 Key 导出用量对账。

推荐模型组合

推荐模型按实时目录自动选取,价格取各模型最低价分组,更新于 2026年11月13日 01:33。点模型名可查看全部分组价格。

参考架构

  1. 1

    服务端代理

    所有模型调用都从你的后端发出。Key 只放在服务端的环境变量或密钥管理服务里,前端只调用你自己的接口。

  2. 2

    按租户分 Key

    每个大客户或每个环境(测试、生产)单独建一把 API Key,设置额度上限、过期时间、模型白名单和服务器 IP 白名单。

  3. 3

    限额与降级

    你的服务里按租户限制请求频率;主力模型返回 429 或 5xx 时切换到备用模型,其他 4xx 错误直接返回给调用方处理。

  4. 4

    记录用量

    每次调用记下租户、模型和响应里的 usage,写进自己的数据库,用来向租户计费或控制套餐额度。

  5. 5

    月度对账

    每月导出控制台「操作日志」,按 Key 和自己的记录对账;发现异常用量,及时停用对应的 Key。

成本估算

假设:产品每月产生 30 万次 AI 功能调用,每次输入约 1,500 tokens、输出约 300 tokens;其中 3%(9,000 次)因主力模型限流或故障转到备用模型;另有 10 万次搜索请求,每次向量化约 50 tokens。

项目模型用量假设费用
主力模型调用gpt-5.4-mini300,000 次 × 输入 1,500 + 输出 300 tokens¥1,485
降级到备用模型Claude Haiku 5.59,000 次 × 输入 1,500 + 输出 300 tokens¥10.8
搜索向量化text-embedding-3-small100,000 次 × 输入 50 tokens¥0.2
合计(每月)¥1,496

按各模型最低价分组的实时价格计算,价格更新于 2026年11月13日 01:33。

只含模型调用费用,不含你的服务器和数据库成本。降级比例只是假设,实际取决于主力模型的状况;文档首次入库的向量化费用另算。调用量翻倍,费用大致翻倍。

示例代码

每个租户用自己的 Key;主力模型返回 429 或 5xx 时切到备用模型,同时记录每次调用的 usage,用于对账。

示例代码(Node.js,服务端调用与降级)
// Server side only: API keys never reach the browser or the app.
import OpenAI from 'openai'

// One key per tenant or environment, each with its own spending limit in the console.
// Load them from your secret store; TUTUJIN_API_KEY is the default key.
function clientFor(tenant) {
  return new OpenAI({
    baseURL: 'https://www.tutujin.com/v1',
    apiKey: process.env['TUTUJIN_KEY_' + tenant.id] || process.env.TUTUJIN_API_KEY,
    timeout: 30_000,
    maxRetries: 1,
  })
}

// Primary first, then a model from another vendor.
const MODELS = ['gpt-5.4-mini', 'claude-haiku-5-5']

export async function summarize(tenant, text) {
  const client = clientFor(tenant)
  let lastError
  for (const model of MODELS) {
    try {
      const resp = await client.chat.completions.create({
        model,
        messages: [
          { role: 'system', content: 'Summarize the content in 3 bullet points.' },
          { role: 'user', content: text },
        ],
        max_tokens: 400,
      })
      await recordUsage(tenant.id, model, resp.usage)
      return resp.choices[0].message.content
    } catch (err) {
      lastError = err
      const status = err?.status
      // 429 and 5xx: try the next model. Other 4xx (bad input, no balance, allowlists): stop here.
      if (status && status < 500 && status !== 429) break
    }
  }
  throw lastError
}

async function recordUsage(tenantId, model, usage) {
  // Store per tenant in your own database; reconcile monthly with the Usage export in the console.
  console.log(tenantId, model, usage?.prompt_tokens, usage?.completion_tokens)
}

// In-product search: embed documents and queries with text-embedding-3-small.

用一把 Key 试试这个方案

注册后在控制台创建 API Key,把上面代码里的 base_url 和 Key 换成你的就能运行。企业采购、开发票可以加客服微信 JsnonoChat。

土土金客服微信二维码
微信JsnonoChat

扫码或搜索微信号添加客服

常见问题

每月 30 万次 AI 调用要多少钱?

按每次输入约 1,500 tokens、输出约 300 tokens,3% 走备用模型,再加 10 万次搜索向量化估算,用最低价分组计算约 ¥1,496。

API Key 能放在前端或 App 里吗?

不能。放在前端的 Key 任何人都能拿到并直接调用。Key 只放在服务端,前端调用你自己的接口,由服务端转发并做权限校验。

怎么给不同租户限额?

在控制台给每个租户建一把单独的 Key 并设置额度上限,用完自动停用;你的服务里再按租户做请求频率限制和套餐额度检查。

某家模型服务出问题时,功能怎么保持可用?

代码里配置两个不同厂商的模型,主力返回 429 或 5xx 时自动切到备用。备用模型的提示词和输出格式要在上线前测好,避免切换后功能表现差别太大。

每月账单怎么拆到租户?

每次调用把 usage 和租户 ID 记进自己的数据库;控制台「操作日志」可以导出,按 Key 和自己的记录核对。