
SiliconFlow
用 SiliconFlow API 调用大语言模型并接入 OpenAI 兼容接口
从注册 SiliconFlow、在模型列表与 Playground 中挑选并试用模型,到创建 API Key、用 REST 接口发起请求,再到通过 OpenAI Python 库以兼容方式调用模型并处理流式输出,本文给出可照着操作的分步流程与完整示例。
SiliconFlow 是一个把多种生成式 AI 模型(语言模型、文生图、图生图等)集中到同一平台调用的服务。它要解决的问题很具体:你不需要为每个模型分别申请账号、分别对接一套 SDK,而是用同一个 API Key、同一套接口风格去访问平台上架的模型。适合两类读者:一是想快速比较不同模型效果、再决定用哪个的应用开发者;二是已经有 OpenAI 调用代码、希望把请求指向另一个服务端点而不重写业务逻辑的团队。本文按「注册 → 看模型 → 在 Playground 试 → 建 Key → 发请求 → 用 OpenAI 库调用」的顺序走一遍,每一步都给出可执行的命令或代码。站内也有对应的工具条目可供查阅:SiliconFlow。
准备工作
开始之前需要确认几件事,缺一件后面的步骤就会卡住。
- 一个 SiliconFlow 账号。平台需要登录后才能查看模型详情、进入 Playground、创建 API Key。没有账号就先注册一个。
- Python 环境。如果打算走 OpenAI 兼容接口这条路,需要 Python 3.7.1 或更高版本,并建议在虚拟环境中安装依赖,避免污染系统环境。
- OpenAI Python 库。通过 pip 安装,命令见下文操作步骤。
- 对模型的基本判断。不同模型在价格、可用上限、能力侧重上都不一样,这些信息在平台的模型页可以查到。具体数值会调整,请以官网当前展示的信息为准。
如果你只是想在网页上试效果,不写代码,那么只需要账号,Python 部分可以跳过。
操作步骤
第一步:登录平台
创建并登录 SiliconFlow 账号。登录之后,模型列表、Playground、API Keys 这几个页面才会对你开放。这一步没有技术门槛,但它是后面所有操作的前提。
第二步:查看模型列表与详情
进入平台的模型页面,可以看到当前上架的全部模型。每个模型的详情里通常包含这些信息:
- 模型标识(调用时要填的 model 字段值,形如
deepseek-ai/DeepSeek-R1) - 价格
- 单个用户的最大使用上限
- 模型能力与适用场景的说明
模型详情页上还有一个「在线体验」入口,可以不写代码直接试这个模型。选模型时建议先在这里过一遍:同一个任务用两三个模型各跑一次,比只看介绍文字可靠得多。价格与配额属于经常变动的信息,务必以官网当前页面为准,不要依据旧文章里的数字做预算。
第三步:在 Playground 中试用能力
打开 Playground 页面。左侧边栏可以切换模型类别,包括语言模型、文生图模型、图生图模型。选中某一类之后,再挑具体模型,就可以开始实时测试。
操作方式是:填入相关参数和提示词(prompt),点击「Run」按钮,页面会显示该模型生成的结果。这一步的价值在于把参数调到满意再写进代码——温度、最大输出长度这类参数在网页上调比在代码里反复改快得多。
Playground 覆盖的是平台的主要生成能力,语言模型、图像生成都在其中。如果你要做的任务在 Playground 里找不到对应类别,说明该能力可能不在当前开放范围内,回到模型列表确认一下。
第四步:创建 API Key
进入 API Keys 页面,点击「Create API Key」,生成你的密钥。这个 Key 就是后续所有程序化调用的凭证。
关于 Key 的处理,有几点值得在动手写代码前就定下来:
- 不要把 Key 硬编码进提交到版本库的源码里,用环境变量或本地配置文件承载。
- 如果多人协作,考虑为不同用途分别创建 Key,便于日后单独吊销某一个而不影响其他服务。
- Key 一旦泄露,应立即在平台上删除并重新生成。
第五步:通过 REST API 发起调用
拿到 Key 之后,最直接的调用方式是在平台的文档页面直接发起在线请求。文档页支持按编程语言生成对应的代码片段:选好语言,填入参数,页面会给出可直接复制使用的请求代码。对于不想先装 SDK 的场景,这是最快的验证路径。
REST 方式的好处是语言无关——任何能发 HTTP 请求的环境都能用,不限于 Python。如果你用的是 Go、Java、Node.js 或者干脆是 curl,走这条路即可。
第六步:通过 OpenAI 兼容接口调用
平台上的部分大语言模型支持用 OpenAI 官方库直接调用。这意味着已有的 OpenAI 代码只需要改两个地方——API Key 和 base_url——就能指向 SiliconFlow 的模型。平台目前支持大部分 OpenAI 相关参数。
先准备环境。安装 Python 3.7.1 或更高版本,建立虚拟环境,然后在终端或命令行中执行:
pip install --upgrade openai
安装完成后,运行 pip list 查看当前环境里已安装的 Python 库,确认 OpenAI 库已经装上。确认无误后,就可以用 OpenAI 的接口形式发起调用了。
一个完整示例
下面这段代码演示了用 OpenAI Python 库调用 SiliconFlow 上的语言模型,并处理流式返回。它同时处理了两种输出:正文内容和推理内容。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://api.siliconflow.com/v1"
)
response = client.chat.completions.create(
model="deepseek-ai/DeepSeek-R1",
messages=[
{"role": "user", "content": "tell me a story"}
],
stream=True
)
for chunk in response:
if not chunk.choices:
continue
if chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)
if chunk.choices[0].delta.reasoning_content:
print(chunk.choices[0].delta.reasoning_content, end="", flush=True)
逐段说明这段代码在做什么:
- 构造客户端。
OpenAI()接收api_key与base_url两个参数。把YOUR_API_KEY换成第四步生成的密钥;base_url指向 SiliconFlow 的兼容端点,而不是 OpenAI 官方地址。这两处是整段代码里唯一需要改的地方。 - 发起请求。
client.chat.completions.create()的用法与调用 OpenAI 时完全一致。model填模型列表里看到的标识;messages是标准的对话消息数组;stream=True表示流式返回,边生成边输出。 - 遍历返回块。流式模式下返回的是一个可迭代对象,每个
chunk是一小段增量。循环里先判断chunk.choices是否为空——有些块只携带元信息,没有实际内容,直接跳过。 - 输出正文。
chunk.choices[0].delta.content是模型生成的正文片段,用end=""和flush=True让它连续打印而不是每段换行。 - 输出推理内容。
chunk.choices[0].delta.reasoning_content是推理类模型额外返回的思考过程。不是所有模型都有这个字段,所以要先判断存在再打印。如果你只想看最终答案,把这一段去掉即可。
把这段代码保存为 demo.py,替换 Key 之后运行,就能看到模型逐字输出的结果。跑通之后,把 messages 里的内容换成你的实际任务,把 model 换成你在模型列表里选定的模型,就是一个可用的最小生产脚本。
如果不需要流式输出,把 stream=True 去掉,直接从返回对象的 choices[0].message.content 取完整结果即可。流式适合交互式界面,非流式适合批处理。
注意事项
模型支持范围不是全量的。OpenAI 兼容接口只对「部分」大语言模型开放,不是平台上所有模型都能用这种方式调用。选模型前先在模型详情里确认它是否支持 OpenAI 接口;不支持的模型走 REST 方式。
参数兼容性是「大部分」而非「全部」。平台目前支持大部分 OpenAI 相关参数,但并不意味着 OpenAI 文档里的每个参数都能原样生效。遇到某个参数不生效的情况,先查平台文档里该模型的参数说明,不要默认它和 OpenAI 完全一致。
价格与配额会变。模型价格、单用户最大使用上限这类信息在模型页展示,属于会调整的内容。做成本估算或容量规划时,以官网当前信息为准,不要沿用任何文章里的历史数字。
Python 版本有下限。OpenAI 库要求 Python 3.7.1 或更高。版本过低时安装会失败或运行时报错,先升级解释器再装库。
base_url 写错是最常见的失败原因。沿用 OpenAI 官方地址会导致请求打到错误的服务上,表现为鉴权失败或模型不存在。检查 base_url 是否指向 SiliconFlow 的兼容端点。
流式返回要处理空块。如示例所示,流式响应中会出现 choices 为空的块。不判断就直接取 chunk.choices[0] 会抛索引错误,这是流式代码里最常见的崩溃点。
推理字段并非所有模型都有。reasoning_content 只出现在推理类模型的返回中。对普通模型访问该字段会得到空值或属性错误,代码里应做存在性判断。
先用 Playground 验证再写代码。参数和提示词在网页上调好,再搬进脚本,能省掉大量「改了代码跑一次看结果」的往返。这一步不是可选项,尤其是第一次用某个模型时。