AB
AiBoss
チュートリアル

无问芯穹

チュートリアル

用无问芯穹 MaaS 调用大模型:获取 API Key、调用接口与查询模型信息

无问芯穹大模型服务平台提供兼容 OpenAI 的推理接口,可调用千问、ChatGLM、Llama 2、百川等模型,并支持在不同厂商加速卡上运行。本文从获取 API Key 开始,依次讲解 curl 调用、Token 计数、上下文长度查询、模型列表整理与限流注意事项。

无问芯穹的大模型服务平台(MaaS)把多家厂商的模型放在同一套接口后面,调用方式与 OpenAI 的 Chat Completions 基本一致,同时允许指定模型跑在哪一类加速卡上。它适合两类人:一类是想快速试玩模型、对比不同模型与硬件组合效果的开发者;另一类是要把模型能力接进 LangChain、Dify、LlamaIndex 或自建 ChatBot、Agent 程序中的工程团队。本文按实际使用顺序,讲清获取密钥、发起调用、估算 Token、查询上下文长度、整理模型清单这几件事。站内也有对应的工具页可供参考:无问芯穹。

准备工作

开始之前需要确认几件事,缺一件都会让后面的调用卡住。

  • 注册账号并绑定手机号:平台在导出密钥时会向绑定手机发送验证码,没有绑定手机号就无法完成密钥复制。
  • 拿到 API Key(Secret Key):登录后进入「密钥管理」页面,注册用户会看到系统自动创建的一把密钥。密钥前缀为 sk-,与 OpenAI 的格式保持一致,因此一些按旧版 OpenAI SDK 规则校验密钥的软件可以直接接受它。
  • 确认要用的模型名与芯片类型:接口路径里同时包含模型名和芯片类型,例如 qwen1.5-14b-chat 搭配 nvidia。模型名写错或该模型不支持所选芯片,请求都会失败。
  • 一个能发 HTTP 请求的工具:curl 即可,也可以换成任意 HTTP 客户端或 SDK。

密钥的获取过程分两步:页面先向绑定手机发送一次性验证码,用户输入验证码后,前端带着账号标识与验证码去后端换取真正的 Secret Key。页面上展示的密钥是部分打码的,必须走完验证码流程才能复制完整值。复制出来的密钥形如:

sk-soulteary1234567

这把密钥要妥善保存,后续所有请求都在请求头里携带它。

操作步骤

第一步:用 curl 发起一次对话请求

接口地址的构成是固定的:域名之后依次是模型名、芯片类型、接口名。以在 Nvidia 加速卡上调用千问 1.5 14B 为例:

curl https://cloud.infini-ai.com/maas/qwen1.5-14b-chat/nvidia/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "qwen1.5-14b-chat",
    "messages": [
      {
        "role": "user",
        "content": "你是谁?"
      }
    ]
  }'

请求体结构与 OpenAI 的对话接口一致:model 指定模型,messages 是消息数组,每条消息包含 role 与 content。把 $API_KEY 换成上一步复制到的完整密钥即可。返回结果同样是对话补全的格式,可以直接按 OpenAI 的解析逻辑处理。

如果要把模型接进现成的软件,只要该软件支持自定义 OpenAI 兼容的 Base URL 与密钥,把地址指向平台、密钥填进去即可,通常不需要改代码。

第二步:调用 Token 计数接口估算长度

在生产环境里,调用模型是有成本的,最好在真正发起推理之前先算一下提交内容的长度,判断 Prompt 是否还能压缩,也便于自己做用量统计,避免意外超支。平台提供了 Token 计数接口:

POST https://cloud.infini-ai.com/maas/infini-megrez-7b/nvidia/token_count

请求体需要带上模型名、芯片类型和待计算的文本:

{
  "model": "infini-megrez-7b",
  "chip": "nvidia",
  "prompt": "使用 50 字概括总结“科学家创业”的优势。"
}

返回结果里包含原文与统计出的 Token 数:

{
  "model": "infini-megrez-7b",
  "prompt": "使用 50 字概括总结“科学家创业”的优势。",
  "token_count": 17
}

注意请求体里的芯片字段名是 chip,而路径里的芯片段是 nvidia,两处都要写对。不同模型使用的分词方式不同,常见的几类包括 gpt2、p50k_base、p50k_edit、r50k_base、cl100k_base,因此同一个句子在不同模型下的 Token 数可能不同,计数接口按模型给出结果,比自己估算更可靠。

第三步:查询模型的上下文长度

每个模型能接受的上下文长度不一样,超出长度会被截断或直接报错。平台提供按模型与芯片查询详情的接口:

POST https://cloud.infini-ai.com/maas/{model}/{chiptype}/get_model_details

请求示例:

{
  "model": "qwen-7b-chat",
  "chiptype": "nvidia"
}

返回结构如下,其中 context_length 就是该模型在该芯片上的上下文长度:

{
  "model": "string",
  "context_length": 10241024
}

上下文长度一般不会频繁变化,没必要每次调用都查一遍。可以取一份固定配置,或者每天定时拉取一次并缓存下来,程序运行时直接读缓存,效率更高。

第四步:拉取模型列表并整理芯片支持情况

平台没有提供一份统一的、可直接下载的模型配置,但模型列表接口里其实包含了需要的信息:

https://cloud.infini-ai.com/api/maas/user/v2/model/list

