对话补全

POST /v1/chat/completions — 根据对话历史创建模型响应,支持流式输出、工具调用与多模态输入

根据对话历史创建模型响应。兼容 OpenAI Chat Completions API,支持流式(SSE)与非流式响应、工具调用、多模态输入。

POST/v1/chat/completions

鉴权:在请求头携带 Authorization: Bearer <令牌>,详见鉴权与令牌

请求参数

modelstring必填

要调用的模型 ID,如 deepseek-v4-flashgpt-5.5。可用模型集合以 GET /v2/models 返回为准,具体模型在本端点是否可用以实际请求结果为准

messagesarray

对话历史消息数组,按时间顺序排列,结构见下文「消息结构」。普通对话必填;FIM(中间填充)请求传 prefix/suffix 时可省略(条件必填)

prefixstring

FIM 请求的前缀文本(需模型支持 FIM),传入后 messages 可省略

suffixstring

FIM 请求的后缀文本,配合 prefix 使用(需模型支持)

streamboolean

true 时以 SSE 流式返回增量 chunk,见下文「流式输出」

默认值: false
stream_optionsobject

流式选项,仅 stream=true 时有效

max_tokensinteger

最大生成 token 数。超出模型上下文上限时返回参数错误

max_completion_tokensinteger

最大补全 token 数(含推理 token)。与 max_tokens 同时传入时优先生效

temperaturenumber

采样温度,越高越随机

top_pnumber

核采样概率阈值

top_kinteger

Top-K 采样(仅部分模型支持,透传上游)

stopstring | array

停止序列,字符串或字符串数组,命中即停止生成

ninteger

生成的候选回复条数

默认值: 1
seednumber

随机种子,用于尽量复现输出(透传上游,效果以模型为准)

response_formatobject

输出格式约束。type 缺省为 "text"(普通文本);{"type":"json_object"} 强制 JSON 输出;{"type":"json_schema","json_schema":{...}} 按 JSON Schema 约束结构化输出(需模型支持)

toolsarray

工具定义数组,见下文「工具调用」。向不支持工具调用的模型传此参数会返回错误

tool_choicestring | object

工具选择策略:"none""auto""required",或 {"type":"function","function":{"name":"..."}} 指定工具

默认值: "auto"
parallel_tool_callsboolean

是否允许模型在一次回复中发起多个工具调用

reasoning_effortstring

推理强度档位(推理模型适用),如 "low""medium""high"

frequency_penaltynumber

频率惩罚,降低逐字重复

presence_penaltynumber

存在惩罚,鼓励引入新话题

logprobsboolean

是否返回输出 token 的对数概率(需模型支持)

top_logprobsinteger

每个位置返回概率最高的 N 个候选 token,配合 logprobs 使用

userstring

终端用户标识,用于滥用追踪(透传上游)

prompt_cache_keystring

提示词缓存键,用于提升相似请求的缓存命中率(替代 user 字段,需上游支持)

prompt_cache_retentionstring

提示词缓存保留时长,上游支持时透传

verbositystring

输出详略档位(gpt-5 系列),上游支持时透传

modalitiesarray

输出模态(如 ["text","audio"]),上游支持时透传

audioobject

音频输出配置(voice、format 等),配合 modalities 使用,上游支持时透传

logit_biasobject

token 偏置映射,调整指定 token 的出现概率,上游支持时透传

metadataobject

附加元数据键值对,上游支持时透传

predictionobject

预测输出内容(Predicted Outputs,加速重复性内容生成),上游支持时透传

web_search_optionsobject

联网搜索配置(search_context_size 等),上游支持时透传

safety_identifierstore 两个字段默认被平台过滤,不会透传上游,以保护终端用户隐私。

消息结构

messages 数组中每个消息对象包含以下字段:

rolestring必填

消息角色,常用 systemuserassistanttool。注意:对 o 系列与 gpt-5 系列模型,平台会将 system 自动改写为上游要求的 developer 角色

contentstring | array必填

消息内容。纯文本直接传字符串;多模态内容传 typed content 数组(见下文)。assistant 消息发起工具调用时可为空字符串

namestring

消息发送者名称,用于区分同角色的多个实体

tool_callsarray

assistant 消息使用。回填模型上一轮返回的工具调用(原样回传)

tool_call_idstring

tool 角色消息必填。对应 tool_calls 中该次调用的 id

多模态输入

content 传数组时,每个元素是带 type 字段的对象:

