[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"docs-nav-zh":3,"docs-zh-models\u002Fchat\u002Foverview":144,"$fMfNGmlyCdNoDCVQ7TgrfnLxKMln4u_bAZVPHPJkuObA":1163},[4,52,69,119,136,140],{"title":5,"path":6,"stem":7,"children":8,"page":-1},"快速开始","\u002Fgetting-started","1.getting-started",[9,12,30,44,48],{"title":10,"path":6,"stem":11},"关于 SilvaMux","1.getting-started\u002Findex",{"title":13,"path":14,"stem":15,"children":16,"page":-1},"首次调用千木 API","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F1.quick-start\u002Findex",[17,18,22,26],{"title":13,"path":14,"stem":15},{"title":19,"path":20,"stem":21},"项目和账户设置","\u002Fgetting-started\u002Fquick-start\u002Fproject-and-account","1.getting-started\u002F1.quick-start\u002F2.project-and-account",{"title":23,"path":24,"stem":25},"获取 API Key","\u002Fgetting-started\u002Fquick-start\u002Fapi-key","1.getting-started\u002F1.quick-start\u002F3.api-key",{"title":27,"path":28,"stem":29},"第一个请求","\u002Fgetting-started\u002Fquick-start\u002Ffirst-request","1.getting-started\u002F1.quick-start\u002F4.first-request",{"title":31,"path":32,"stem":33,"children":34,"page":43},"模型与体验","\u002Fgetting-started\u002Fmodels-and-experience","1.getting-started\u002F2.models-and-experience",[35,39],{"title":36,"path":37,"stem":38},"模型选择","\u002Fgetting-started\u002Fmodels-and-experience\u002Fmodel-selection","1.getting-started\u002F2.models-and-experience\u002F1.model-selection",{"title":40,"path":41,"stem":42},"在线体验","\u002Fgetting-started\u002Fmodels-and-experience\u002Fplayground","1.getting-started\u002F2.models-and-experience\u002F2.playground",false,{"title":45,"path":46,"stem":47},"限流","\u002Fgetting-started\u002Frate-limits","1.getting-started\u002F3.rate-limits",{"title":49,"path":50,"stem":51},"常见问题","\u002Fgetting-started\u002Ffaq","1.getting-started\u002F4.faq",{"title":53,"path":54,"stem":55,"children":56,"page":43},"产品计费","\u002Fbilling","2.billing",[57,61,65],{"title":58,"path":59,"stem":60},"计费说明","\u002Fbilling\u002Foverview","2.billing\u002F1.overview",{"title":62,"path":63,"stem":64},"在线充值","\u002Fbilling\u002Frecharge","2.billing\u002F2.recharge",{"title":66,"path":67,"stem":68},"账单、用量与导出","\u002Fbilling\u002Fusage-export","2.billing\u002F3.usage-export",{"title":70,"path":71,"stem":72,"children":73,"page":43},"模型接口","\u002Fmodels","4.models",[74,107],{"title":75,"path":76,"stem":77,"children":78,"page":43},"文本生成","\u002Fmodels\u002Fchat","4.models\u002F1.chat",[79,83,87,91,95,99,103],{"title":80,"path":81,"stem":82},"概述","\u002Fmodels\u002Fchat\u002Foverview","4.models\u002F1.chat\u002F1.overview",{"title":84,"path":85,"stem":86},"OpenAI 兼容接口","\u002Fmodels\u002Fchat\u002Fopenai","4.models\u002F1.chat\u002F2.openai",{"title":88,"path":89,"stem":90},"Anthropic 兼容","\u002Fmodels\u002Fchat\u002Fanthropic","4.models\u002F1.chat\u002F3.anthropic",{"title":92,"path":93,"stem":94},"Volcengine 兼容","\u002Fmodels\u002Fchat\u002Fvolcengine","4.models\u002F1.chat\u002F4.volcengine",{"title":96,"path":97,"stem":98},"智谱兼容","\u002Fmodels\u002Fchat\u002Fzhipu","4.models\u002F1.chat\u002F5.zhipu",{"title":100,"path":101,"stem":102},"SilvaMux 统一入口","\u002Fmodels\u002Fchat\u002Funified","4.models\u002F1.chat\u002F6.unified",{"title":104,"path":105,"stem":106},"多模态输入","\u002Fmodels\u002Fchat\u002Fmultimodal","4.models\u002F1.chat\u002F7.multimodal",{"title":108,"path":109,"stem":110,"children":111,"page":43},"图片生成","\u002Fmodels\u002Fimages","4.models\u002F2.images",[112,115],{"title":80,"path":113,"stem":114},"\u002Fmodels\u002Fimages\u002Foverview","4.models\u002F2.images\u002F1.overview",{"title":116,"path":117,"stem":118},"图片生成接口","\u002Fmodels\u002Fimages\u002Fgeneration","4.models\u002F2.images\u002F2.generation",{"title":120,"path":121,"stem":122,"children":123,"page":43},"用量与余额","\u002Fusage-and-balance","5.usage-and-balance",[124,128,132],{"title":125,"path":126,"stem":127},"查询余额","\u002Fusage-and-balance\u002Fbalance","5.usage-and-balance\u002F1.balance",{"title":129,"path":130,"stem":131},"查询用量","\u002Fusage-and-balance\u002Fusage","5.usage-and-balance\u002F2.usage",{"title":133,"path":134,"stem":135},"查询单次请求消耗","\u002Fusage-and-balance\u002Frequest-usage","5.usage-and-balance\u002F3.request-usage",{"title":137,"path":138,"stem":139},"错误码参考","\u002Ferrors","6.errors",{"title":141,"path":142,"stem":143},"文档首页","\u002F","index",{"id":145,"title":80,"body":146,"description":1156,"extension":1157,"meta":1158,"navigation":619,"path":81,"rawbody":1159,"requiredFlags":1160,"seo":1161,"stem":82,"__hash__":1162},"docs\u002F4.models\u002F1.chat\u002F1.overview.md",{"type":147,"value":148,"toc":1147},"minimark",[149,153,166,171,174,303,314,319,322,327,330,333,441,455,458,466,469,496,1134,1137,1143],[150,151,152],"h1",{"id":152},"文本生成模型",[154,155,156,157,161,162,165],"p",{},"SilvaMux 支持多种",[158,159,160],"strong",{},"厂商协议兼容入口","，也提供一个可选的",[158,163,164],{},"统一入口","。新项目建议按照目标模型支持的厂商协议接入；使用 OpenAI SDK 的项目默认选择 OpenAI Chat Completions 兼容入口。",[167,168,170],"h2",{"id":169},"厂商协议兼容入口推荐","厂商协议兼容入口（推荐）",[154,172,173],{},"下列端点接收对应厂商的请求格式，并保持相应的响应和错误结构，适合官方 SDK、已有代码迁移或需要字段级透传的场景。",[175,176,177,193],"table",{},[178,179,180],"thead",{},[181,182,183,187,190],"tr",{},[184,185,186],"th",{},"兼容格式",[184,188,189],{},"端点",[184,191,192],{},"文档",[194,195,196,214,229,244,259,273,286],"tbody",{},[181,197,198,202,208],{},[199,200,201],"td",{},"OpenAI Chat Completions",[199,203,204],{},[205,206,207],"code",{},"POST \u002Fapi\u002Fv1\u002Fchat\u002Fcompletions",[199,209,210],{},[211,212,84],"a",{"href":213},"\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fopenai",[181,215,216,219,224],{},[199,217,218],{},"Anthropic",[199,220,221],{},[205,222,223],{},"POST \u002Fapi\u002Fv1\u002Fmessages",[199,225,226],{},[211,227,88],{"href":228},"\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fanthropic",[181,230,231,234,239],{},[199,232,233],{},"Volcengine v3",[199,235,236],{},[205,237,238],{},"POST \u002Fapi\u002Fv3\u002Fchat\u002Fcompletions",[199,240,241],{},[211,242,92],{"href":243},"\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fvolcengine",[181,245,246,249,254],{},[199,247,248],{},"智谱",[199,250,251],{},[205,252,253],{},"POST \u002Fapi\u002Fpaas\u002Fv4\u002Fchat\u002Fcompletions",[199,255,256],{},[211,257,96],{"href":258},"\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fzhipu",[181,260,261,263,268],{},[199,262,100],{},[199,264,265],{},[205,266,267],{},"POST \u002Fapi\u002Fv0\u002Fchat\u002Fcompletions",[199,269,270],{},[211,271,100],{"href":272},"\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Funified",[181,274,275,278,283],{},[199,276,277],{},"Responses",[199,279,280],{},[205,281,282],{},"POST \u002Fapi\u002Fv1\u002Fresponses",[199,284,285],{},"兼容 OpenAI Responses API，适用于支持的模型（如 codex 系列）",[181,287,288,291,296],{},[199,289,290],{},"Gemini",[199,292,293],{},[205,294,295],{},"POST \u002Fapi\u002Fv1beta\u002Fmodels\u002F{model}:generateContent",[199,297,298,299,302],{},"兼容 Gemini ",[205,300,301],{},"generateContent"," 格式；当前无公开可发现模型，不作为可执行示例",[154,304,305,306,309,310,313],{},"这些路径属于 SilvaMux 的兼容入口，并非模型厂商的官方服务地址。调用时使用 SilvaMux 提供的 API Key。公开 OpenAPI 仅以上表中的标准路径作为新接入契约；历史地址 ",[205,307,308],{},"\u002Fapi\u002Fanthropic\u002Fv1\u002Fmessages"," 和 ",[205,311,312],{},"\u002Fapi\u002Fv1\u002Fgemini\u002Fv1beta\u002Fmodels\u002F{model}:generateContent"," 仅供已接入项目兼容，新项目不应使用。",[315,316,318],"h3",{"id":317},"openai-responses","OpenAI Responses",[154,320,321],{},"兼容 OpenAI Responses API，适用于支持的模型（如 codex 系列）：",[323,324],"api-endpoint",{"method":325,"path":326},"POST","\u002Fapi\u002Fv1\u002Fresponses",[167,328,329],{"id":329},"常用参数",[154,331,332],{},"OpenAI Chat 与统一入口的常用参数：",[175,334,335,348],{},[178,336,337],{},[181,338,339,342,345],{},[184,340,341],{},"参数",[184,343,344],{},"类型",[184,346,347],{},"说明",[194,349,350,378,399,415,428],{},[181,351,352,357,360],{},[199,353,354],{},[205,355,356],{},"model",[199,358,359],{},"string",[199,361,362,363,366,367,370,371,374,375],{},"必填。模型调用名（",[205,364,365],{},"id"," 或 ",[205,368,369],{},"alias","），如 ",[205,372,373],{},"minimax-m2.5","、",[205,376,377],{},"doubao-seed-2.0-pro",[181,379,380,385,388],{},[199,381,382],{},[205,383,384],{},"messages",[199,386,387],{},"array",[199,389,390,391,394,395,398],{},"必填。对话消息列表，格式同 OpenAI（",[205,392,393],{},"role"," + ",[205,396,397],{},"content","）",[181,400,401,406,409],{},[199,402,403],{},[205,404,405],{},"stream",[199,407,408],{},"boolean",[199,410,411,412],{},"是否流式返回，默认 ",[205,413,414],{},"false",[181,416,417,422,425],{},[199,418,419],{},[205,420,421],{},"temperature",[199,423,424],{},"number",[199,426,427],{},"采样温度，默认 1.0",[181,429,430,435,438],{},[199,431,432],{},[205,433,434],{},"max_tokens",[199,436,437],{},"integer",[199,439,440],{},"最大生成 token 数",[442,443,444],"blockquote",{},[154,445,446,447,451,452,454],{},"不同厂商协议的字段结构不同。请先在",[211,448,450],{"href":449},"\u002Fzh-cn\u002Fmodels","模型广场","筛选支持目标接口格式的模型，再复制详情页中的调用名填入 ",[205,453,356],{},"。",[167,456,457],{"id":457},"认证",[154,459,460,366,463,454],{},[205,461,462],{},"Authorization: Bearer \u003CAPI_KEY>",[205,464,465],{},"x-api-key: \u003CAPI_KEY>",[167,467,468],{"id":468},"流式输出",[154,470,471,472,475,476,479,480,483,484,487,488,491,492,495],{},"设置 ",[205,473,474],{},"stream: true"," 即可获得流式响应（SSE）。响应为 ",[205,477,478],{},"text\u002Fevent-stream","，每个事件以 ",[205,481,482],{},"data: "," 开头。最终可能收到 ",[205,485,486],{},"choices"," 为空、带有 ",[205,489,490],{},"usage"," 的用量 chunk，随后服务器关闭连接；客户端不应仅依赖 ",[205,493,494],{},"data: [DONE]"," 判断完成。Anthropic 格式流式遵循 Anthropic SSE 规范。",[497,498,499,590,717,813],"code-tabs",{},[500,501,503],"code-tab",{"label":502},"cURL",[504,505,510],"pre",{"className":506,"code":507,"language":508,"meta":509,"style":509},"language-bash shiki shiki-themes github-light github-dark","curl https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer $SILVAMUX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"minimax-m2.5\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n    \"stream\": true\n  }'\n","bash","",[205,511,512,529,547,557,566,572,578,584],{"__ignoreMap":509},[513,514,517,521,525],"span",{"class":515,"line":516},"line",1,[513,518,520],{"class":519},"sScJk","curl",[513,522,524],{"class":523},"sZZnC"," https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions",[513,526,528],{"class":527},"sj4cs"," \\\n",[513,530,532,535,538,542,545],{"class":515,"line":531},2,[513,533,534],{"class":527},"  -H",[513,536,537],{"class":523}," \"Authorization: Bearer ",[513,539,541],{"class":540},"sVt8B","$SILVAMUX_API_KEY",[513,543,544],{"class":523},"\"",[513,546,528],{"class":527},[513,548,550,552,555],{"class":515,"line":549},3,[513,551,534],{"class":527},[513,553,554],{"class":523}," \"Content-Type: application\u002Fjson\"",[513,556,528],{"class":527},[513,558,560,563],{"class":515,"line":559},4,[513,561,562],{"class":527},"  -d",[513,564,565],{"class":523}," '{\n",[513,567,569],{"class":515,"line":568},5,[513,570,571],{"class":523},"    \"model\": \"minimax-m2.5\",\n",[513,573,575],{"class":515,"line":574},6,[513,576,577],{"class":523},"    \"messages\": [{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n",[513,579,581],{"class":515,"line":580},7,[513,582,583],{"class":523},"    \"stream\": true\n",[513,585,587],{"class":515,"line":586},8,[513,588,589],{"class":523},"  }'\n",[500,591,593],{"label":592},"Python",[504,594,598],{"className":595,"code":596,"language":597,"meta":509,"style":509},"language-python shiki shiki-themes github-light github-dark","# pip install openai\nimport os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ[\"SILVAMUX_API_KEY\"],\n    base_url=\"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\",\n)\n\nstream = client.chat.completions.create(\n    model=\"minimax-m2.5\",\n    messages=[{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n    stream=True,\n)\nfor chunk in stream:\n    if chunk.choices:\n        delta = chunk.choices[0].delta.content\n        if delta:\n            print(delta, end=\"\", flush=True)\n    if chunk.usage:\n        print(f\"\\n用量：{chunk.usage}\")\n","python",[205,599,600,605,610,615,621,626,631,636,641,646,652,658,664,670,675,681,687,693,699,705,711],{"__ignoreMap":509},[513,601,602],{"class":515,"line":516},[513,603,604],{},"# pip install openai\n",[513,606,607],{"class":515,"line":531},[513,608,609],{},"import os\n",[513,611,612],{"class":515,"line":549},[513,613,614],{},"from openai import OpenAI\n",[513,616,617],{"class":515,"line":559},[513,618,620],{"emptyLinePlaceholder":619},true,"\n",[513,622,623],{"class":515,"line":568},[513,624,625],{},"client = OpenAI(\n",[513,627,628],{"class":515,"line":574},[513,629,630],{},"    api_key=os.environ[\"SILVAMUX_API_KEY\"],\n",[513,632,633],{"class":515,"line":580},[513,634,635],{},"    base_url=\"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\",\n",[513,637,638],{"class":515,"line":586},[513,639,640],{},")\n",[513,642,644],{"class":515,"line":643},9,[513,645,620],{"emptyLinePlaceholder":619},[513,647,649],{"class":515,"line":648},10,[513,650,651],{},"stream = client.chat.completions.create(\n",[513,653,655],{"class":515,"line":654},11,[513,656,657],{},"    model=\"minimax-m2.5\",\n",[513,659,661],{"class":515,"line":660},12,[513,662,663],{},"    messages=[{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n",[513,665,667],{"class":515,"line":666},13,[513,668,669],{},"    stream=True,\n",[513,671,673],{"class":515,"line":672},14,[513,674,640],{},[513,676,678],{"class":515,"line":677},15,[513,679,680],{},"for chunk in stream:\n",[513,682,684],{"class":515,"line":683},16,[513,685,686],{},"    if chunk.choices:\n",[513,688,690],{"class":515,"line":689},17,[513,691,692],{},"        delta = chunk.choices[0].delta.content\n",[513,694,696],{"class":515,"line":695},18,[513,697,698],{},"        if delta:\n",[513,700,702],{"class":515,"line":701},19,[513,703,704],{},"            print(delta, end=\"\", flush=True)\n",[513,706,708],{"class":515,"line":707},20,[513,709,710],{},"    if chunk.usage:\n",[513,712,714],{"class":515,"line":713},21,[513,715,716],{},"        print(f\"\\n用量：{chunk.usage}\")\n",[500,718,720],{"label":719},"JavaScript",[504,721,725],{"className":722,"code":723,"language":724,"meta":509,"style":509},"language-javascript shiki shiki-themes github-light github-dark","\u002F\u002F npm install openai\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: process.env.SILVAMUX_API_KEY,\n  baseURL: \"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\",\n});\n\nconst stream = await client.chat.completions.create({\n  model: \"minimax-m2.5\",\n  messages: [{ role: \"user\", content: \"写一首五言绝句\" }],\n  stream: true,\n});\n\nfor await (const chunk of stream) {\n  const delta = chunk.choices[0]?.delta?.content;\n  if (delta) process.stdout.write(delta);\n}\n","javascript",[205,726,727,732,737,741,746,751,756,761,765,770,775,780,785,789,793,798,803,808],{"__ignoreMap":509},[513,728,729],{"class":515,"line":516},[513,730,731],{},"\u002F\u002F npm install openai\n",[513,733,734],{"class":515,"line":531},[513,735,736],{},"import OpenAI from \"openai\";\n",[513,738,739],{"class":515,"line":549},[513,740,620],{"emptyLinePlaceholder":619},[513,742,743],{"class":515,"line":559},[513,744,745],{},"const client = new OpenAI({\n",[513,747,748],{"class":515,"line":568},[513,749,750],{},"  apiKey: process.env.SILVAMUX_API_KEY,\n",[513,752,753],{"class":515,"line":574},[513,754,755],{},"  baseURL: \"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\",\n",[513,757,758],{"class":515,"line":580},[513,759,760],{},"});\n",[513,762,763],{"class":515,"line":586},[513,764,620],{"emptyLinePlaceholder":619},[513,766,767],{"class":515,"line":643},[513,768,769],{},"const stream = await client.chat.completions.create({\n",[513,771,772],{"class":515,"line":648},[513,773,774],{},"  model: \"minimax-m2.5\",\n",[513,776,777],{"class":515,"line":654},[513,778,779],{},"  messages: [{ role: \"user\", content: \"写一首五言绝句\" }],\n",[513,781,782],{"class":515,"line":660},[513,783,784],{},"  stream: true,\n",[513,786,787],{"class":515,"line":666},[513,788,760],{},[513,790,791],{"class":515,"line":672},[513,792,620],{"emptyLinePlaceholder":619},[513,794,795],{"class":515,"line":677},[513,796,797],{},"for await (const chunk of stream) {\n",[513,799,800],{"class":515,"line":683},[513,801,802],{},"  const delta = chunk.choices[0]?.delta?.content;\n",[513,804,805],{"class":515,"line":689},[513,806,807],{},"  if (delta) process.stdout.write(delta);\n",[513,809,810],{"class":515,"line":695},[513,811,812],{},"}\n",[500,814,816],{"label":815},"Go",[504,817,821],{"className":818,"code":819,"language":820,"meta":509,"style":509},"language-go shiki shiki-themes github-light github-dark","\u002F\u002F 仅依赖标准库\npackage main\n\nimport (\n    \"bufio\"\n    \"bytes\"\n    \"encoding\u002Fjson\"\n    \"fmt\"\n    \"net\u002Fhttp\"\n    \"os\"\n    \"strings\"\n)\n\nfunc main() {\n    payload := []byte(`{\n        \"model\": \"minimax-m2.5\",\n        \"messages\": [{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n        \"stream\": true\n    }`)\n\n    req, err := http.NewRequest(\"POST\", \"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions\", bytes.NewReader(payload))\n    if err != nil {\n        panic(err)\n    }\n    req.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"SILVAMUX_API_KEY\"))\n    req.Header.Set(\"Content-Type\", \"application\u002Fjson\")\n\n    resp, err := http.DefaultClient.Do(req)\n    if err != nil {\n        panic(err)\n    }\n    defer resp.Body.Close()\n\n    scanner := bufio.NewScanner(resp.Body)\n    for scanner.Scan() {\n        line := scanner.Text()\n        if !strings.HasPrefix(line, \"data: \") {\n            continue\n        }\n        data := strings.TrimPrefix(line, \"data: \")\n        if data == \"[DONE]\" {\n            break\n        }\n        var chunk struct {\n            Choices []struct {\n                Delta struct {\n                    Content string `json:\"content\"`\n                } `json:\"delta\"`\n            } `json:\"choices\"`\n        }\n        if err := json.Unmarshal([]byte(data), &chunk); err != nil {\n            continue\n        }\n        if len(chunk.Choices) > 0 {\n            fmt.Print(chunk.Choices[0].Delta.Content)\n        }\n    }\n}\n","go",[205,822,823,828,833,837,842,847,852,857,862,867,872,877,881,885,890,895,900,905,910,915,919,924,930,936,942,948,954,959,965,970,975,980,986,991,997,1003,1009,1015,1021,1027,1033,1039,1045,1050,1056,1062,1068,1074,1080,1086,1091,1097,1102,1107,1113,1119,1124,1129],{"__ignoreMap":509},[513,824,825],{"class":515,"line":516},[513,826,827],{},"\u002F\u002F 仅依赖标准库\n",[513,829,830],{"class":515,"line":531},[513,831,832],{},"package main\n",[513,834,835],{"class":515,"line":549},[513,836,620],{"emptyLinePlaceholder":619},[513,838,839],{"class":515,"line":559},[513,840,841],{},"import (\n",[513,843,844],{"class":515,"line":568},[513,845,846],{},"    \"bufio\"\n",[513,848,849],{"class":515,"line":574},[513,850,851],{},"    \"bytes\"\n",[513,853,854],{"class":515,"line":580},[513,855,856],{},"    \"encoding\u002Fjson\"\n",[513,858,859],{"class":515,"line":586},[513,860,861],{},"    \"fmt\"\n",[513,863,864],{"class":515,"line":643},[513,865,866],{},"    \"net\u002Fhttp\"\n",[513,868,869],{"class":515,"line":648},[513,870,871],{},"    \"os\"\n",[513,873,874],{"class":515,"line":654},[513,875,876],{},"    \"strings\"\n",[513,878,879],{"class":515,"line":660},[513,880,640],{},[513,882,883],{"class":515,"line":666},[513,884,620],{"emptyLinePlaceholder":619},[513,886,887],{"class":515,"line":672},[513,888,889],{},"func main() {\n",[513,891,892],{"class":515,"line":677},[513,893,894],{},"    payload := []byte(`{\n",[513,896,897],{"class":515,"line":683},[513,898,899],{},"        \"model\": \"minimax-m2.5\",\n",[513,901,902],{"class":515,"line":689},[513,903,904],{},"        \"messages\": [{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n",[513,906,907],{"class":515,"line":695},[513,908,909],{},"        \"stream\": true\n",[513,911,912],{"class":515,"line":701},[513,913,914],{},"    }`)\n",[513,916,917],{"class":515,"line":707},[513,918,620],{"emptyLinePlaceholder":619},[513,920,921],{"class":515,"line":713},[513,922,923],{},"    req, err := http.NewRequest(\"POST\", \"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions\", bytes.NewReader(payload))\n",[513,925,927],{"class":515,"line":926},22,[513,928,929],{},"    if err != nil {\n",[513,931,933],{"class":515,"line":932},23,[513,934,935],{},"        panic(err)\n",[513,937,939],{"class":515,"line":938},24,[513,940,941],{},"    }\n",[513,943,945],{"class":515,"line":944},25,[513,946,947],{},"    req.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"SILVAMUX_API_KEY\"))\n",[513,949,951],{"class":515,"line":950},26,[513,952,953],{},"    req.Header.Set(\"Content-Type\", \"application\u002Fjson\")\n",[513,955,957],{"class":515,"line":956},27,[513,958,620],{"emptyLinePlaceholder":619},[513,960,962],{"class":515,"line":961},28,[513,963,964],{},"    resp, err := http.DefaultClient.Do(req)\n",[513,966,968],{"class":515,"line":967},29,[513,969,929],{},[513,971,973],{"class":515,"line":972},30,[513,974,935],{},[513,976,978],{"class":515,"line":977},31,[513,979,941],{},[513,981,983],{"class":515,"line":982},32,[513,984,985],{},"    defer resp.Body.Close()\n",[513,987,989],{"class":515,"line":988},33,[513,990,620],{"emptyLinePlaceholder":619},[513,992,994],{"class":515,"line":993},34,[513,995,996],{},"    scanner := bufio.NewScanner(resp.Body)\n",[513,998,1000],{"class":515,"line":999},35,[513,1001,1002],{},"    for scanner.Scan() {\n",[513,1004,1006],{"class":515,"line":1005},36,[513,1007,1008],{},"        line := scanner.Text()\n",[513,1010,1012],{"class":515,"line":1011},37,[513,1013,1014],{},"        if !strings.HasPrefix(line, \"data: \") {\n",[513,1016,1018],{"class":515,"line":1017},38,[513,1019,1020],{},"            continue\n",[513,1022,1024],{"class":515,"line":1023},39,[513,1025,1026],{},"        }\n",[513,1028,1030],{"class":515,"line":1029},40,[513,1031,1032],{},"        data := strings.TrimPrefix(line, \"data: \")\n",[513,1034,1036],{"class":515,"line":1035},41,[513,1037,1038],{},"        if data == \"[DONE]\" {\n",[513,1040,1042],{"class":515,"line":1041},42,[513,1043,1044],{},"            break\n",[513,1046,1048],{"class":515,"line":1047},43,[513,1049,1026],{},[513,1051,1053],{"class":515,"line":1052},44,[513,1054,1055],{},"        var chunk struct {\n",[513,1057,1059],{"class":515,"line":1058},45,[513,1060,1061],{},"            Choices []struct {\n",[513,1063,1065],{"class":515,"line":1064},46,[513,1066,1067],{},"                Delta struct {\n",[513,1069,1071],{"class":515,"line":1070},47,[513,1072,1073],{},"                    Content string `json:\"content\"`\n",[513,1075,1077],{"class":515,"line":1076},48,[513,1078,1079],{},"                } `json:\"delta\"`\n",[513,1081,1083],{"class":515,"line":1082},49,[513,1084,1085],{},"            } `json:\"choices\"`\n",[513,1087,1089],{"class":515,"line":1088},50,[513,1090,1026],{},[513,1092,1094],{"class":515,"line":1093},51,[513,1095,1096],{},"        if err := json.Unmarshal([]byte(data), &chunk); err != nil {\n",[513,1098,1100],{"class":515,"line":1099},52,[513,1101,1020],{},[513,1103,1105],{"class":515,"line":1104},53,[513,1106,1026],{},[513,1108,1110],{"class":515,"line":1109},54,[513,1111,1112],{},"        if len(chunk.Choices) > 0 {\n",[513,1114,1116],{"class":515,"line":1115},55,[513,1117,1118],{},"            fmt.Print(chunk.Choices[0].Delta.Content)\n",[513,1120,1122],{"class":515,"line":1121},56,[513,1123,1026],{},[513,1125,1127],{"class":515,"line":1126},57,[513,1128,941],{},[513,1130,1132],{"class":515,"line":1131},58,[513,1133,812],{},[167,1135,1136],{"id":1136},"多模态",[154,1138,1139,1140,454],{},"图片、音频等多模态输入格式见",[211,1141,104],{"href":1142},"\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fmultimodal",[1144,1145,1146],"style",{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":509,"searchDepth":531,"depth":531,"links":1148},[1149,1152,1153,1154,1155],{"id":169,"depth":531,"text":170,"children":1150},[1151],{"id":317,"depth":549,"text":318},{"id":329,"depth":531,"text":329},{"id":457,"depth":531,"text":457},{"id":468,"depth":531,"text":468},{"id":1136,"depth":531,"text":1136},"查看统一入口和 OpenAI、Anthropic、Volcengine、Responses、智谱等兼容入口。","md",{},"---\ntitle: 概述\ndescription: 查看统一入口和 OpenAI、Anthropic、Volcengine、Responses、智谱等兼容入口。\n---\n\n# 文本生成模型\n\nSilvaMux 支持多种**厂商协议兼容入口**，也提供一个可选的**统一入口**。新项目建议按照目标模型支持的厂商协议接入；使用 OpenAI SDK 的项目默认选择 OpenAI Chat Completions 兼容入口。\n\n## 厂商协议兼容入口（推荐）\n\n下列端点接收对应厂商的请求格式，并保持相应的响应和错误结构，适合官方 SDK、已有代码迁移或需要字段级透传的场景。\n\n| 兼容格式 | 端点 | 文档 |\n| --- | --- | --- |\n| OpenAI Chat Completions | `POST \u002Fapi\u002Fv1\u002Fchat\u002Fcompletions` | [OpenAI 兼容接口](\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fopenai) |\n| Anthropic | `POST \u002Fapi\u002Fv1\u002Fmessages` | [Anthropic 兼容](\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fanthropic) |\n| Volcengine v3 | `POST \u002Fapi\u002Fv3\u002Fchat\u002Fcompletions` | [Volcengine 兼容](\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fvolcengine) |\n| 智谱 | `POST \u002Fapi\u002Fpaas\u002Fv4\u002Fchat\u002Fcompletions` | [智谱兼容](\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fzhipu) |\n| SilvaMux 统一入口 | `POST \u002Fapi\u002Fv0\u002Fchat\u002Fcompletions` | [SilvaMux 统一入口](\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Funified) |\n| Responses | `POST \u002Fapi\u002Fv1\u002Fresponses` | 兼容 OpenAI Responses API，适用于支持的模型（如 codex 系列） |\n| Gemini | `POST \u002Fapi\u002Fv1beta\u002Fmodels\u002F{model}:generateContent` | 兼容 Gemini `generateContent` 格式；当前无公开可发现模型，不作为可执行示例 |\n\n这些路径属于 SilvaMux 的兼容入口，并非模型厂商的官方服务地址。调用时使用 SilvaMux 提供的 API Key。公开 OpenAPI 仅以上表中的标准路径作为新接入契约；历史地址 `\u002Fapi\u002Fanthropic\u002Fv1\u002Fmessages` 和 `\u002Fapi\u002Fv1\u002Fgemini\u002Fv1beta\u002Fmodels\u002F{model}:generateContent` 仅供已接入项目兼容，新项目不应使用。\n\n### OpenAI Responses\n\n兼容 OpenAI Responses API，适用于支持的模型（如 codex 系列）：\n\n::api-endpoint{path=\"\u002Fapi\u002Fv1\u002Fresponses\" method=\"POST\"}\n::\n\n## 常用参数\n\nOpenAI Chat 与统一入口的常用参数：\n\n| 参数 | 类型 | 说明 |\n| --- | --- | --- |\n| `model` | string | 必填。模型调用名（`id` 或 `alias`），如 `minimax-m2.5`、`doubao-seed-2.0-pro` |\n| `messages` | array | 必填。对话消息列表，格式同 OpenAI（`role` + `content`） |\n| `stream` | boolean | 是否流式返回，默认 `false` |\n| `temperature` | number | 采样温度，默认 1.0 |\n| `max_tokens` | integer | 最大生成 token 数 |\n\n> 不同厂商协议的字段结构不同。请先在[模型广场](\u002Fzh-cn\u002Fmodels)筛选支持目标接口格式的模型，再复制详情页中的调用名填入 `model`。\n\n## 认证\n\n`Authorization: Bearer \u003CAPI_KEY>` 或 `x-api-key: \u003CAPI_KEY>`。\n\n## 流式输出\n\n设置 `stream: true` 即可获得流式响应（SSE）。响应为 `text\u002Fevent-stream`，每个事件以 `data: ` 开头。最终可能收到 `choices` 为空、带有 `usage` 的用量 chunk，随后服务器关闭连接；客户端不应仅依赖 `data: [DONE]` 判断完成。Anthropic 格式流式遵循 Anthropic SSE 规范。\n\n::code-tabs\n:::code-tab{label=\"cURL\"}\n```bash\ncurl https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions \\\n  -H \"Authorization: Bearer $SILVAMUX_API_KEY\" \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\n    \"model\": \"minimax-m2.5\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n    \"stream\": true\n  }'\n```\n:::\n:::code-tab{label=\"Python\"}\n```python\n# pip install openai\nimport os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.environ[\"SILVAMUX_API_KEY\"],\n    base_url=\"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\",\n)\n\nstream = client.chat.completions.create(\n    model=\"minimax-m2.5\",\n    messages=[{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n    stream=True,\n)\nfor chunk in stream:\n    if chunk.choices:\n        delta = chunk.choices[0].delta.content\n        if delta:\n            print(delta, end=\"\", flush=True)\n    if chunk.usage:\n        print(f\"\\n用量：{chunk.usage}\")\n```\n:::\n:::code-tab{label=\"JavaScript\"}\n```javascript\n\u002F\u002F npm install openai\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  apiKey: process.env.SILVAMUX_API_KEY,\n  baseURL: \"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\",\n});\n\nconst stream = await client.chat.completions.create({\n  model: \"minimax-m2.5\",\n  messages: [{ role: \"user\", content: \"写一首五言绝句\" }],\n  stream: true,\n});\n\nfor await (const chunk of stream) {\n  const delta = chunk.choices[0]?.delta?.content;\n  if (delta) process.stdout.write(delta);\n}\n```\n:::\n:::code-tab{label=\"Go\"}\n```go\n\u002F\u002F 仅依赖标准库\npackage main\n\nimport (\n\t\"bufio\"\n\t\"bytes\"\n\t\"encoding\u002Fjson\"\n\t\"fmt\"\n\t\"net\u002Fhttp\"\n\t\"os\"\n\t\"strings\"\n)\n\nfunc main() {\n\tpayload := []byte(`{\n\t\t\"model\": \"minimax-m2.5\",\n\t\t\"messages\": [{\"role\": \"user\", \"content\": \"写一首五言绝句\"}],\n\t\t\"stream\": true\n\t}`)\n\n\treq, err := http.NewRequest(\"POST\", \"https:\u002F\u002Fsilvamux.io\u002Fapi\u002Fv1\u002Fchat\u002Fcompletions\", bytes.NewReader(payload))\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\treq.Header.Set(\"Authorization\", \"Bearer \"+os.Getenv(\"SILVAMUX_API_KEY\"))\n\treq.Header.Set(\"Content-Type\", \"application\u002Fjson\")\n\n\tresp, err := http.DefaultClient.Do(req)\n\tif err != nil {\n\t\tpanic(err)\n\t}\n\tdefer resp.Body.Close()\n\n\tscanner := bufio.NewScanner(resp.Body)\n\tfor scanner.Scan() {\n\t\tline := scanner.Text()\n\t\tif !strings.HasPrefix(line, \"data: \") {\n\t\t\tcontinue\n\t\t}\n\t\tdata := strings.TrimPrefix(line, \"data: \")\n\t\tif data == \"[DONE]\" {\n\t\t\tbreak\n\t\t}\n\t\tvar chunk struct {\n\t\t\tChoices []struct {\n\t\t\t\tDelta struct {\n\t\t\t\t\tContent string `json:\"content\"`\n\t\t\t\t} `json:\"delta\"`\n\t\t\t} `json:\"choices\"`\n\t\t}\n\t\tif err := json.Unmarshal([]byte(data), &chunk); err != nil {\n\t\t\tcontinue\n\t\t}\n\t\tif len(chunk.Choices) > 0 {\n\t\t\tfmt.Print(chunk.Choices[0].Delta.Content)\n\t\t}\n\t}\n}\n```\n:::\n::\n\n## 多模态\n\n图片、音频等多模态输入格式见[多模态输入](\u002Fzh-cn\u002Fdocs\u002Fmodels\u002Fchat\u002Fmultimodal)。\n",[],{"title":80,"description":1156},"rRH9mHOC50h6Jj7AbbUs8JZ0bPE1SGoVbypb31Ty9KE",{"found":619,"operationId":1164,"summary":318,"description":509,"method":325,"path":326,"publiclyDiscoverable":619,"security":1165,"parameters":1169,"requestBody":1170,"responses":1181},"createOpenAIResponse",{"schemes":1166,"optional":43},[1167,1168],"BearerAuth","ApiKeyAuth",[],{"present":619,"required":619,"description":509,"contentType":1171,"type":1172,"fields":1173,"variants":1180},"application\u002Fjson","ResponsesRequest",[1174,1177,1179],{"name":1175,"type":1176,"required":619,"description":509},"input","string | array\u003CFreeFormObject>",{"name":356,"type":359,"required":619,"description":1178},"从模型广场选择标注支持 OpenAI Responses 的模型并复制调用名。",{"name":405,"type":408,"required":43,"description":509,"defaultValue":414},[],[1182,1187],{"status":1183,"description":1184,"contentType":1171,"type":1185,"fields":1186},"200","Responses JSON 或 SSE 响应。","FreeFormObject",[],{"status":1188,"description":1189,"contentType":1171,"type":1190,"fields":1191},"default","OpenAI 兼容错误。","OpenAIError",[1192,1195,1198,1200],{"name":1193,"type":1194,"required":619,"description":509},"error","object",{"name":1196,"type":1197,"required":43,"description":509},"error.code","string | integer",{"name":1199,"type":359,"required":619,"description":509},"error.message",{"name":1201,"type":359,"required":43,"description":509},"error.type"]