返回内容中每个模型都带有名称、分类、支持的芯片以及上下文长度。芯片支持信息放在 tag_list 字段里,其中 tag_type 为 gpu 的条目描述的是加速卡,tag_extend_info 里则是一段包含 chipType 的字符串。返回结果中还有一个 public 字段,可以据此判断模型的开放范围。

由于平台迭代较快,文档往往跟不上实际支持的模型与芯片,直接读这个接口最准确。在浏览器控制台里执行下面两段脚本,就能把当前支持的全部芯片类型去重列出来:

chipTypes = response.data.model_list
  .map(a => a.tag_list)
  .flat()
  .filter(c => c.tag_type == "gpu")
  .map(a => a.tag_extend_info)

chipTypes
  .map(chip => chip.match(`"chipType": "(.+)"}`)[1])
  .reduce((p, i) => {
    if (!p.includes(i)) { p.push(i) }
    return p;
  }, [])

第一段从模型列表里抽出所有 GPU 标签的扩展信息,第二段用正则取出 chipType 的值并去重。执行后得到的芯片类型集合大致是 nvidia、amd、iluvatar、metax、moorethreads、biren、enflame 这几种。

在此基础上再整理一层,就能得到「模型 + 上下文长度 + 芯片」的对照表,例如 infini-megrez-7b 在 nvidia 与 amd 上都是 4096,chatglm2-6b 在 nvidia 与 enflame 上都是 32768,qwen-7b-chat 在 nvidia、amd、iluvatar 上都是 32768,llama-2-7b-chat 在 nvidia、amd、iluvatar、metax、moorethreads、biren 上都是 4096。把这份结果存成 JSON 配置文件,程序里直接读取,就不必每次请求平台接口了。

一个完整示例

下面把前面的步骤串成一条最小可用流程:先取密钥,再确认模型上下文,估算 Token,最后发起对话。

1. 设置密钥环境变量

export API_KEY="sk-你的完整密钥"

2. 查询目标模型的上下文长度

curl -X POST https://cloud.infini-ai.com/maas/qwen1.5-14b-chat/nvidia/get_model_details \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "qwen1.5-14b-chat",
    "chiptype": "nvidia"
  }'

3. 估算待提交内容的 Token 数

curl -X POST https://cloud.infini-ai.com/maas/infini-megrez-7b/nvidia/token_count \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "infini-megrez-7b",
    "chip": "nvidia",
    "prompt": "使用 50 字概括总结“科学家创业”的优势。"
  }'

4. 发起对话请求

curl https://cloud.infini-ai.com/maas/qwen1.5-14b-chat/nvidia/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $API_KEY" \
  -d '{
    "model": "qwen1.5-14b-chat",
    "messages": [
      {
        "role": "user",
        "content": "你是谁?"
      }
    ]
  }'

四步都返回正常结果,说明密钥、模型名、芯片类型三者匹配,后续就可以把第 4 步的请求封装进自己的程序里。若想换模型或换硬件对比效果,只需替换路径中的模型段与芯片段,并同步修改请求体里的 model 字段。

注意事项

限流与用量

公测期间平台对推理请求有明确限制:每分钟最多 12 次请求,每天最多 3000 次请求,折合每小时不超过 125 次;每分钟允许提交的 Token 上限为 12M。按满额计算,一天最多可请求约 30 亿 Token。这些数值属于公测阶段的策略,正式商用后可能调整,实际以官网当前信息为准。

如果希望在测试阶段尽量用满额度,优先选择上下文较长的模型。通义千问系列以及扩展了 32K 上下文的 GLM 模型支持 32K,其余模型普遍在 4K 到 8K 之间。长上下文模型在同样请求次数下能承载更多内容。

密钥与鉴权

密钥导出必须经过手机验证码,因此无法完全自动化换取,也不适合把换取流程写进无人值守的脚本。页面上目前没有提供自行创建多个 Token 或为 Token 设置额度的地方,如果用于生产环境,需要自行在应用侧做用量控制与告警,例如监控用量突增、陌生 IP 调用等情况。密钥一旦泄露应立即处理,不要把它硬编码进前端代码或公开仓库。

接口路径与字段

模型名与芯片类型同时出现在路径中,两处必须与请求体保持一致。Token 计数接口的请求体字段是 chip,模型详情接口的请求体字段是 chiptype,拼写不同,容易写错。模型列表接口返回的 tag_extend_info 是一段字符串,需要自行解析出 chipType,平台并未把它拆成结构化字段。

硬件信息的可见范围

平台页面上,除 Nvidia 与 AMD 之外的加速卡以「加速卡 A~E」之类的代号展示,但通过模型列表接口仍能拿到厂商标识。目前公开的信息只到厂商层面,显卡具体型号、推理使用的卡数、组网方案与实际带宽、主机配置与虚拟化情况、驱动与生态依赖版本等都属于未披露内容。因此基于平台测得的性能数据有参考价值,但不宜直接当作严格的基准测试结论用于采购决策。

模型与参数

平台已适配的模型覆盖 Llama 2、通义千问、infini-megrez、百川 2、ChatGLM 2 与 ChatGLM 3 等系列,具体清单与各模型支持的芯片以模型广场和列表接口的实时结果为准。网页端试玩页面目前只支持大语言模型。接口侧目前未开放 top_k、presence_penalty 等采样参数,模型表现不完全由调用方控制。价格、配额、可用模型与地区可用性都可能变化,使用前请以官网当前信息为准。