curl --request POST \
--url https://api.apiyi.com/v1/chat/completions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "deepseek-v4-flash-vision-exp",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图里有什么?用一句话描述。"
},
{
"type": "image_url",
"image_url": {
"url": "https://docs.apiyi.com/images/checks-passed.png",
"detail": "original"
}
}
]
}
]
}
'import requests
url = "https://api.apiyi.com/v1/chat/completions"
payload = {
"model": "deepseek-v4-flash-vision-exp",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图里有什么?用一句话描述。"
},
{
"type": "image_url",
"image_url": {
"url": "https://docs.apiyi.com/images/checks-passed.png",
"detail": "original"
}
}
]
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'deepseek-v4-flash-vision-exp',
messages: [
{
role: 'user',
content: [
{type: 'text', text: '这张图里有什么?用一句话描述。'},
{
type: 'image_url',
image_url: {url: 'https://docs.apiyi.com/images/checks-passed.png', detail: 'original'}
}
]
}
]
})
};
fetch('https://api.apiyi.com/v1/chat/completions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/chat/completions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'deepseek-v4-flash-vision-exp',
'messages' => [
[
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => '这张图里有什么?用一句话描述。'
],
[
'type' => 'image_url',
'image_url' => [
'url' => 'https://docs.apiyi.com/images/checks-passed.png',
'detail' => 'original'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/chat/completions"
payload := strings.NewReader("{\n \"model\": \"deepseek-v4-flash-vision-exp\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"这张图里有什么?用一句话描述。\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://docs.apiyi.com/images/checks-passed.png\",\n \"detail\": \"original\"\n }\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/chat/completions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"deepseek-v4-flash-vision-exp\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"这张图里有什么?用一句话描述。\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://docs.apiyi.com/images/checks-passed.png\",\n \"detail\": \"original\"\n }\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/chat/completions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"deepseek-v4-flash-vision-exp\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"这张图里有什么?用一句话描述。\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://docs.apiyi.com/images/checks-passed.png\",\n \"detail\": \"original\"\n }\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "35a4e262-f2b8-4eb7-bdb2-012b02c7012d",
"object": "chat.completion",
"model": "deepseek-v4-flash-vision-exp",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "图中显示一条提示:所有检查均已通过,其中包含一次成功的 Mintlify 部署。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 295,
"completion_tokens": 49,
"total_tokens": 344,
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 295
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}DeepSeek V4 Flash Vision Chat API 參考
deepseek-v4-flash-vision-exp 的 OpenAI 相容 Chat Completions API 參考與線上除錯:三種傳圖方式、detail 省 token、思考開關,令牌需用 default 分組。
curl --request POST \
--url https://api.apiyi.com/v1/chat/completions \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"model": "deepseek-v4-flash-vision-exp",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图里有什么?用一句话描述。"
},
{
"type": "image_url",
"image_url": {
"url": "https://docs.apiyi.com/images/checks-passed.png",
"detail": "original"
}
}
]
}
]
}
'import requests
url = "https://api.apiyi.com/v1/chat/completions"
payload = {
"model": "deepseek-v4-flash-vision-exp",
"messages": [
{
"role": "user",
"content": [
{
"type": "text",
"text": "这张图里有什么?用一句话描述。"
},
{
"type": "image_url",
"image_url": {
"url": "https://docs.apiyi.com/images/checks-passed.png",
"detail": "original"
}
}
]
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
model: 'deepseek-v4-flash-vision-exp',
messages: [
{
role: 'user',
content: [
{type: 'text', text: '这张图里有什么?用一句话描述。'},
{
type: 'image_url',
image_url: {url: 'https://docs.apiyi.com/images/checks-passed.png', detail: 'original'}
}
]
}
]
})
};
fetch('https://api.apiyi.com/v1/chat/completions', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.apiyi.com/v1/chat/completions",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'model' => 'deepseek-v4-flash-vision-exp',
'messages' => [
[
'role' => 'user',
'content' => [
[
'type' => 'text',
'text' => '这张图里有什么?用一句话描述。'
],
[
'type' => 'image_url',
'image_url' => [
'url' => 'https://docs.apiyi.com/images/checks-passed.png',
'detail' => 'original'
]
]
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.apiyi.com/v1/chat/completions"
payload := strings.NewReader("{\n \"model\": \"deepseek-v4-flash-vision-exp\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"这张图里有什么?用一句话描述。\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://docs.apiyi.com/images/checks-passed.png\",\n \"detail\": \"original\"\n }\n }\n ]\n }\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.apiyi.com/v1/chat/completions")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"model\": \"deepseek-v4-flash-vision-exp\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"这张图里有什么?用一句话描述。\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://docs.apiyi.com/images/checks-passed.png\",\n \"detail\": \"original\"\n }\n }\n ]\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.apiyi.com/v1/chat/completions")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"model\": \"deepseek-v4-flash-vision-exp\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": [\n {\n \"type\": \"text\",\n \"text\": \"这张图里有什么?用一句话描述。\"\n },\n {\n \"type\": \"image_url\",\n \"image_url\": {\n \"url\": \"https://docs.apiyi.com/images/checks-passed.png\",\n \"detail\": \"original\"\n }\n }\n ]\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"id": "35a4e262-f2b8-4eb7-bdb2-012b02c7012d",
"object": "chat.completion",
"model": "deepseek-v4-flash-vision-exp",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "图中显示一条提示:所有检查均已通过,其中包含一次成功的 Mintlify 部署。"
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 295,
"completion_tokens": 49,
"total_tokens": 344,
"prompt_cache_hit_tokens": 0,
"prompt_cache_miss_tokens": 295
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}{
"error": {
"message": "<string>",
"type": "<string>",
"code": "<string>"
}
}default。ClaudeCode 分組的令牌調這個端點雖然也返回 200,但 detail、思考開關、logprobs
三個引數全部失效,響應裡還會缺 completion_tokens_details 欄位 —— 看起來像引數寫錯了,
實際是分組不對。Anthropic 格式請改用
Messages 線上除錯。Bearer sk-your-api-key,
預設示例用的是一張公網圖片、並已關閉深度思考,點擊發送即可看到響應。
換成本地圖片時把 image_url.url 改成 data:image/jpeg;base64,<BASE64>。引數說明速查
| 引數 | 型別 | 必填 | 預設 | 說明 |
|---|---|---|---|---|
model | string | ✓ | — | 固定 deepseek-v4-flash-vision-exp |
messages | array | ✓ | — | content 可以是字串,也可以是內容塊陣列(圖文混合) |
max_tokens | int | — | 輸出配額,硬上限 393,216;開思考時建議 2000+ | |
thinking.type | string | enabled | disabled 可靠關閉思考,省 80 輸入 tokens | |
reasoning_effort | string | — | none 等效於關閉思考;low/high/max 之間無穩定差異 | |
response_format | object | — | 只支援 json_object;json_schema 會報錯 | |
stream | bool | false | SSE 流式,配合 stream_options.include_usage 回傳用量 | |
temperature / top_p / stop / seed | — | — | 均生效 | |
logprobs / top_logprobs | — | — | 生效,top_logprobs 範圍 0–20 | |
tools | array | — | Function Call,需要結構化輸出時用它替代 json_schema |
三種傳圖方式
image_url + base64 data URL
{
"type": "image_url",
"image_url": {"url": "data:image/jpeg;base64,<BASE64>", "detail": "original"}
}
image_url + 公網外鏈
{
"type": "image_url",
"image_url": {"url": "https://example.com/image.jpg", "detail": "low"}
}
file 塊 + file_data
{
"type": "file",
"file_data": "data:image/jpeg;base64,<BASE64>",
"filename": "image.jpg"
}
image_url 通道折出的 tokens 完全一致(同一張圖都是 303)。
file 塊上的 detail 會被靜默忽略 —— 不報錯,但也不省 token。
要用 detail: "low" 省錢,必須走 image_url 通道。另外 file_id(Files API)在本平臺不可用,傳了會報 invalid file_id。detail 能省多少
同一張 1600×1200 的圖,四個檔位實測:
detail | 影像 token | 相對 original |
|---|---|---|
low | 142 | 省 60% |
high | 354 | 持平 |
original | 354 | 基準 |
auto | 354 | 持平 |
low 就夠;要讀小字、認圖表數值才需要 original。
填了列舉外的值會明確報錯:
unknown variant 'ultra', expected one of 'low', 'high', 'original', 'auto'。
圖片怎麼折成 token
| 圖片尺寸 | 折算 tokens |
|---|---|
| 64×64 | 114 |
| 384×384 | 114 |
| 800×800 | 346 |
| 2000×2000 | 346 |
| 4000×4000 | 346 |
| 1600×400 | 266 |
| 1600×1200 | 354 |
關思考的兩種寫法
{ "thinking": { "type": "disabled" } }
{ "reasoning_effort": "none" }
prompt_tokens 從 303 降到 223,reasoning_content 消失)。
reasoning: {"effort": "none"} 與 enable_thinking: false 都無效。
max_tokens 給小了會返回空 content。開著思考時,一句話問題也可能先輸出幾百 tokens
的思考內容,配額用盡就是 finish_reason: "length" 加空字串 —— 很容易誤判成模型沒回答。
開思考建議 2000 以上,或者乾脆關掉。需要結構化輸出?用 tools
response_format: {"type": "json_schema"} 會返回
This response_format type is unavailable now(上游模型側限制)。
json_object 可用,但不約束欄位;要強約束請用 Function Call:
{
"model": "deepseek-v4-flash-vision-exp",
"messages": [{
"role": "user",
"content": [
{"type": "text", "text": "看圖,呼叫 record_shape。"},
{"type": "image_url", "image_url": {"url": "https://example.com/shape.jpg"}}
]
}],
"tools": [{
"type": "function",
"function": {
"name": "record_shape",
"parameters": {
"type": "object",
"properties": {
"shape": {"type": "string"},
"color": {"type": "string"}
},
"required": ["shape", "color"]
}
}
}]
}
常見報錯
| 報錯 | 原因 |
|---|---|
You have uploaded an unsupported image | 格式不在 JPEG/PNG/GIF/WebP 之列,或 base64 資料損壞 |
Failed to download image | 外鏈不通或超過 60 秒 |
image file size exceeds limit 32 MB | 單圖超過 32 MiB |
external link length … too long, max link length 8192 | 外鏈超長 |
Image in assistant message is unsupported | 圖片只能放在 user 訊息裡 |
valid range of max_tokens is [1, 393216] | max_tokens 超上限 |
invalid file_id | 用了 file_id,本平臺不提供 Files API |
授權
在 API易控制台获取的 API Key,分组需为 default
主體
模型 ID,固定 deepseek-v4-flash-vision-exp
deepseek-v4-flash-vision-exp 对话消息数组。content 可以是字符串(纯文本),也可以是内容块数组(图文混合)
Show child attributes
Show child attributes
最大输出 tokens,硬上限 393,216。开启思考时思考内容也计入,开思考建议 2000 以上,否则可能返回空 content
x <= 393216深度思考开关。传 {"type": "disabled"} 可关闭,省 80 输入 tokens 与全部思考输出。仅 default 分组生效
Show child attributes
Show child attributes
思考深度分档。实测 none 可确定性关闭思考;low/high/max 之间未观察到稳定差异。仅 default 分组生效
none, low, medium, high, max 是否流式输出(SSE)。配合 stream_options.include_usage 可在末尾获取用量
输出格式。只支持 {"type": "json_object"};json_schema 会报 This response_format type is unavailable now
Show child attributes
Show child attributes
采样温度
核采样阈值
停止词
随机种子
是否返回 token 对数概率,实测有内容返回(仅 default 分组)
每个位置返回的候选数,取值范围 0-20
0 <= x <= 20Function Call 工具列表,OpenAI 标准格式。需要结构化输出时用它替代 json_schema
這個頁面有幫助嗎?