文档

快速开始

更新时间:

本文提供简单的示例代码,帮助您快速上手并调用通义千问模型服务。

前提条件

  • DashScope SDK提供了Python和Java两个版本,请确保您已安装最新版SDK:安装DashScope SDK。您也可以通过HTTP接口调用,详情请见:HTTP调用接口

示例代码

您可以通过两种方式来调用模型:通过messages调用或通过prompt调用。如果您有多轮对话的需求,我们更推荐您通过messages调用,多轮对话的调用方式请见:多轮对话

方式一:通过messages调用(推荐)

您可以运行以下代码,通过messages方式向通义千问大模型提问。

from http import HTTPStatus
import dashscope


def call_with_messages():
    messages = [{'role': 'system', 'content': 'You are a helpful assistant.'},
                {'role': 'user', 'content': '请介绍一下通义千问'}]

    response = dashscope.Generation.call(
        dashscope.Generation.Models.qwen_turbo,
        messages=messages,
        result_format='message',  # 将返回结果格式设置为 message
    )
    if response.status_code == HTTPStatus.OK:
        print(response)
    else:
        print('Request id: %s, Status code: %s, error code: %s, error message: %s' % (
            response.request_id, response.status_code,
            response.code, response.message
        ))


if __name__ == '__main__':
    call_with_messages()
// Copyright (c) Alibaba, Inc. and its affiliates.

import java.util.ArrayList;
import java.util.List;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;



public class Main {
  public static void callWithMessage()
      throws NoApiKeyException, ApiException, InputRequiredException {
    Generation gen = new Generation();
    List<Message> messages = new ArrayList<>();
    Message systemMsg =
        Message.builder().role(Role.SYSTEM.getValue()).content("You are a helpful assistant.").build();
    Message userMsg = Message.builder().role(Role.USER.getValue()).content("请介绍一下通义千问").build();
    messages.add(systemMsg);
    messages.add(userMsg);
    GenerationParam param =
        GenerationParam.builder().model(Generation.Models.QWEN_TURBO).messages(messages)
            .resultFormat(GenerationParam.ResultFormat.MESSAGE)
            .build();
    GenerationResult result = gen.call(param);
    System.out.println(JsonUtils.toJson(result));
  }


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

调用成功后将输出以下结果。

Python

{
    "status_code": 200,
    "request_id": "a75a1b22-e512-957d-891b-37db858ae738",
    "code": "",
    "message": "",
    "output": {
        "text": null,
        "finish_reason": null,
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "通义千问是阿里云自主研发的超大规模语言模型,能够回答问题、创作文字,还能表达观点、撰写代码。作为一个大型预训练语言模型,我能够根据您提出的指令产出相关的回复,并尽可能提供准确和有用的信息。我会不断学习和进步,不断提升自己的能力,为用户提供更好的服务。如果您有任何问题或需要帮助,请随时告诉我。"
                }
            }
        ]
    },
    "usage": {
        "input_tokens": 25,
        "output_tokens": 77,
        "total_tokens": 102
    }
}

Java

{
    "requestId": "288e382e-ad82-9b24-954e-c73da12e0b75",
    "usage": {
        "input_tokens": 25,
        "output_tokens": 67,
        "total_tokens": 92
    },
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "通义千问是阿里云自主研发的超大规模语言模型,能够回答问题、创作文字,还能表达观点、撰写代码。作为一个大型预训练语言模型,我能够根据您提出的指令产出相关的回复,并尽可能提供准确和有用的信息。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。"
                }
            }
        ]
    }
}
说明

Python和Java在处理错误码code以及错误消息有差异,python直接在结果中展示错误码(code)和消息(message),Java在出错时会抛出异常,在异常中有code和message信息。

方式二:通过prompt调用

您可以通过prompt方式来调用通义千问大模型。通过prompt方式调用时,输入与输出的数据格式比messages方式简单,更适合单轮问答等简单场景;在更复杂的场景中推荐您通过messages方式调用。

from http import HTTPStatus
import dashscope


def call_with_prompt():
    response = dashscope.Generation.call(
        model=dashscope.Generation.Models.qwen_turbo,
        prompt='请介绍一下通义千问'
    )
    # 如果调用成功,则打印模型的输出
    if response.status_code == HTTPStatus.OK:
        print(response)
    # 如果调用失败,则打印出错误码与失败信息
    else:
        print(response.code)  
        print(response.message) 

if __name__ == '__main__':
    call_with_prompt()
// Copyright (c) Alibaba, Inc. and its affiliates.

import java.util.concurrent.Semaphore;
import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.aigc.generation.models.QwenParam;
import com.alibaba.dashscope.common.ResultCallback;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.utils.JsonUtils;

public class Main {
    private final static String PROMPT = "请介绍一下通义千问";

    public static void qwenQuickStart()
            throws NoApiKeyException, ApiException, InputRequiredException {
        Generation gen = new Generation();
        QwenParam param = QwenParam.builder().model(Generation.Models.QWEN_TURBO).prompt(PROMPT)
                .topP(0.8).build();
        GenerationResult result = gen.call(param);
        System.out.println(JsonUtils.toJson(result));
    }

    public static void qwenQuickStartCallback()
            throws NoApiKeyException, ApiException, InputRequiredException, InterruptedException {
        Generation gen = new Generation();
        QwenParam param = QwenParam.builder().model(Generation.Models.QWEN_TURBO).prompt(PROMPT)
                .topP(0.8).build();
        Semaphore semaphore = new Semaphore(0);
        gen.call(param, new ResultCallback<GenerationResult>() {

            @Override
            public void onEvent(GenerationResult message) {
                System.out.println(message);
            }

            @Override
            public void onError(Exception ex) {
                System.out.println(ex.getMessage());
                semaphore.release();
            }

            @Override
            public void onComplete() {
                System.out.println("onComplete");
                semaphore.release();
            }

        });
        semaphore.acquire();
    }

    public static void main(String[] args) {
        try {
            qwenQuickStart();
            qwenQuickStartCallback();
        } catch (ApiException | NoApiKeyException | InputRequiredException
                | InterruptedException e) {
            System.out.println(String.format("Exception %s", e.getMessage()));
        }
        System.exit(0);
    }
}

调用成功后将输出以下结果。

Python

{
    "status_code": 200,
    "request_id": "b9b5767a-7b94-9df1-93bd-f3cf97e2acaa",
    "code": "",
    "message": "",
    "output": {
        "text": "你好,我是阿里云自主研发的超大规模语言模型“通义千问”。作为一个AI助手,我的目标是帮助用户获得准确、有用的信息,解决他们的问题和困惑。我能够回答各种主题的问题,提供知识性解释,进行创造性的思考,并与用户进行对话。我会不断学习和进步,不断提升自己的能力,为用户提供更好的服务。如果您有任何问题,请随时向我提问。",
        "finish_reason": "stop",
        "choices": null
    },
    "usage": {
        "input_tokens": 25,
        "output_tokens": 84,
        "total_tokens": 109
    }
}

Java

{
    "requestId": "df0709ff-cab9-9200-8792-18e9eb616bf2",
    "usage": {
        "input_tokens": 25,
        "output_tokens": 62,
        "total_tokens": 87
    },
    "output": {
        "text": "通义千问是阿里云自主研发的超大规模语言模型,能够回答问题、创作文字,还能表达观点、撰写代码。我就是通义千问,是一个能够帮助用户获得准确、有用信息的语言模型。如果您有任何问题或需要帮助,请随时告诉我,我会尽力提供支持。",
        "finish_reason": "stop"
    }
}

相关文档

更多通义千问模型API的详细调用,请参见API详情

  • 本页导读 (0)