全部產品
Search
文件中心

Alibaba Cloud Model Studio:Qwen-OCR API參考

更新時間:Nov 29, 2025

本文介紹通過 OpenAI 相容介面 或 DashScope API 調用通義千問OCR 模型的輸入與輸出參數。

相關文檔:文字提取(Qwen-OCR)

OpenAI 相容

新加坡地區

SDK 調用配置的base_url為:https://dashscope-intl.aliyuncs.com/compatible-mode/v1

HTTP 調用配置的endpointPOST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions

北京地區

SDK 調用配置的base_url為:https://dashscope.aliyuncs.com/compatible-mode/v1

HTTP 調用配置的endpointPOST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions

您需要已擷取與配置 API Key配置API Key到環境變數(準備下線,併入配置 API Key)。若通過OpenAI SDK進行調用,需要安裝SDK

請求體

非流式輸出

Python

from openai import OpenAI
import os

PROMPT_TICKET_EXTRACTION = """
請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。
要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。
返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"},
"""

try:
    client = OpenAI(
        # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
        # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
        api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
        base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
    )
    completion = client.chat.completions.create(
        model="qwen-vl-ocr-2025-11-20",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                        # 輸入映像的最小像素閾值,小於該值映像會放大,直到總像素大於min_pixels
                        "min_pixels": 32 * 32 * 3,
                        # 輸入映像的最大像素閾值,超過該值映像會縮小,直到總像素低於max_pixels
                        "max_pixels": 32 * 32 * 8192
                    },
                    # 模型支援在以下text欄位中傳入Prompt;若未傳入,則會使用預設的Prompt:Please output only the text content from the image without any additional descriptions or formatting.
                    {"type": "text",
                     "text": PROMPT_TICKET_EXTRACTION}
                ]
            }
        ])
    print(completion.choices[0].message.content)
except Exception as e:
    print(f"錯誤資訊: {e}")

Node.js

import OpenAI from 'openai';

// 定義提取車票資訊的Prompt
const PROMPT_TICKET_EXTRACTION = `
請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。
要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。
返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"}
`;

const client = new OpenAI({
  // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
  // 若沒有配置環境變數,請用百鍊API Key將下行替換為:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
  baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
});

async function main() {
  const response = await client.chat.completions.create({
    model: 'qwen-vl-ocr-2025-11-20',
    messages: [
      {
        role: 'user',
        content: [
          // 模型支援在text欄位中傳入Prompt,若未傳入,則會使用預設的Prompt:Please output only the text content from the image without any additional descriptions or formatting.
          { type: 'text', text: PROMPT_TICKET_EXTRACTION},
          {
            type: 'image_url',
            image_url: {
              url: 'https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg',
            },
              //  輸入映像的最小像素閾值,小於該值映像會放大,直到總像素大於min_pixels
              "min_pixels": 32 * 32 * 3,
              // 輸入映像的最大像素閾值,超過該值映像會縮小,直到總像素低於max_pixels
              "max_pixels": 32 * 32 * 8192
          }
        ]
      }
    ],
  });
  console.log(response.choices[0].message.content)
}

main();

curl

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === 執行時請刪除該注釋 ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen-vl-ocr-2025-11-20",
  "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                    "min_pixels": 3072,
                    "max_pixels": 8388608
                },
                {"type": "text", "text": "請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"}
            ]
        }
    ]
}'

流式輸出

Python

import os
from openai import OpenAI

PROMPT_TICKET_EXTRACTION = """
請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。
要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。
返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"},
"""

client = OpenAI(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    # 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
    base_url="https://dashscope-intl.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-vl-ocr-2025-11-20",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                    # 輸入映像的最小像素閾值,小於該值映像會放大,直到總像素大於min_pixels
                    "min_pixels": 32 * 32 * 3,
                    # 輸入映像的最大像素閾值,超過該值映像會縮小,直到總像素低於max_pixels
                    "max_pixels": 32 * 32 * 8192
                },
                  # 模型支援在以下text欄位中傳入Prompt,若未傳入,則會使用預設的Prompt:Please output only the text content from the image without any additional descriptions or formatting.
                {"type": "text","text": PROMPT_TICKET_EXTRACTION}
            ]
        }
    ],
    stream=True,
    stream_options={"include_usage": True}
)

for chunk in completion:
    print(chunk.model_dump_json())

Node.js

import OpenAI from 'openai';


// 定義提取車票資訊的Prompt
const PROMPT_TICKET_EXTRACTION = `
請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。
要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。
返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"}
`;

const openai = new OpenAI({
  // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
  // 若沒有配置環境變數,請用百鍊API Key將下行替換為:apiKey: "sk-xxx",
  apiKey: process.env.DASHSCOPE_API_KEY,
  // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1
  baseURL: 'https://dashscope-intl.aliyuncs.com/compatible-mode/v1',
});

async function main() {
  const response = await openai.chat.completions.create({
    model: 'qwen-vl-ocr-2025-11-20',
    messages: [
      {
        role: 'user',
        content: [
          // 模型支援在以下text欄位中傳入Prompt,若未傳入,則會使用預設的Prompt:Please output only the text content from the image without any additional descriptions or formatting.
          { type: 'text', text: PROMPT_TICKET_EXTRACTION},
          {
            type: 'image_url',
            image_url: {
              url: 'https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg',
            },
              //  輸入映像的最小像素閾值,小於該值映像會放大,直到總像素大於min_pixels
              "min_pixels": 32 * 32 * 3,
              // 輸入映像的最大像素閾值,超過該值映像會縮小,直到總像素低於max_pixels
              "max_pixels": 32 * 32 * 8192
          }
        ]
      }
    ],
    stream: true,
    stream_options:{"include_usage": true}
  });
let fullContent = ""
  console.log("流式輸出內容為:")
  for await (const chunk of response) {
    if (chunk.choices[0] && chunk.choices[0].delta.content != null) {
      fullContent += chunk.choices[0].delta.content;
      console.log(chunk.choices[0].delta.content);
    }
}
  console.log(`完整輸出內容為:${fullContent}`)
}