type字段说明
texttext文本内容
image_urlimage_url.urlimage_url.detail图片。url 支持 http(s) URL 与 base64 data URL(data:image/png;base64,...)两种;detaillow/high/auto,缺省按 high 处理
input_audioinput_audio.datainput_audio.format音频。data 为 base64 编码,formatmp3wav
filefile.filename + file.file_data,或 file.file_id文件。file_data 为 base64 data URL;file_id 引用已上传文件
video_urlvideo_url.url视频 URL(视频理解类模型,如阿里百炼系列)
{
  "role": "user",
  "content": [
    { "type": "text", "text": "这张图里有什么?" },
    { "type": "image_url", "image_url": { "url": "https://example.com/pic.png", "detail": "high" } }
  ]
}
多模态输入要求模型具备对应能力(如视觉模型才能处理 image_url)。向不支持多模态的模型发送媒体内容会返回错误。模型能力以 GET /v2/models 的能力标记为准。

请求示例

curl https://api.jimu.chat/v1/chat/completions \
  -H "Authorization: Bearer $JIMU_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "deepseek-v4-flash",
    "messages": [{"role": "user", "content": "你好"}],
    "max_tokens": 1024
  }'

响应结构

非流式响应示例(实测,推理模型):

响应200
{
  "id": "58881cdb-747f-4222-b9ea-3e066cc34aab",
  "object": "chat.completion",
  "created": 1785252811,
  "model": "deepseek-v4-flash",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "你好!有什么可以帮你?",
        "reasoning_content": "用户打招呼……"
      },
      "logprobs": null,
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 5,
    "completion_tokens": 16,
    "total_tokens": 21,
    "prompt_tokens_details": { "cached_tokens": 0 },
    "completion_tokens_details": { "reasoning_tokens": 16 },
    "prompt_cache_hit_tokens": 0,
    "prompt_cache_miss_tokens": 5
  },
  "system_fingerprint": "fp_8b330d02d0_prod0820_fp8_kvcache_20260402"
}

关键字段说明:

  • id:响应 ID,格式不固定(UUID、msg_ 前缀等),不要对格式做假设。
  • choices[].message:模型生成的消息,role 恒为 assistant。推理模型会额外返回 reasoning_content(思维链);发起工具调用时携带 tool_calls,此时 content 可能为空字符串,也可能是引导性文字,不要假设它一定为空。
  • choices[].finish_reason:结束原因,取值 stop(正常结束)、length(达到 token 上限)、tool_calls(发起工具调用)、function_call(旧版函数调用)、content_filter(内容被过滤)。
  • system_fingerprint:上游系统指纹,可能为 null
  • usage:token 计量。权威字段为 prompt_tokens / completion_tokens / total_tokens,是唯一可以写进业务逻辑的计量字段。*_tokens_details 与附加字段(如上例的 prompt_cache_hit_tokens / prompt_cache_miss_tokens)属于上游附加信息,结构不固定,不要依赖其存在或结构。
usage 中还可能出现 input_tokensoutput_tokensinput_tokens_detailsclaude_cache_creation_5_m_tokensclaude_cache_creation_1_h_tokens 等字段,均为保留字段(出现时恒为 0 / null),不要读取或依赖,未来可能移除。计量只认 prompt_tokens / completion_tokens / total_tokens。特别注意:claude_cache_creation_* 不是有效的缓存命中计数,不要拿它计算缓存命中率。

流式输出

设置 "stream": true 后,响应以 Server-Sent Events 返回(Content-Type: text/event-stream)。每个事件为一行 data: {JSON},事件间以空行分隔;流末尾发送 data: [DONE] 表示结束。

典型 chunk 序列(实测):

data: {"id":"ab175b3b-...","object":"chat.completion.chunk","created":1785252811,"model":"deepseek-v4-flash","choices":[{"index":0,"delta":{"role":"assistant","content":""},"finish_reason":null}],"usage":null}

data: {"id":"ab175b3b-...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":"1、2、3"},"finish_reason":null}],"usage":null}

data: {"id":"ab175b3b-...","object":"chat.completion.chunk",...,"choices":[{"index":0,"delta":{"content":""},"finish_reason":"stop"}],"usage":{"prompt_tokens":7,"completion_tokens":32,"total_tokens":39,...}}

data: [DONE]

