数据挖掘(Qwen-Doc-Turbo)

数据挖掘模型专门针对信息抽取、内容审核、分类打标和摘要生成任务进行设计。相比通用对话模型,该模型能够快速且精确地输出规范的结构化数据(如JSON格式),解决通用对话模型返回不规范回复结构或提取信息不够准确的问题。

说明

本文档仅适用于中国大陆版(北京地域),需使用中国(北京)地域的API Key

使用方式

Qwen-Doc-Turbo 支持通过以下三种方式从文件中提取信息:

  • 通过文件URL传入 (推荐):

    • 直接在API请求中提供文件的公开URL,模型即可访问并解析内容。此方法最多支持单次传入10个文件,并可通过 file_parsing_strategy 参数指定解析策略(auto 或 text_only),是处理多文件的唯一方式。

    • SDK: 文件URL方式当前仅支持DashScope协议,可以选择使用DashScope Python SDK或者HTTP方式调用(如curl)

  • 通过文件ID传入:

    • 先将本地文件上传至百炼平台,生成一个当前阿里云账号下唯一的 file-id并开始解析,然后在后续的API请求中引用此id。此方法兼容 OpenAI SDK,适合需要重复使用同一份文件或处理本地文件的场景。

    • SDK: 文件上传与管理使用 OpenAI SDK,模型调用兼容 OpenAI SDK 和 DashScope SDK

  • 通过纯文本传入:

    • 对于较短或临时的文本内容,可以直接将其作为 system 消息的一部分传入。

    • SDK: 兼容 OpenAI SDK 和 DashScope SDK

前提条件

通过文件URL传入

通过文件URL直接提取结构化数据,支持最多10个文件同时处理。此处以传入客户反馈报告.txt文件为例。

文件URL方式当前仅支持DashScope协议,可以选择使用DashScope Python SDK或者HTTP方式调用(如curl)
import os
import dashscope

response = dashscope.Generation.call(
    api_key=os.getenv('DASHSCOPE_API_KEY'), # 如果您没有配置环境变量,请在此处替换您的API-KEY
    model='qwen-doc-turbo',
    messages=[
    {"role": "system","content": "You are a helpful assistant."},
    {
        "role": "user",
        "content": [
            {
                "type": "text",
                "text": "从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。"
            },
            {
                "type": "doc_url",
                "doc_url": [
                    "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250910/gokhyx/%E5%AE%A2%E6%88%B7%E5%8F%8D%E9%A6%88%E6%8A%A5%E5%91%8A.txt"
                ],
                "file_parsing_strategy": "auto"
            }
        ]
    }]
)
try:
    if response.status_code == 200:
        print(response.output.choices[0].message.content)
    else:
        print(f"请求失败,状态码: {response.status_code}")
        print(f"错误代码: {response.code}")
        print(f"错误信息: {response.message}")
        print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
except Exception as e:
    print(f"发生错误: {e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
curl --location 'https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer $DASHSCOPE_API_KEY' \
--data '{
    "model": "qwen-doc-turbo",
    "input": {
        "messages": [
                {
                    "role": "system",
                    "content": "you are a helpful assistant."
                },
                {
                    "role": "user",
                    "content": [
                        {
                            "type": "text",
                            "text": "从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。"
                        },
                        {
                            "type": "doc_url",
                            "doc_url": [
                                "https://help-static-aliyun-doc.aliyuncs.com/file-manage-files/zh-CN/20250910/gokhyx/%E5%AE%A2%E6%88%B7%E5%8F%8D%E9%A6%88%E6%8A%A5%E5%91%8A.txt"
                            ],
                            "file_parsing_strategy": "auto"
                        }
                    ]
                }
            ]
    }
}'

通过文件ID传入

文件上传

客户反馈报告.txt为例,通过OpenAI兼容接口上传到阿里云百炼平台的安全存储空间,获取返回的file-id。有关文件上传接口的详细参数解释及调用方式,请参考API文档页面进行了解。

Python

import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 如果您没有配置环境变量,请在此处替换您的API-KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",  # 填写DashScope服务base_url
)

file_object = client.files.create(file=Path("客户反馈报告.txt"), purpose="file-extract")
# 打印file-id用于后续模型对话
print(file_object.id)

Java

import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.models.files.*;

import java.nio.file.Paths;