main();

curl

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions
# === 執行時請刪除該注釋 ===

curl -X POST https://dashscope-intl.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
  "model": "qwen-vl-ocr-2025-11-20",
  "messages": [
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url":"https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg"},
                    "min_pixels": 3072,
                    "max_pixels": 8388608
                },
                {"type": "text", "text": "請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"}
            ]
        }
    ],
    "stream": true,
    "stream_options": {"include_usage": true}
}'

model string (必選)

模型名稱。支援的模型可參見通義千問OCR

messages array (必選)

傳遞給大模型的上下文,按對話順序排列。

訊息類型

User Message object (必選)

使用者訊息,用於向模型傳遞指令和待識別的映像。

屬性

content array(必選)

訊息內容。

屬性

type string (必選)

可選值:

  • text

    輸入文本時需設為text

  • image_url

    輸入圖片時需設為image_url

text string (可選)

輸入的文本。

預設值為:Please output only the text content from the image without any additional descriptions or formatting. ,即模型預設提取映像中的全部文本。

image_url object

輸入的圖片資訊。當typeimage_url時是必選參數。

屬性

url string(必選)

圖片的 URL或 Base64 Data URL。傳入本地檔案請參考文字提取

min_pixels integer (可選)

用於設定輸入映像的最小像素閾值,單位為像素。

當輸入映像像素小於min_pixels時,會將映像進行放大,直到總像素高於min_pixels

映像Token與像素的轉換關係

不同模型,每個映像 Token 對應的像素不同:

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20:每 Token 對應像素為32*32

  • qwen-vl-ocrqwen-vl-ocr-2025-08-28及之前更新的模型:每 Token 對應像素為28*28