要点:

  • 首个 chunk 的 delta 携带 role: "assistant",之后每个 chunk 的 delta.content 是增量文本,拼接即为完整回复。推理模型的思维链增量通过 delta.reasoning_content 下发。
  • 结束 chunk 的 delta 内容为空,finish_reason 给出结束原因。
  • usage 默认不出现在流式 chunk 中(恒为 null)。传 "stream_options": {"include_usage": true} 后,usage 的携带位置有两种实际形态:追加一个 choices 为空数组的专用 chunk,或直接附在携带 finish_reason 的最后一个内容 chunk 上(如上例)。解析器应读取任何携带非空 usage 的 chunk,不要用 choices 是否为空作为判断条件。
  • 工具调用的流式返回中,delta.tool_calls 按增量分片下发,function.arguments 为逐步累积的 JSON 字符串片段,需自行拼接后解析。
  • 参数类错误(如模型不存在、额度不足)在流建立之前返回,是普通的 JSON 错误响应(HTTP 非 200)。流建立之后若上游中途失败,平台会下发错误事件或直接终止连接(形态取决于上游渠道)。客户端应把「未收到 [DONE] 就结束的流」视为失败,并处理两种出错时机。

工具调用

工具调用是一次「请求 → 执行 → 回填 → 再请求」的往返流程。

1. 在请求中声明工具。 tools 数组每项的结构:

{
  "type": "function",
  "function": {
    "name": "get_weather",
    "description": "查询指定城市天气",
    "parameters": {
      "type": "object",
      "properties": { "city": { "type": "string", "description": "城市名" } },
      "required": ["city"]
    }
  }
}

2. 模型决定调用工具。 响应中 finish_reasontool_callsmessage.tool_calls 给出调用参数(实测):

{
  "choices": [{
    "index": 0,
    "message": {
      "role": "assistant",
      "content": "好的!我来查询一下北京的天气情况。",
      "tool_calls": [{
        "index": 0,
        "id": "call_00_9HGXAbXfVL4Bq2XZJFEN8802",
        "type": "function",
        "function": { "name": "get_weather", "arguments": "{\"city\": \"北京\"}" }
      }]
    },
    "finish_reason": "tool_calls"
  }]
}

注意:function.argumentsJSON 字符串(不是对象),需 JSON.parse 后使用,流式模式下分片下发、拼完整再解析;content 此时可能为空字符串,也可能像上例一样带引导文字;tool_calls[].id 的格式不固定(call_...toolu_... 等)。

3. 执行工具并回填结果。 在你的系统里执行函数,然后把两条消息追加到 messages

  • 上一条 assistant 消息原样回填(含 contenttool_calls,不要改写);
  • 一条 role: "tool" 的消息,tool_call_id 对应该次调用的 idcontent 为执行结果。
[
  { "role": "user", "content": "北京今天天气如何?" },
  { "role": "assistant", "content": "好的!我来查询一下北京的天气情况。", "tool_calls": [{ "index": 0, "id": "call_00_9HGXAbXfVL4Bq2XZJFEN8802", "type": "function", "function": { "name": "get_weather", "arguments": "{\"city\": \"北京\"}" } }] },
  { "role": "tool", "tool_call_id": "call_00_9HGXAbXfVL4Bq2XZJFEN8802", "content": "{\"temp\": 26, \"cond\": \"\"}" }
]

4. 再次发起请求。 模型基于工具结果生成最终自然语言回复,finish_reasonstop

parallel_tool_calls: true 时模型可能在一次回复中返回多个 tool_calls,需逐个执行并各回一条 tool 消息。tool_choice 可强制使用或禁用工具。

错误情形

错误响应为嵌套 error 对象,HTTP 状态码非 200(实测):

{
  "error": {
    "code": "model_not_found",
    "message": "模型 xxx 暂无可用渠道,请稍后再试 (request id: 20260728143942943269800tFRTapux)",
    "type": "jimu_api_error"
  }
}

排查时优先读取响应头 X-Jimu-Request-Id 获取请求 ID(成功响应也携带),error.message 末尾的 (request id: ...) 后缀是同一 ID。完整的 type 取值、状态码含义与三种错误形态对照见错误处理与请求追踪

本端点特有的典型错误:

情形说明
模型无可用渠道codemodel_not_found,确认模型 ID 拼写与账号可用性
模型不接受 OpenAI 格式codeformat_not_accepted:模型存在,但当前没有接受本端点协议格式的渠道。换用其他模型,或联系平台调整渠道配置
向不支持工具调用的模型传 tools返回参数类错误,模型能力以模型查询接口的能力标记为准
max_tokens 超出模型上下文上限返回参数类错误,按模型实际上限调整
向不支持多模态的模型发送媒体内容返回参数类错误,换用视觉/多模态模型
流式中途断开未收到 [DONE] 即结束,按失败重试(见「流式输出」)