public class Main {
    public static void main(String[] args) {
        // 创建客户端,使用环境变量中的API密钥
        OpenAIClient client = OpenAIOkHttpClient.builder()
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();
        // 设置文件路径,请根据实际需求修改路径与文件名
        Path filePath = Paths.get("src/main/java/org/example/客户反馈报告.txt");
        // 创建文件上传参数
        FileCreateParams fileParams = FileCreateParams.builder()
                .file(filePath)
                .purpose(FilePurpose.of("file-extract"))
                .build();

        // 上传文件打印fileid
        FileObject fileObject = client.files().create(fileParams);
        // # 打印file-id用于后续模型对话
        System.out.println(fileObject.id());
    }
}

curl

curl --location --request POST 'https://dashscope.aliyuncs.com/compatible-mode/v1/files' \
  --header "Authorization: Bearer $DASHSCOPE_API_KEY" \
  --form 'file=@"客户反馈报告.txt"' \
  --form 'purpose="file-extract"'

运行以上代码,您可以得到本次上传文件对应的file-id

通过文件ID传入信息并对话

将获取的 file-id 嵌入到System Message 中。第一条System Message用于设定角色向模型提问,后续的System Message用于传入 file-id,User Message包含针对文件的具体问题。

import os
from openai import OpenAI, BadRequestError

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处替换您的API-KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

try:
    completion = client.chat.completions.create(
        model="qwen-doc-turbo",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            # 请将 '{FILE_ID}'替换为您实际对话场景所使用的 fileid
            {'role': 'system', 'content': 'fileid://{FILE_ID}'},
            {'role': 'user', 'content': '从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。'}
        ],
        # 本代码示例采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见https://help.aliyun.com/zh/model-studio/text-generation
        stream=True,
        stream_options={"include_usage": True}
    )

    full_content = ""
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            full_content += chunk.choices[0].delta.content
            print(chunk.model_dump())
    
    print(full_content)

except BadRequestError as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;

public class Main {
    public static void main(String[] args) {
        // 创建客户端,使用环境变量中的API密钥
        OpenAIClient client = OpenAIOkHttpClient.builder()
                // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx");
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();

        ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
                .addSystemMessage("You are a helpful assistant.")
                // 请将 '{FILE_ID}'替换为您实际对话场景所使用的 fileid
                .addSystemMessage("fileid://{FILE_ID}")
                .addUserMessage("从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。")
                .model("qwen-doc-turbo")
                .build();

        try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
            streamResponse.stream().forEach(chunk -> {
                String content = chunk.choices().get(0).delta().content().orElse("");
                if (!content.isEmpty()) {
                    System.out.print(content);
                }
            });
        } catch (Exception e) {
            System.err.println("错误信息:" + e.getMessage());
        }
    }
}
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-doc-turbo",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "fileid://{FILE_ID}"},
        {"role": "user","content": "从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

通过纯文本传入

除了通过 file-id 传入文件信息外,您还可以直接使用字符串传入文件内容。在此方法下,为避免模型混淆角色设定与文件内容,请确保在 messages 的第一条消息中添加用于角色设定的信息。

受限于API调用请求体大小,如果您的文本内容长度超过9,000Token,请通过文件ID传入信息对话。
import os
from openai import OpenAI, BadRequestError

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"), # 如果您没有配置环境变量,请在此处替换您的API-KEY
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

try:
    completion = client.chat.completions.create(
        model="qwen-doc-turbo",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            {'role': 'system', 'content': '反馈ID: 001 用户: 张伟 (vip_zhang@example.com) 产品: 百炼 AI-Writer Pro...'},
            {'role': 'user', 'content': '从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。'}
        ],
        # 本代码示例均采用流式输出,以清晰和直观地展示模型输出过程。如果您希望查看非流式输出的案例,请参见https://help.aliyun.com/zh/model-studio/text-generation
        stream=True,
        stream_options={"include_usage": True}
    )

    full_content = ""
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            full_content += chunk.choices[0].delta.content
            print(chunk.model_dump())
    
    print(full_content)

except BadRequestError as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")
import com.openai.client.OpenAIClient;
import com.openai.client.okhttp.OpenAIOkHttpClient;
import com.openai.core.http.StreamResponse;
import com.openai.models.chat.completions.*;