min_pixels 取值範圍

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20:預設值和最小值均為3072(即3×32×32

  • qwen-vl-ocrqwen-vl-ocr-2025-08-28及之前更新的模型:預設值和最小值均為 3136 (即4×28×28)。

樣本值:{"type": "image_url","image_url": {"url":"https://xxxx.jpg"},"min_pixels": 3072}

max_pixels integer (可選)

用於設定輸入映像的最大像素閾值,單位為像素。

當輸入映像像素在[min_pixels, max_pixels]區間內時,模型會按原圖進行識別。當輸入映像像素大於max_pixels時,會將映像進行縮小,直到總像素低於max_pixels

映像Token與像素的轉換關係

不同模型,每個映像 Token 對應的像素不同:

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20:每 Token 對應像素為32*32

  • qwen-vl-ocrqwen-vl-ocr-2025-08-28及之前更新的模型:每 Token 對應像素為28*28

max_pixels 取值範圍

  • qwen-vl-ocr-latest、qwen-vl-ocr-2025-11-20

    • 預設值:8388608 (即8192x32x32

    • 最大值:30720000(即30000x32x32

  • qwen-vl-ocr、qwen-vl-ocr-2025-08-28及之前更新的模型

    • 預設值:6422528(即8192x28x28

    • 最大值:23520000(即30000x28x28

樣本值:{"type": "image_url","image_url": {"url":"https://xxxx.jpg"},"max_pixels": 8388608}

role string (必選)

使用者訊息的角色,固定為user

stream boolean (可選) 預設值為 false

是否以流式方式輸出回複。

可選值:

  • false:等待模型產生完整回複後一次性返回。

  • true:模型邊產生邊返回資料區塊。用戶端需逐塊讀取,以還原完整回複。

stream_options object (可選)

流式輸出的配置項,僅在 streamtrue 時生效。

屬性

include_usage boolean (可選)預設值為 false

是否在最後一個資料區塊包含Token消耗資訊。

可選值:

  • true:包含;

  • false:不包含。

max_tokens integer (可選)

用於限制模型輸出的最大 Token 數。若產生內容超過此值,響應將被截斷。

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20qwen-vl-ocr-2024-10-28預設值與最大值均為模型的最大輸出長度,請參見模型與價格

  • qwen-vl-ocr、qwen-vl-ocr-2025-04-13、qwen-vl-ocr-2025-08-28,預設值和最大值為4096。

    如需提高該參數值(4097~8192範圍),請發送郵件至 modelstudio@service.aliyun.com進行申請,並提供以下資訊:主帳號ID、映像類型(如文檔圖、電商圖、合約等)、模型名稱、預計 QPS 和每日請求總數,以及模型輸出長度超過4096的請求佔比。

logprobs boolean (可選)預設值為 false

是否返回輸出 Token 的對數機率,可選值:

  • true

    返回

  • false

    不返回

top_logprobs integer (可選)預設值為0

指定在每一步產生時,返回模型最大機率的候選 Token 個數。

取值範圍:[0,5]

僅當 logprobstrue 時生效。

temperature float (可選) 預設值為0.01

採樣溫度,控制模型產生文本的多樣性。

temperature越高,產生的文本更多樣,反之,產生的文本更確定。

取值範圍: [0, 2)

temperature與top_p均可以控制產生文本的多樣性,建議只設定其中一個值。

建議設定為預設值即可。

top_p float (可選)預設值為0.001

核採樣的機率閾值,控制模型產生文本的多樣性。

top_p越高,產生的文本更多樣。反之,產生的文本更確定。

取值範圍:(0,1.0]

temperature與top_p均可以控制產生文本的多樣性,建議只設定其中一個值。

建議設定為預設值即可。

top_k integer (可選)預設值為1

產生過程中採樣候選集的大小。例如,取值為50時,僅將單次產生中得分最高的50個Token組成隨機採樣的候選集。取值越大,產生的隨機性越高;取值越小,產生的確定性越高。取值為None或當top_k大於100時,表示不啟用top_k策略,此時僅有top_p策略生效。

取值需要大於或等於0。

該參數非OpenAI標準參數。通過 Python SDK調用時,請放入 extra_body 對象中,配置方式為:extra_body={"top_k": xxx};通過 Node.js SDK 或 HTTP 方式調用時,請作為頂層參數傳遞。

建議設定為預設值即可。

repetition_penalty float (可選)預設值為1.0

模型產生時連續序列中的重複度。提高repetition_penalty時可以降低模型產生的重複度,1.0表示不做懲罰。該參數對模型效果影響較大,建議保持預設值。

建議設定為預設值即可。

presence_penalty float (可選)預設值為0.0

控制模型產生文本時的內容重複度。

取值範圍:[-2.0, 2.0]。正值降低重複度,負值增加重複度。

在創意寫作或頭腦風暴等需要多樣性、趣味性或創造力的情境中,建議調高該值;在技術文檔或正式文本等強調一致性與術語準確性的情境中,建議調低該值。

原理介紹

如果參數值是正數,模型將對目前文本中已存在的Token施加一個懲罰值(懲罰值與文本出現的次數無關),減少這些Token重複出現的幾率,從而減少內容重複度,增加用詞多樣性。

建議設定為預設值即可。

seed integer (可選)

隨機數種子。用於確保在相同輸入和參數下產生結果可複現。若調用時傳入相同的 seed 且其他參數不變,模型將儘可能返回相同結果。

取值範圍:[0,231−1]

建議設定為預設值即可。

stop string 或 array (可選)

用於指定停止詞。當模型產生的文本中出現stop 指定的字串或token_id時,產生將立即終止。

可傳入敏感詞以控制模型的輸出。

stop為數組時,不可將token_id和字串同時作為元素輸入,比如不可以指定為["你好",104307]

chat響應對象(非流式輸出)

{
  "id": "chatcmpl-ba21fa91-dcd6-4dad-90cc-6d49c3c39094",
  "choices": [
    {
      "finish_reason": "stop",
      "index": 0,
      "logprobs": null,
      "message": {
        "content": "```json\n{\n    \"銷售方名稱\": \"null\",\n    \"購買方名稱\": \"蔡應時\",\n    \"不含稅價\": \"230769.23\",\n    \"組織機構代碼\": \"null\",\n    \"發票代碼\": \"142011726001\"\n}\n```",
        "refusal": null,
        "role": "assistant",
        "annotations": null,
        "audio": null,
        "function_call": null,
        "tool_calls": null
      }
    }
  ],
  "created": 1763283287,
  "model": "qwen-vl-ocr-latest",
  "object": "chat.completion",
  "service_tier": null,
  "system_fingerprint": null,
  "usage": {
    "completion_tokens": 72,
    "prompt_tokens": 1185,
    "total_tokens": 1257,
    "completion_tokens_details": {
      "accepted_prediction_tokens": null,
      "audio_tokens": null,
      "reasoning_tokens": null,
      "rejected_prediction_tokens": null,
      "text_tokens": 72
    },
    "prompt_tokens_details": {
      "audio_tokens": null,
      "cached_tokens": null,
      "image_tokens": 1001,
      "text_tokens": 184
    }
  }
}

id string

本次請求的唯一識別碼。

choices array

模型產生內容的數組。

屬性

finish_reason string

模型停止產生的原因。

有兩種情況:

  • 自然停止輸出時為stop

  • 產生長度過長而結束為length

index integer

當前對象在choices數組中的索引。

message object

模型輸出的訊息。

屬性

content string

大模型的返回結果。

refusal string

該參數當前固定為null

role string

訊息的角色,固定為assistant

audio object

該參數當前固定為null

function_call object

該參數當前固定為null

tool_calls array

該參數當前固定為null

created integer

本次請求被建立時的時間戳記。

model string

本次請求使用的模型。

object string

始終為chat.completion

service_tier string

該參數當前固定為null

system_fingerprint string

該參數當前固定為null

usage object

本次請求的 Token 消耗資訊。

屬性

completion_tokens integer

模型輸出的 Token 數。

prompt_tokens integer

輸入的 Token 數。

total_tokens integer

消耗的總 Token 數,為prompt_tokenscompletion_tokens的總和。

completion_tokens_details object

模型輸出Token的細粒度分類。

屬性

accepted_prediction_tokensinteger

該參數當前固定為null

audio_tokens integer

該參數當前固定為null

reasoning_tokens integer

該參數當前固定為null

text_tokens integer

模型輸出文本對應的 Token 數。

rejected_prediction_tokens integer

該參數當前固定為null

prompt_tokens_details object

輸入 Token 的細粒度分類。

屬性

audio_tokens integer

該參數當前固定為null

cached_tokens integer

該參數當前固定為null

text_tokens integer

模型輸入的文本對應的Token 數。

image_tokens integer

模型輸入的映像對應的 Token數。

chat響應chunk對象(流式輸出)

{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"","function_call":null,"refusal":null,"role":"assistant","tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"```","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"json","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"\n","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"{\n","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"   ","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
......
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"```","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":null,"index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[{"delta":{"content":"","function_call":null,"refusal":null,"role":null,"tool_calls":null},"finish_reason":"stop","index":0,"logprobs":null}],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":null}
{"id":"chatcmpl-f6fbdc0d-78d6-418f-856f-f099c2e4859b","choices":[],"created":1764139204,"model":"qwen-vl-ocr-latest","object":"chat.completion.chunk","service_tier":null,"system_fingerprint":null,"usage":{"completion_tokens":141,"prompt_tokens":513,"total_tokens":654,"completion_tokens_details":{"accepted_prediction_tokens":null,"audio_tokens":null,"reasoning_tokens":null,"rejected_prediction_tokens":null,"text_tokens":141},"prompt_tokens_details":{"audio_tokens":null,"cached_tokens":null,"image_tokens":332,"text_tokens":181}}}

id string

本次調用的唯一識別碼。每個chunk對象有相同的 id。

choices array

模型產生內容的數組。若設定include_usage參數為true,則在最後一個chunk中為空白。

屬性

delta object

流式返回的輸出內容。

屬性

content string

大模型的返回結果。

function_call object

該參數當前固定為null

refusal object

該參數當前固定為null

role string

訊息對象的角色,只在第一個chunk中有值。

finish_reason string

模型停止產生的原因。有三種情況:

  • 自然停止輸出時為stop

  • 產生未結束時為null

  • 產生長度過長而結束為length

index integer

當前響應在choices數組中的索引。

created integer

本次請求被建立時的時間戳記。每個chunk有相同的時間戳記。

model string

本次請求使用的模型。

object string

始終為chat.completion.chunk

service_tier string

該參數當前固定為null

system_fingerprintstring

該參數當前固定為null

usage object

本次請求消耗的Token。只在include_usagetrue時,在最後一個chunk返回。

屬性

completion_tokens integer

模型輸出的 Token 數。

prompt_tokens integer

輸入的 Token 數。

total_tokens integer

消耗的總 Token 數,為prompt_tokenscompletion_tokens的總和。

completion_tokens_details object

模型輸出Token的細粒度分類。

屬性

accepted_prediction_tokensinteger

該參數當前固定為null

audio_tokens integer

該參數當前固定為null

reasoning_tokens integer

該參數當前固定為null

text_tokens integer

模型輸出文本對應的 Token 數。

rejected_prediction_tokens integer

該參數當前固定為null

prompt_tokens_details object

輸入 Token 的細粒度分類。

屬性

audio_tokens integer

該參數當前固定為null

cached_tokens integer

該參數當前固定為null

text_tokens integer

模型輸入的文本對應的Token 數。

image_tokens integer

模型輸入的映像對應的 Token數。

DashScope

新加坡地區

HTTP 調用配置的endpointPOST https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

SDK調用配置的base_url

Python代碼

dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

Java代碼

  • 方式一:

    import com.alibaba.dashscope.protocol.Protocol;
    MultiModalConversation conv = new MultiModalConversation(Protocol.HTTP.getValue(), "https://dashscope-intl.aliyuncs.com/api/v1");
  • 方式二:

    import com.alibaba.dashscope.utils.Constants;
    Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";

北京地區

HTTP 調用配置的endpointPOST https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation

SDK 調用無需配置 base_url

您需要已擷取與配置 API Key配置API Key到環境變數(準備下線,併入配置 API Key)。若通過DashScope SDK進行調用,需要安裝DashScope SDK

請求體

高精識別

以下為調用高精識別內建任務的程式碼範例,詳情請參見調用內建任務

import os
import dashscope

# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                # 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192,
                # 開啟映像自動轉正功能
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 設定內建任務為高精識別
    ocr_options={"task": "advanced_recognition"}
)
# 多語言識別任務以純文字的形式返回結果
print(response["output"]["choices"][0]["message"].content[0]["text"])
// dashscope SDK的版本 >= 2.21.8
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
        // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        // 配置內建的OCR任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.ADVANCED_RECOGNITION)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下是新加坡地區base-url,如果使用新加坡地區的模型,需要將base_url替換為:https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "advanced_recognition"
    }
  }
}
'

資訊抽取

以下為調用資訊抽取內建任務的程式碼範例,詳情請參見調用內建任務

# use [pip install -U dashscope] to update sdk

import os
import dashscope
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
      {
        "role":"user",
        "content":[
          {
              "image":"http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
              "min_pixels": 3072,
              "max_pixels": 8388608,
              "enable_rotate": False
          }
        ]
      }
    ]

params = {
  "ocr_options":{
    "task": "key_information_extraction",
    "task_config": {
      "result_schema": {
          "乘車日期": "對應圖中乘車日期時間,格式為年-月-日,比如2025-03-05",
          "發票代碼": "提取圖中的發票代碼,通常為一組數字或字母組合",
          "發票號碼": "提取發票上的號碼,通常由純數字組成。"
      }
    }
  }
}

response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    **params)

