文本生成模型
SilvaMux 支持多种厂商协议兼容入口,也提供一个可选的统一入口。新项目建议按照目标模型支持的厂商协议接入;使用 OpenAI SDK 的项目默认选择 OpenAI Chat Completions 兼容入口。
下列端点接收对应厂商的请求格式,并保持相应的响应和错误结构,适合官方 SDK、已有代码迁移或需要字段级透传的场景。
| 兼容格式 | 端点 | 文档 |
|---|
| OpenAI Chat Completions | POST /api/v1/chat/completions | OpenAI 兼容接口 |
| Anthropic | POST /api/v1/messages | Anthropic 兼容 |
| Volcengine v3 | POST /api/v3/chat/completions | Volcengine 兼容 |
| 智谱 | POST /api/paas/v4/chat/completions | 智谱兼容 |
| SilvaMux 统一入口 | POST /api/v0/chat/completions | SilvaMux 统一入口 |
| Responses | POST /api/v1/responses | 兼容 OpenAI Responses API,适用于支持的模型(如 codex 系列) |
| Gemini | POST /api/v1beta/models/{model}:generateContent | 兼容 Gemini generateContent 格式;当前无公开可发现模型,不作为可执行示例 |
这些路径属于 SilvaMux 的兼容入口,并非模型厂商的官方服务地址。调用时使用 SilvaMux 提供的 API Key。公开 OpenAPI 仅以上表中的标准路径作为新接入契约;历史地址 /api/anthropic/v1/messages 和 /api/v1/gemini/v1beta/models/{model}:generateContent 仅供已接入项目兼容,新项目不应使用。
兼容 OpenAI Responses API,适用于支持的模型(如 codex 系列):
POST/api/v1/responses
OpenAI Responses
🔑Bearer API Key请求头使用 Authorization: Bearer sk_live_...,也支持 x-api-key。
🧩先确认模型调用名请先在 模型广场 筛选支持当前接口格式的模型,打开模型详情页复制调用名。当前账号的最终可用范围还受组织权限影响。 请求结构
下方内容用于确认方法、地址和鉴权方式,属于 HTTP 结构片段,不是可独立执行示例。
POST https://www.silvamux.com/api/v1/responses
Authorization: Bearer $SILVAMUX_API_KEY
Content-Type: application/json
请求体
application/json · ResponsesRequest · 必填
| 字段 | 类型 | 必填 | 说明 |
|---|
input | string | array<FreeFormObject> | 是 | — |
model | string | 是 | 从模型广场选择标注支持 OpenAI Responses 的模型并复制调用名。 |
stream | boolean | 否 | 默认值:false |
响应
200Responses JSON 或 SSE 响应。
application/json · FreeFormObject
defaultOpenAI 兼容错误。
application/json · OpenAIError
| 字段 | 类型 | 必填 | 说明 |
|---|
error | object | 是 | — |
error.code | string | integer | 否 | — |
error.message | string | 是 | — |
error.type | string | 否 | — |
OpenAI Chat 与统一入口的常用参数:
| 参数 | 类型 | 说明 |
|---|
model | string | 必填。模型调用名(id 或 alias),如 minimax-m2.5、doubao-seed-2.0-pro |
messages | array | 必填。对话消息列表,格式同 OpenAI(role + content) |
stream | boolean | 是否流式返回,默认 false |
temperature | number | 采样温度,默认 1.0 |
max_tokens | integer | 最大生成 token 数 |
不同厂商协议的字段结构不同。请先在模型广场筛选支持目标接口格式的模型,再复制详情页中的调用名填入 model。
Authorization: Bearer <API_KEY> 或 x-api-key: <API_KEY>。
设置 stream: true 即可获得流式响应(SSE)。响应为 text/event-stream,每个事件以 data: 开头。最终可能收到 choices 为空、带有 usage 的用量 chunk,随后服务器关闭连接;客户端不应仅依赖 data: [DONE] 判断完成。Anthropic 格式流式遵循 Anthropic SSE 规范。
curl https://www.silvamux.com/api/v1/chat/completions \
-H "Authorization: Bearer $SILVAMUX_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "minimax-m2.5",
"messages": [{"role": "user", "content": "写一首五言绝句"}],
"stream": true
}'
# pip install openai
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["SILVAMUX_API_KEY"],
base_url="https://www.silvamux.com/api/v1",
)
stream = client.chat.completions.create(
model="minimax-m2.5",
messages=[{"role": "user", "content": "写一首五言绝句"}],
stream=True,
)
for chunk in stream:
if chunk.choices:
delta = chunk.choices[0].delta.content
if delta:
print(delta, end="", flush=True)
if chunk.usage:
print(f"\n用量:{chunk.usage}")
// npm install openai
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.SILVAMUX_API_KEY,
baseURL: "https://www.silvamux.com/api/v1",
});
const stream = await client.chat.completions.create({
model: "minimax-m2.5",
messages: [{ role: "user", content: "写一首五言绝句" }],
stream: true,
});
for await (const chunk of stream) {
const delta = chunk.choices[0]?.delta?.content;
if (delta) process.stdout.write(delta);
}
// 仅依赖标准库
package main
import (
"bufio"
"bytes"
"encoding/json"
"fmt"
"net/http"
"os"
"strings"
)
func main() {
payload := []byte(`{
"model": "minimax-m2.5",
"messages": [{"role": "user", "content": "写一首五言绝句"}],
"stream": true
}`)
req, err := http.NewRequest("POST", "https://www.silvamux.com/api/v1/chat/completions", bytes.NewReader(payload))
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+os.Getenv("SILVAMUX_API_KEY"))
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
scanner := bufio.NewScanner(resp.Body)
for scanner.Scan() {
line := scanner.Text()
if !strings.HasPrefix(line, "data: ") {
continue
}
data := strings.TrimPrefix(line, "data: ")
if data == "[DONE]" {
break
}
var chunk struct {
Choices []struct {
Delta struct {
Content string `json:"content"`
} `json:"delta"`
} `json:"choices"`
}
if err := json.Unmarshal([]byte(data), &chunk); err != nil {
continue
}
if len(chunk.Choices) > 0 {
fmt.Print(chunk.Choices[0].Delta.Content)
}
}
}
图片、音频等多模态输入格式见多模态输入。