public class Main {
    public static void main(String[] args) {
        // 创建客户端,使用环境变量中的API密钥
        OpenAIClient client = OpenAIOkHttpClient.builder()
                // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx");
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .baseUrl("https://dashscope.aliyuncs.com/compatible-mode/v1")
                .build();

        ChatCompletionCreateParams chatParams = ChatCompletionCreateParams.builder()
                .addSystemMessage("You are a helpful assistant.")
                .addSystemMessage("反馈ID: 001 用户: 张伟 (vip_zhang@example.com) 产品: 百炼 AI-Writer Pro......")
                .addUserMessage("从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。")
                .model("qwen-doc-turbo")
                .build();

        try (StreamResponse<ChatCompletionChunk> streamResponse = client.chat().completions().createStreaming(chatParams)) {
            streamResponse.stream().forEach(chunk -> {
                String content = chunk.choices().get(0).delta().content().orElse("");
                if (!content.isEmpty()) {
                    System.out.print(content);
                }
            });
        } catch (Exception e) {
            System.err.println("错误信息:" + e.getMessage());
        }
    }
}
curl --location 'https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions' \
--header "Authorization: Bearer $DASHSCOPE_API_KEY" \
--header "Content-Type: application/json" \
--data '{
    "model": "qwen-doc-turbo",
    "messages": [
        {"role": "system","content": "You are a helpful assistant."},
        {"role": "system","content": "反馈ID: 001 用户: 张伟 (vip_zhang@example.com) 产品: 百炼 AI-Writer Pro..."},
        {"role": "user","content": "从这份客户反馈报告中,提取所有反馈信息,并整理成一个标准的JSON数组。每个对象需要包含:feedback_id (字符串)、product_name (字符串)、user_name (字符串)、rating_score (1-5的整数)、feedback_type (字符串) 和 summary (不超过30字的中文摘要)。"}
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

模型定价

模型名称

上下文长度

最大输入

最大输出

输入成本

输出成本

免费额度

(Token数)

(每千Token)

qwen-doc-turbo

262,144

253,952

8,192

0.0006

0.001

无免费额度

常见问题

  1. 通过OpenAI文件兼容接口上传文件后,文件将被保存在何处?

    所有通过OpenAI文件兼容接口上传的文件均将被保存在当前阿里云账号下的阿里云百炼存储空间且不会产生任何费用,关于所上传文件的信息查询与管理请参考OpenAI文件接口

  2. 文件ID是否可以用于其他模型对话或功能调用?

    文件ID目前仅能用于Qwen-Long、Qwen-Doc-Turbo模型对话以及Batch接口批量调用

  3. 通过文件URL方式上传时,文件解析策略(file_parsing_strategy)参数有什么不同?

    当解析策略设置为 "auto" 时,系统会根据文件内容自动进行解析;当解析策略设置为 "text_only" 时,系统将仅解析文字类内容。

  4. 如何确定文件已经解析完成?

    获取 file-id 后,可以尝试使用该 file-id 与模型进行对话。若文件尚未解析完成,系统将返回错误码 400,并提示“File parsing in progress, please try again later.”;若模型调用成功并返回了回复内容,则表示文件已解析完成。

  5. 文件上传后的解析过程是否会产生任何额外费用?

    文档解析并不会产生任何额外费用。

API参考

关于Qwen-Doc-Turbo模型的输入与输出参数,请参考通义千问API详情

错误码

如果模型调用失败并返回报错信息,请参见错误信息进行解决。

限制

  • SDK 依赖:

    • 文件URL (doc_url): 文件URL方式当前仅支持DashScope协议,可以选择使用DashScope Python SDK或者HTTP方式调用(如curl)

    • 上传文件 (file-id): 文件上传与管理操作 必须 使用 OpenAI 兼容 SDK。

  • 文件上传与引用:

    • 文件URL (doc_url): 单次请求最多支持 10 个文件URL。

    • 上传文件 (file-id): 单个文件不超过 150MB。单个阿里云账号最多可上传 1 万个文件,总大小不超过 100GB,当前暂无有效期限制。单次请求最多引用 1 个文件。

    • 支持格式:TXT, DOC, DOCX, PDF, XLS, XLSX, MD, PPT, PPTX, JPG, JPEG, PNG, GIT, BMP。

  • API 输入:

    • 通过doc_urlfile-id 引入信息时,上下文长度上限为 262,144 Token。

    • 直接在 usersystem 消息中输入纯文本时,单条消息内容限制在 9,000 Token 以内。

  • API 输出:

    • 最大输出长度为 8,192 Token。

  • 文件共享:

    • file-id 仅在生成它的阿里云主账号内有效,不支持跨账号或通过 RAM 用户 API Key 调用。

  • 限流:关于模型的限流条件,请参见限流