print(response.output.choices[0].message.content[0]["ocr_result"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.google.gson.JsonObject;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
         // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();

        // 建立主JSON對象
        JsonObject resultSchema = new JsonObject();
        resultSchema.addProperty("乘車日期", "對應圖中乘車日期時間,格式為年-月-日,比如2025-03-05");
        resultSchema.addProperty("發票代碼", "提取圖中的發票代碼,通常為一組數字或字母組合");
        resultSchema.addProperty("發票號碼", "提取發票上的號碼,通常由純數字組成。");


        // 配置內建的OCR任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.KEY_INFORMATION_EXTRACTION)
                .taskConfig(OcrOptions.TaskConfig.builder()
                        .resultSchema(resultSchema)
                        .build())
                .build();

        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("ocr_result"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "http://duguang-labelling.oss-cn-shanghai.aliyuncs.com/demo_ocr/receipt_zh_demo.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "key_information_extraction",
      "task_config": {
        "result_schema": {
            "乘車日期": "對應圖中乘車日期時間,格式為年-月-日,比如2025-03-05",
            "發票代碼": "提取圖中的發票代碼,通常為一組數字或字母組合",
            "發票號碼": "提取發票上的號碼,通常由純數字組成。"
        }
    }
    }
  }
}
'

表格解析

以下為調用表格解析內建任務的程式碼範例,詳情請參見調用內建任務

import os
import dashscope
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg",
                # 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192,
                # 開啟映像自動轉正功能
                "enable_rotate": False}]
           }]
           
response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 設定內建任務為表格解析
    ocr_options= {"task": "table_parsing"}
)
# 表格解析任務以HTML格式返回結果
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels",3072);
        // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        // 配置內建的OCR任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.TABLE_PARSING)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/doc_parsing/tables/photo/eng/17.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "table_parsing"
    }
  }
}
'

文檔解析

以下為調用文檔解析內建任務的程式碼範例,詳情請參見調用內建任務

import os
import dashscope
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg",
                # 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192,
                # 開啟映像自動轉正功能
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 設定內建任務為文檔解析
    ocr_options= {"task": "document_parsing"}
)
# 文檔解析任務以LaTeX格式返回結果
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
        // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        // 配置內建的OCR任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.DOCUMENT_PARSING)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===


curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
  --header "Authorization: Bearer $DASHSCOPE_API_KEY"\
  --header 'Content-Type: application/json'\
  --data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
  "messages": [
    {
      "role": "user",
      "content": [{
          "image": "https://img.alicdn.com/imgextra/i1/O1CN01ukECva1cisjyK6ZDK_!!6000000003635-0-tps-1500-1734.jpg",
          "min_pixels": 3072,
          "max_pixels": 8388608,
          "enable_rotate": false
        }
      ]
    }
  ]
},
"parameters": {
  "ocr_options": {
    "task": "document_parsing"
  }
}
}
'

公式識別

以下為調用公式識別內建任務的程式碼範例,詳情請參見調用內建任務
import os
import dashscope

# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg",
                # 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192,
                # 開啟映像自動轉正功能
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 設定內建任務為公式識別
    ocr_options= {"task": "formula_recognition"}
)
# 公式識別任務以LaTeX格式返回結果
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
        // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        // 配置內建的OCR任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.FORMULA_RECOGNITION)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "http://duguang-llm.oss-cn-hangzhou.aliyuncs.com/llm_data_keeper/data/formula_handwriting/test/inline_5_4.jpg",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "formula_recognition"
    }
  }
}
'

通用文字識別

以下為調用通用文字識別內建任務的程式碼範例,詳情請參見調用內建任務

import os
import dashscope
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
                # 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192,
                # 開啟映像自動轉正功能
                "enable_rotate": False}]
        }]
        
response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 設定內建任務為通用文字識別
    ocr_options= {"task": "text_recognition"} 
)
# 通用文字識別任務以純文字格式返回結果
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
        // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        // 配置內建任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.TEXT_RECOGNITION)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation'\
  --header "Authorization: Bearer $DASHSCOPE_API_KEY"\
  --header 'Content-Type: application/json'\
  --data '{
"model": "qwen-vl-ocr-2025-11-20",
"input": {
  "messages": [
    {
      "role": "user",
      "content": [{
          "image": "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20241108/ctdzex/biaozhun.jpg",
          "min_pixels": 3072,
          "max_pixels": 8388608,
          "enable_rotate": false
        }
      ]
    }
  ]
},
"parameters": {
  "ocr_options": {
      "task": "text_recognition"
    }
}
}'

多語言識別

以下為調用通用多語言識別內建任務的程式碼範例,詳情請參見調用內建任務

import os
import dashscope
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [{
            "role": "user",
            "content": [{
                "image": "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png",
                # 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192,
                # 開啟映像自動轉正功能
                "enable_rotate": False}]
            }]
            
response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model='qwen-vl-ocr-2025-11-20',
    messages=messages,
    # 設定內建任務為多語言識別
    ocr_options={"task": "multi_lan"}
)
# 多語言識別任務以純文字的形式返回結果
print(response["output"]["choices"][0]["message"].content[0]["text"])
import java.util.Arrays;
import java.util.Collections;
import java.util.Map;
import java.util.HashMap;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.aigc.multimodalconversation.OcrOptions;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    
    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png");
        // 輸入映像的最大像素閾值,超過該值映像會進行縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會進行放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
        // 開啟映像自動轉正功能
        map.put("enable_rotate", false);
        
        // 配置內建的OCR任務
        OcrOptions ocrOptions = OcrOptions.builder()
                .task(OcrOptions.Task.MULTI_LAN)
                .build();
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map
                        )).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .ocrOptions(ocrOptions)
                .build();
        MultiModalConversationResult result = conv.call(param);
        System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent().get(0).get("text"));
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}
# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
--data '
{
  "model": "qwen-vl-ocr-2025-11-20",
  "input": {
    "messages": [
      {
        "role": "user",
        "content": [
          {
            "image": "https://img.alicdn.com/imgextra/i2/O1CN01VvUMNP1yq8YvkSDFY_!!6000000006629-2-tps-6000-3000.png",
            "min_pixels": 3072,
            "max_pixels": 8388608,
            "enable_rotate": false
          }
        ]
      }
    ]
  },
  "parameters": {
    "ocr_options": {
      "task": "multi_lan"
    }
  }
}
'

流式輸出

Python

import os
import dashscope

PROMPT_TICKET_EXTRACTION = """
請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。
要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。
返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"},
"""

# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

messages = [
    {
        "role": "user",
        "content": [
            {
                "image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
                # 輸入映像的最小像素閾值,小於該值映像會放大,直到總像素大於min_pixels
                "min_pixels": 32 * 32 * 3,
                # 輸入映像的最大像素閾值,超過該值映像會縮小,直到總像素低於max_pixels
                "max_pixels": 32 * 32 * 8192},
            # 未設定內建任務時,支援在text欄位中傳入Prompt,若未傳入則使用預設的Prompt:Please output only the text content from the image without any additional descriptions or formatting.
            {
                "type": "text",
                "text": PROMPT_TICKET_EXTRACTION,
            },
        ],
    }
]
response = dashscope.MultiModalConversation.call(
    # 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
    # 若沒有配置環境變數,請用百鍊API Key將下行替換為:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    model="qwen-vl-ocr-2025-11-20",
    messages=messages,
    stream=True,
    incremental_output=True,
)
full_content = ""
print("流式輸出內容為:")
for response in response:
    try:
        print(response["output"]["choices"][0]["message"].content[0]["text"])
        full_content += response["output"]["choices"][0]["message"].content[0]["text"]
    except:
        pass
print(f"完整內容為:{full_content}")

Java

import java.util.*;

import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversation;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationParam;
import com.alibaba.dashscope.aigc.multimodalconversation.MultiModalConversationResult;
import com.alibaba.dashscope.common.MultiModalMessage;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.exception.UploadFileException;
import io.reactivex.Flowable;
import com.alibaba.dashscope.utils.Constants;

public class Main {

    static {
        // 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }

    public static void simpleMultiModalConversationCall()
            throws ApiException, NoApiKeyException, UploadFileException {
        MultiModalConversation conv = new MultiModalConversation();
        Map<String, Object> map = new HashMap<>();
        map.put("image", "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg");
        // 輸入映像的最大像素閾值,超過該值映像會縮小,直到總像素低於max_pixels
        map.put("max_pixels", 8388608);
        // 輸入映像的最小像素閾值,小於該值映像會放大,直到總像素大於min_pixels
        map.put("min_pixels", 3072);
        MultiModalMessage userMessage = MultiModalMessage.builder().role(Role.USER.getValue())
                .content(Arrays.asList(
                        map,
                        // 未設定內建任務時,支援在text欄位中傳入Prompt,若未傳入則使用預設的Prompt:Please output only the text content from the image without any additional descriptions or formatting.
                        Collections.singletonMap("text", "請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"))).build();
        MultiModalConversationParam param = MultiModalConversationParam.builder()
                // 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
                // 若沒有配置環境變數,請用百鍊API Key將下行替換為:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("qwen-vl-ocr-2025-11-20")
                .message(userMessage)
                .incrementalOutput(true)
                .build();
        Flowable<MultiModalConversationResult> result = conv.streamCall(param);
        result.blockingForEach(item -> {
            try {
                List<Map<String, Object>> contentList = item.getOutput().getChoices().get(0).getMessage().getContent();
                if (!contentList.isEmpty()){
                    System.out.println(contentList.get(0).get("text"));
                }//
            } catch (Exception e){
                System.exit(0);
            }
        });
    }

    public static void main(String[] args) {
        try {
            simpleMultiModalConversationCall();
        } catch (ApiException | NoApiKeyException | UploadFileException e) {
            System.out.println(e.getMessage());
        }
        System.exit(0);
    }
}

curl

# ======= 重要提示 =======
# 新加坡和北京地區的API Key不同。擷取API Key:https://www.alibabacloud.com/help/zh/model-studio/get-api-key
# 以下為新加坡地區url,若使用北京地區的模型,需將url替換為:https://dashscope.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation
# === 執行時請刪除該注釋 ===

curl --location 'https://dashscope-intl.aliyuncs.com/api/v1/services/aigc/multimodal-generation/generation' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header 'Content-Type: application/json' \
-H 'X-DashScope-SSE: enable' \
--data '{
    "model": "qwen-vl-ocr-2025-11-20",
    "input":{
        "messages":[
          {
            "role": "user",
            "content": [
                {
                    "image": "https://img.alicdn.com/imgextra/i2/O1CN01ktT8451iQutqReELT_!!6000000004408-0-tps-689-487.jpg",
                    "min_pixels": 3072,
                    "max_pixels": 8388608
                },
                {"type": "text", "text": "請提取車票映像中的發票號碼、車次、起始站、終點站、發車日期和時間點、座位號、席別類型、票價、社會安全號碼碼、購票人姓名。要求準確無誤的提取上述關鍵資訊、不要遺漏和捏造虛假資訊,模糊或者強光遮擋的單個文字可以用英文問號?代替。返回資料格式以json方式輸出,格式為:{'發票號碼': 'xxx', '發票號碼': 'xxx', '起始站': 'xxx', '終點站': 'xxx', '發車日期和時間點':'xxx', '座位號': 'xxx', '座位號': 'xxx','票價':'xxx', '社會安全號碼碼': 'xxx', '購票人姓名': 'xxx'"}
            ]
          }
        ]
    },
    "parameters": {
        "incremental_output": true
    }
}'

model string (必選)

模型名稱。支援的模型可參見通義千問OCR

messages array (必選)

傳遞給大模型的上下文,按對話順序排列。

通過HTTP調用時,請將messages 放入 input 對象中。

訊息類型

User Message object(必選)

使用者訊息,用於向模型傳遞問題、指令或上下文等。

屬性

content string 或 array(必選)

訊息內容。若輸入只有文本,則為 string 類型;若輸入包含映像資料,則為 array 類型。

屬性

text string (可選)

輸入的文本。

預設值為:Please output only the text content from the image without any additional descriptions or formatting. ,即模型預設提取映像中的全部文本。

image string(可選)

圖片的URL、 Base64 Data URL、或本地路徑。傳入本地檔案請參見傳入本地檔案

樣本值:{"image":"https://xxxx.jpeg"}

enable_rotate boolean (可選)預設值為false

是否對傾斜的映像進行校正處理。

可選值:

  • true:自動校正

  • false:不進行校正

樣本值:{"image":"https://xxxx.jpeg","enable_rotate": True}

min_pixels integer (可選)

用於設定輸入映像的最小像素閾值,單位為像素。

當輸入映像像素小於min_pixels時,會將映像進行放大,直到總像素高於min_pixels

映像Token與像素的轉換關係

不同模型,每個映像 Token 對應的像素不同:

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20:每 Token 對應像素為32*32

  • qwen-vl-ocrqwen-vl-ocr-2025-08-28及之前更新的模型:每 Token 對應像素為28*28

min_pixels 取值範圍

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20:預設值和最小值均為3072(即3×32×32

  • qwen-vl-ocrqwen-vl-ocr-2025-08-28及之前更新的模型:預設值和最小值均為 3136 (即4×28×28)。

樣本值:{"image":"https://xxxx.jpeg","min_pixels": 3072}

max_pixels integer (可選)

用於設定輸入映像的最大像素閾值,單位為像素。

當輸入映像像素在[min_pixels, max_pixels]區間內時,模型會按原圖進行識別。當輸入映像像素大於max_pixels時,會將映像進行縮小,直到總像素低於max_pixels

映像Token與像素的轉換關係

不同模型,每個映像 Token 對應的像素不同:

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20:每 Token 對應像素為32*32

  • qwen-vl-ocrqwen-vl-ocr-2025-08-28及之前更新的模型:每 Token 對應像素為28*28

max_pixels 取值範圍

  • qwen-vl-ocr-latest、qwen-vl-ocr-2025-11-20

    • 預設值:8388608 (即8192x32x32

    • 最大值:30720000(即30000x32x32

  • qwen-vl-ocr、qwen-vl-ocr-2025-08-28及之前更新的模型

    • 預設值:6422528(即8192x28x28

    • 最大值:23520000(即30000x28x28

樣本值:{"image":"https://xxxx.jpeg","max_pixels": 8388608}

role string (必選)

使用者訊息的角色,固定為user

max_tokens integer (可選)

用於限制模型輸出的最大 Token 數。若產生內容超過此值,響應將被截斷。

  • qwen-vl-ocr-latestqwen-vl-ocr-2025-11-20qwen-vl-ocr-2024-10-28預設值與最大值均為模型的最大輸出長度,請參見模型與價格

  • qwen-vl-ocr、qwen-vl-ocr-2025-04-13、qwen-vl-ocr-2025-08-28,預設值和最大值為4096。

    如需提高該參數值(4097~8192範圍),請發送郵件至 modelstudio@service.aliyun.com進行申請,並提供以下資訊:主帳號ID、映像類型(如文檔圖、電商圖、合約等)、模型名稱、預計 QPS 和每日請求總數,以及模型輸出長度超過4096的請求佔比。
Java SDK中為maxTokens通過HTTP調用時,請將 max_tokens 放入 parameters 對象中。

ocr_options object (可選)

使用通義千問OCR模型調用內建任務時需要配置的參數。調用內建任務時,無需傳入User Message,模型內部會採用對應任務的Prompt。相關章節:調用內建任務

屬性

task string (必選)

內建任務的名稱,可選值如下:

  • text_recognition:通用文字識別

  • key_information_extraction:資訊抽取

  • document_parsing文檔解析

  • table_parsing表格解析

  • formula_recognition公式識別

  • multi_lan:多語言識別

  • advanced_recognition:高精識別

task_config object (可選)

task的取值為key_information_extraction(資訊抽取)時,此參數用於指定需抽取的特定欄位。如未指定 task_config,模型將預設提取映像中的所有欄位。

屬性

result_schema object (可選)

表示需要模型抽取的欄位,應為JSON對象結構,最多可嵌套3層JSON 對象

在JSON對象的鍵(key)中指定待抽取欄位的名稱,對應的值(value)可為空白,建議在值中提供欄位描述或格式要求,可提高資訊提取的準確率。

樣本值:

"result_schema": {
     "發票號碼": "發票的唯一識別編號,通常為數字和字母的組合。",
     "開票日期": "發票開具的日期,請以YYYY-MM-DD格式提取,例如2023-10-26。",
     "銷售方名稱": "發票上顯示的銷售方公司全稱。",
     "總金額": "發票中包含稅費的總計金額,要求提取數值並保留兩位小數,例如123.45。" 
}
Java SDK為OcrOptions,DashScope Python SDK 最低版本為1.22.2, Java SDK 最低版本為2.18.4。
通過HTTP調用時,請將 ocr_options 放入 parameters 對象中。

seed integer (可選)

隨機數種子。用於確保在相同輸入和參數下產生結果可複現。若調用時傳入相同的 seed 且其他參數不變,模型將儘可能返回相同結果。

取值範圍:[0,231−1]

建議設定為預設值即可。
通過HTTP調用時,請將 seed 放入 parameters 對象中。

temperature float (可選) 預設值為0.01

採樣溫度,控制模型產生文本的多樣性。

temperature越高,產生的文本更多樣,反之,產生的文本更確定。

取值範圍: [0, 2)

temperature與top_p均可以控制產生文本的多樣性,建議只設定其中一個值。

建議設定為預設值即可。
通過HTTP調用時,請將 temperature 放入 parameters 對象中。

top_p float (可選)預設值為0.001

核採樣的機率閾值,控制模型產生文本的多樣性。

top_p越高,產生的文本更多樣。反之,產生的文本更確定。

取值範圍:(0,1.0]

temperature與top_p均可以控制產生文本的多樣性,建議只設定其中一個值。

建議設定為預設值即可。
Java SDK中為topP通過HTTP調用時,請將 top_p 放入 parameters 對象中。

top_k integer (可選)預設值為1

產生過程中採樣候選集的大小。例如,取值為50時,僅將單次產生中得分最高的50個Token組成隨機採樣的候選集。取值越大,產生的隨機性越高;取值越小,產生的確定性越高。取值為None或當top_k大於100時,表示不啟用top_k策略,此時僅有top_p策略生效。

取值需要大於或等於0。

該參數非OpenAI標準參數。通過 Python SDK調用時,請放入 extra_body 對象中,配置方式為:extra_body={"top_k": xxx};通過 Node.js SDK 或 HTTP 方式調用時,請作為頂層參數傳遞。

建議設定為預設值即可。

repetition_penalty float (可選)預設值為1.0

模型產生時連續序列中的重複度。提高repetition_penalty時可以降低模型產生的重複度,1.0表示不做懲罰。該參數對模型效果影響較大,建議保持預設值。

建議設定為預設值即可。
Java SDK中為repetitionPenalty通過HTTP調用時,請將 repetition_penalty 放入 parameters 對象中。

presence_penalty float (可選)預設值為0.0

控制模型產生文本時的內容重複度。

取值範圍:[-2.0, 2.0]。正值降低重複度,負值增加重複度。

在創意寫作或頭腦風暴等需要多樣性、趣味性或創造力的情境中,建議調高該值;在技術文檔或正式文本等強調一致性與術語準確性的情境中,建議調低該值。

原理介紹

如果參數值是正數,模型將對目前文本中已存在的Token施加一個懲罰值(懲罰值與文本出現的次數無關),減少這些Token重複出現的幾率,從而減少內容重複度,增加用詞多樣性。

建議設定為預設值即可。

stream boolean (可選) 預設值為false

是否流式輸出回複。參數值:

  • false:模型產生完所有內容後一次性返回結果。

  • true:邊產生邊輸出,即每產生一部分內容就立即輸出一個片段(chunk)。

該參數僅支援Python SDK。通過Java SDK實現流式輸出請通過streamCall介面調用;通過HTTP實現流式輸出請在Header中指定X-DashScope-SSEenable

incremental_output boolean (可選)預設為false

在流式輸出模式下是否開啟增量輸出。推薦您優先設定為true

參數值:

  • false:每次輸出為當前已經產生的整個序列,最後一次輸出為產生的完整結果。

    I
    I like
    I like apple
    I like apple.
  • true(推薦):增量輸出,即後續輸出內容不包含已輸出的內容。您需要即時地逐個讀取這些片段以獲得完整的結果。

    I
    like
    apple
    .
Java SDK中為incrementalOutput通過HTTP調用時,請將 incremental_output 放入 parameters 對象中。

stop string 或 array (可選)

用於指定停止詞。當模型產生的文本中出現stop 指定的字串或token_id時,產生將立即終止。

可傳入敏感詞以控制模型的輸出。

stop為數組時,不可將token_id和字串同時作為元素輸入,比如不可以指定為["你好",104307]

logprobs boolean (可選)預設值為 false

是否返回輸出 Token 的對數機率,可選值:

  • true

    返回

  • false

    不返回

支援的模型:qwen-vl-ocr-2025-04-13及之後更新的模型

通過HTTP調用時,請將 logprobs 放入 parameters 對象中。

top_logprobs integer (可選)預設值為0

指定在每一步產生時,返回模型最大機率的候選 Token 個數。僅當 logprobstrue 時生效。

取值範圍:[0,5]

Java SDK中為topLogprobs通過HTTP調用時,請將 top_logprobs 放入 parameters 對象中。

chat響應對象(流式與非流式輸出格式一致)

{"status_code": 200,
  "request_id": "8f8c0f6e-6805-4056-bb65-d26d66080a41",
  "code": "",
  "message": "",
  "output": {
    "text": null,
    "finish_reason": null,
    "choices": [
      {
        "finish_reason": "stop",
        "message": {
          "role": "assistant",
          "content": [
            {
              "ocr_result": {
                "kv_result": {
                  "不含稅價": "230769.23",
                  "發票代碼": "142011726001",
                  "組織機構代碼": "null",
                  "購買方名稱": "蔡應時",
                  "銷售方名稱": "null"
                }
              },
              "text": "```json\n{\n    \"不含稅價\": \"230769.23\",\n    \"發票代碼\": \"142011726001\",\n    \"組織機構代碼\": \"null\",\n    \"購買方名稱\": \"蔡應時\",\n    \"銷售方名稱\": \"null\"\n}\n```"
            }
          ]
        }
      }
    ],
    "audio": null
  },
  "usage": {
    "input_tokens": 926,
    "output_tokens": 72,
    "characters": 0,
    "image_tokens": 754,
    "input_tokens_details": {
      "image_tokens": 754,
      "text_tokens": 172
    },
    "output_tokens_details": {
      "text_tokens": 72
    },
    "total_tokens": 998
  }
}

status_code string

本次請求的狀態代碼。200 表示請求成功,否則表示請求失敗。

Java SDK不會返回該參數。調用失敗會拋出異常,異常資訊為status_codemessage的內容。

request_id string

本次調用的唯一識別碼。

Java SDK返回參數為requestId。

code string

錯誤碼,調用成功時為空白值。

只有Python SDK返回該參數。

output object

調用結果資訊。

屬性

text string

該參數當前固定為null

finish_reason string

模型結束產生的原因。有以下情況:

  • 正在產生時為null

  • 模型輸出自然結束為stop

  • 因產生長度過長而結束為length

choices array

模型的輸出資訊。

屬性

finish_reason string

有以下情況:

  • 正在產生時為null

  • 因模型輸出自然結束為stop

  • 因產生長度過長而結束為length

message object

模型輸出的訊息對象。

屬性

role string

輸出訊息的角色,固定為assistant

content object

輸出訊息的內容。

屬性

ocr_result object

當Qwen-OCR系列模型調用內建的資訊抽取、高精識別任務時,輸出的任務結果資訊。

屬性

kv_result array

資訊抽取任務的輸出結果。

words_info array

高精識別任務的輸出結果。

屬性

rotate_rect array

樣本值:[center_x, center_y, width, height, angle]

文字框的旋轉矩形表示:

  • center_x、center_y為文字框中心點座標

  • width為文字框寬度,height為高度

  • angle為文字框相對於水平方向的旋轉角度,取值範圍為[-90, 90]

location array

樣本值:[x1, y1, x2, y2, x3, y3, x4, y4]

文字框四個頂點的座標,座標順序為左上方開起,按左上方→右上方→右下角→左下角的順時針順序排列。

text string

文本行的內容

text string

輸出訊息的內容。

logprobs object

當前 choices 對象的機率資訊。

屬性

content array

帶有對數機率資訊的 Token 數組。

屬性

token string

當前 Token。

bytes array

當前 Token 的 UTF‑8 原始位元組列表,用於精確還原輸出內容,在處理Emoji、中文字元時有協助。

logprob float

當前 Token 的對數機率。傳回值為 null 表示機率值極低。

top_logprobs array

當前 Token 位置最可能的若干個 Token 及其對數機率,元素個數與入參的top_logprobs保持一致。

屬性

token string

當前 Token。

bytes array

當前 Token 的 UTF‑8 原始位元組列表,用於精確還原輸出內容,在處理Emoji、中文字元時有協助。

logprob float

當前 Token 的對數機率。傳回值為 null 表示機率值極低。

usage object

本次請求使用的Token資訊。

屬性

input_tokens integer

輸入 Token 數。

output_tokens integer

輸出 Token 數。

characters integer

該參數當前固定為0。

input_tokens_details object

輸入 Token 的細粒度分類。

屬性

image_tokens integer

模型輸入的映像對應的 Token數。

text_tokens integer

模型輸入的文本對應的Token 數。

output_tokens_details object

輸出 Token 的細粒度分類。

屬性

text_tokens integer

模型輸入的文本對應的Token 數。

total_tokens integer

消耗的總 Token 數,為input_tokensoutput_tokens的總和。

image_tokens integer

輸入內容包含image時返回該欄位。為使用者輸入圖片內容轉換成Token後的長度。

錯誤碼

如果模型調用失敗並返回報錯資訊,請參見錯誤資訊進行解決。