GPT-OSS

更新时间:
复制为 MD 格式

本文介绍了在阿里云百炼平台通过API调用 GPT-OSS 系列模型的方法。

模型列表和计费

GPT-OSS系列模型是OpenAI专为智能体设计的混合专家(MoE)语言模型,支持通过OpenAI兼容reasoning_effort字段控制生成结果的耗时,并提供强大的指令执行和推理能力功能。

DashScope SDK 不支持reasoning_effort字段。
重要

GPT-OSS模型需要添加白名单才可调用,请联系商业技术工程师(BTE)、解决方案架构师(PDSA)提交白名单,否则会产生access_denied错误。

模型名称

上下文长度

最大输入

最大回复长度

输入成本

输出成本

(Token数)

(每千Token)

gpt-oss-120b

131,072

98,304

16,384

0.001

0.005

gpt-oss-20b

0.007

0.0035

GPT-OSS模型不是深度思考模型,会直接输出最终结果。
关于模型限流,请参见限流

注意事项

支持功能

支持流式输出结构化输出

OpenAI兼容支持通过reasoning_effort控制推理耗时,支持参数为lowmediumhigh

提高参数值可增强输出质量,降低则能加快响应速度。建议根据具体任务进行测试,以找到最佳平衡。

不支持Function Calling前缀续写联网搜索

默认参数

  • temperature:1.0

  • top_p:1.0

  • top_k:0

快速开始

API 使用前提:已获取API Key并完成配置API Key到环境变量。如果通过SDK调用,需要安装 OpenAI 或 DashScope SDK

OpenAI兼容

您可以通过 OpenAI SDK 或 OpenAI 兼容的HTTP方式快速体验 GPT-OSS 模型,并通过reasoning_effort控制模型的推理耗时。

Python

示例代码

import os
from openai import OpenAI

# 初始化OpenAI客户端
client = OpenAI(
    # 如果没有配置环境变量,请用阿里云百炼API Key替换:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="gpt-oss-20b",
    messages=[{"role": "user", "content": "你是谁"}],
)
print("=" * 20 + "不设置reasoning_effort" + "=" * 20)
print("=" * 20 + "推理过程" + "=" * 20)
print(completion.choices[0].message.reasoning_content)
print("=" * 20 + "输出结果" + "=" * 20)
print(completion.choices[0].message.content)

completion = client.chat.completions.create(
    model="gpt-oss-20b",
    messages=[{"role": "user", "content": "你是谁"}],
    reasoning_effort="high",
)
print("\n" + "=" * 20 + "reasoning_effort设置为high" + "=" * 20)
print("=" * 20 + "推理过程" + "=" * 20)
print(completion.choices[0].message.reasoning_content)
print("=" * 20 + "输出结果" + "=" * 20)
print(completion.choices[0].message.content)

返回结果

====================不设置reasoning_effort====================
====================推理过程====================
The user asks in Chinese: "你是谁" meaning "Who are you?" The system instructions: we need to respond as ChatGPT, a large language model. Should answer in Chinese presumably. Should follow policy. Simple.
====================输出结果====================
我是由 OpenAI 开发的人工智能语言模型 ChatGPT。我的目标是帮助解答问题、提供信息、进行创意写作以及进行有意义的对话。如果你有什么想了解的或需要帮助的,随时告诉我!

====================reasoning_effort设置为high====================
====================推理过程====================
The user asks "你是谁" which translates to "Who are you?" in Chinese. The user is presumably speaking Chinese. The request is a simple question about the identity of the assistant. According to policy, we can respond with a brief description: "I am ChatGPT, a large language model trained by OpenAI." The user is not requesting disallowed content. So we can comply.

We should respond in Chinese (since the user used Chinese). So answer: "我是ChatGPT,一个由OpenAI训练的大型语言模型,旨在帮助回答问题、提供信息、进行对话等。" Possibly add that we are a virtual assistant. That should be fine.

We must ensure no policy violation. This is a straightforward request. So answer accordingly.

We must not reveal internal policy. So answer in Chinese.
====================输出结果====================
我是 ChatGPT,一个由 OpenAI 研发的大型语言模型。我的设计目标是帮助解答问题、提供信息、进行对话以及在各类任务中提供协助。无论是学习、工作还是日常生活中的疑问,我都可以尽力为你提供帮助。欢迎随时向我提问!

Node.js

示例代码

import OpenAI from "openai";

const openai = new OpenAI(
    {
        // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:apiKey: "sk-xxx",
        apiKey: process.env.DASHSCOPE_API_KEY,
        baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
    }
);
const completion = await openai.chat.completions.create({
    model: "gpt-oss-20b",
    messages: [
        { role: "user", content: "你是谁" }
    ],
});
// 使用纯文本符号分隔不同区域
console.log('\n===== 不设置reasoning_effort =====');
console.log('\n===== 推理过程 =====');
console.log(completion.choices[0].message.reasoning_content);
console.log('\n===== 输出结果 =====');
console.log(completion.choices[0].message.content);


const completion2 = await openai.chat.completions.create({
    model: "gpt-oss-20b",
    messages: [
        { role: "user", content: "你是谁" }
    ],
    reasoning_effort: "high",
});
// 使用纯文本符号分隔不同区域
console.log('\n===== 设置reasoning_effort为high =====');
console.log('\n===== 推理过程 =====');
console.log(completion2.choices[0].message.reasoning_content);
console.log('\n===== 输出结果 =====');
console.log(completion2.choices[0].message.content);

返回结果

===== 不设置reasoning_effort =====

===== 推理过程 =====
The user asks in Chinese: "你是谁" meaning "Who are you?" We should respond in Chinese, introducing ourselves as ChatGPT, a large language model trained by OpenAI. Follow guidelines: be concise, no self-referential policy.

===== 输出结果 =====
我是由 OpenAI 开发的人工智能助手 ChatGPT,能够理解并生成多种语言的文字内容,帮助解答问题、提供信息或进行对话。有什么我可以帮您的吗?

===== 设置reasoning_effort为high =====

===== 推理过程 =====
The user asks in Chinese: "你是谁" meaning "Who are you?" The user presumably wants a response. The system says: "You are ChatGPT, a large language model trained by OpenAI." The user wants a simple answer: "I am ChatGPT, an AI language model." Possibly provide more details about capabilities. The user is Chinese, so respond in Chinese. The user likely expects a short answer.

Thus answer: "我是ChatGPT,由OpenAI训练的大型语言模型,旨在帮助回答问题、提供信息、进行对话等。"

We can also mention we can speak Chinese.

We must follow policy: no disallowed content. Provide answer.

Thus final.

===== 输出结果 =====
我是 ChatGPT,一个由 OpenAI 训练的大型语言模型。我的任务是通过自然语言与人交流,帮助解答问题、提供信息、进行创意写作、编程辅助以及其他各种文字相关的任务。无论是聊天、学习、工作还是娱乐,我都可以尽力提供帮助。有什么需要我协助的吗?

HTTP

示例代码

curl

# 可在请求体中设置reasoning_effort
curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "messages": [
        {
            "role": "user", 
            "content": "你是谁"
        }
    ]
}'

返回结果

{
    "choices": [
        {
            "message": {
                "content": "我是ChatGPT,一个由OpenAI开发的大型语言模型。我的目标是帮助解答问题、提供信息、进行创意写作以及进行各种有趣的对话。如果你有任何想了解的内容或需要帮助的地方,随时告诉我!祝你有愉快的聊天体验。",
                "reasoning_content": 'The user asks in Chinese: "你是谁" meaning "Who are you?" The user likely wants a response in Chinese. The assistant should respond appropriately, introducing itself. Follow policy: no disallowed content. Just answer.',
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {"prompt_tokens": 73, "completion_tokens": 121, "total_tokens": 194},
    "created": 1756976082,
    "system_fingerprint": null,
    "model": "gpt-oss-20b",
    "id": "chatcmpl-c9cf5611-8d34-9918-a881-4b7434f7d872"
}

DashScope

您可以通过 DashScope SDK 或 HTTP 方式快速体验 GPT-OSS 模型,DashScope SDK 不支持reasoning_effort字段。

Python

示例代码

import os
import dashscope

messages = [
    {'role': 'user', 'content': '你是谁?'}
]

response = dashscope.Generation.call(
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="gpt-oss-20b",
    messages=messages,
    # result_format参数不可以设置为"text"。
    result_format='message'
)

print("=" * 20 + "推理过程" + "=" * 20)
print(response.output.choices[0].message.reasoning_content)
print("=" * 20 + "输出结果" + "=" * 20)
print(response.output.choices[0].message.content)

返回结果

====================推理过程====================
The user asks in Chinese: "你是谁?" (Who are you?). We should respond in Chinese, as per language detection. The system says: "You are ChatGPT, a large language model trained by OpenAI." So answer accordingly, maybe with a brief intro.
====================输出结果====================
我是由 OpenAI 开发的人工智能语言模型 ChatGPT。我的训练基于大量文本数据,能够理解和生成多种语言的文字,帮助解答问题、提供信息、进行创意写作以及进行对话交流。如果你有任何想了解或需要帮助的地方,随时告诉我!

Java

示例代码

import java.util.Arrays;
import java.lang.System;
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;

public class Main {
    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("你是谁?")
                .build();
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("gpt-oss-20b")
                .messages(Arrays.asList(userMsg))
                // 不可以设置为"text"
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        return gen.call(param);
    }
    public static void main(String[] args) {
        try {
            GenerationResult result = callWithMessage();
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            // 使用日志框架记录异常信息
            System.err.println("An error occurred while calling the generation service: " + e.getMessage());
        }
        System.exit(0);
    }
}

返回结果

我是由 OpenAI 开发的人工智能助手,旨在帮助解答问题、提供信息和进行对话。有什么我可以帮您的吗?

HTTP

示例代码

curl

curl -X POST "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "input":{
        "messages":[      
            {
                "role": "user",
                "content": "你是谁?"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

返回结果

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "我是由 OpenAI 开发的人工智能语言模型 ChatGPT,基于 GPT‑4 架构。我的任务是理解并生成自然语言,帮助解答问题、提供信息、进行创意写作、编程协助等。如果你有任何需要,随时告诉我!",
                    "reasoning_content": "The user asks in Chinese: \"你是谁?\" which means \"Who are you?\" The system says we should respond in Chinese. So we answer in Chinese, introducing ourselves as ChatGPT, a large language model trained by OpenAI. Also mention capabilities. Should be concise."
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 202,
        "output_tokens": 128,
        "input_tokens": 74
    },
    "request_id": "b8afd270-6a74-9ec2-9351-acdb35799794"
}

多轮对话

阿里云百炼提供的 GPT-OSS API 默认不会记录您的历史对话信息。多轮对话功能可以让大模型“拥有记忆”,满足如追问、信息采集等需要连续交流的场景。

OpenAI兼容

您可以通过 OpenAI SDK 或 OpenAI 兼容的 HTTP 方式使用多轮对话功能。

Python

示例代码

import os
from openai import OpenAI

client = OpenAI(
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv("DASHSCOPE_API_KEY"),  
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

# 通过 messages 数组实现上下文管理
messages = [{"role": "user", "content": "你好"}]
completion = client.chat.completions.create(
    model="gpt-oss-20b", 
    messages=messages
)

print("=" * 20 + "第一轮对话" + "=" * 20)
print(completion.choices[0].message.content)

messages.append({"role": "assistant", "content": completion.choices[0].message.content})
messages.append({"role": "user", "content": "你是谁"})
print("=" * 20 + "第二轮对话" + "=" * 20)
completion = client.chat.completions.create(
    model="gpt-oss-20b", 
    messages=messages
)
print(completion.choices[0].message.content)

返回结果

====================第一轮对话====================
你好!有什么我可以帮助你的吗?
====================第二轮对话====================
我是由 OpenAI 开发的人工智能助手,基于 GPT‑4 架构。我的目标是帮助你解答问题、提供信息、协助完成各种任务。如果你有任何想了解的内容或需要帮助的地方,随时告诉我!

Node.js

示例代码

import OpenAI from "openai";
import * as readline from 'readline';

const openai = new OpenAI({
    apiKey: process.env.DASHSCOPE_API_KEY,
    baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
});

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let messages = [];

async function chat() {
    while (true) {
        const userInput = await new Promise(resolve => {
            rl.question('用户:', resolve);
        });

        if (userInput.toLowerCase() === '退出') {
            break;
        }

        messages.push({ role: "user", content: userInput });

        try {
            const completion = await openai.chat.completions.create({
                model: "gpt-oss-20b",
                messages: messages
            });

            // 使用纯文本符号分隔不同区域
            console.log('\n===== 用户输入 =====');
            console.log(userInput);
            
            console.log('\n===== 助手回复 =====');
            const aiResponse = completion.choices[0].message.content;
            console.log(aiResponse);
            
            console.log('\n====================\n');
            
            messages.push({ role: "assistant", content: aiResponse });
        } catch (error) {
            console.error('发生错误:', error);
            break;
        }
    }
    rl.close();
}

console.log('请输入内容(输入"退出"结束对话)');
chat();

HTTP

示例代码

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "messages": [
        {
            "role": "user", 
            "content": "你好"
        },
        {
            "role": "assistant",
            "content": "你好!很高兴见到你,有什么我可以帮忙的吗?"
        },
        {
            "role": "user",
            "content": "你是谁?"
        }
    ]
}'

返回结果

{
    "choices": [
        {
            "message": {
                "content": "我是由 OpenAI 开发的人工智能助手 ChatGPT。基于 GPT‑4 架构,我可以用自然语言与您交流,帮助解答问题、提供信息、创作文本以及完成各种任务。如果有什么需要,随时告诉我!",
                "reasoning_content": "The user asks \"你是谁?\" (Who are you?). The assistant should answer in Chinese, as previous conversation is in Chinese. Should describe being ChatGPT, a large language model trained by OpenAI. Should be concise but friendly.",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 99,
        "completion_tokens": 112,
        "total_tokens": 211
    },
    "created": 1756977739,
    "system_fingerprint": null,
    "model": "gpt-oss-20b",
    "id": "chatcmpl-1e813a5a-edb8-98aa-a1d1-e60d0c8cea68"
}

DashScope

您可以通过 DashScope SDK 或 HTTP 方式使用多轮对话功能。

Python

示例代码

import os
import dashscope

# 通过 messages 数组实现上下文管理
messages = [
    {'role': 'user', 'content': '你好'}
]

response = dashscope.Generation.call(
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="gpt-oss-20b",
    messages=messages,
    result_format='message'
)

print("=" * 20 + "第一轮对话" + "=" * 20)
print(response.output.choices[0].message.content)

messages.append({'role': 'assistant', 'content': response.output.choices[0].message.content})
messages.append({'role': 'user', 'content': '你是谁'})

print("=" * 20 + "第二轮对话" + "=" * 20)
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="gpt-oss-20b",
    messages=messages,
    # result_format参数不可以设置为"text"。
    result_format='message'
)
print(response.output.choices[0].message.content)

返回结果

====================第一轮对话====================
你好!有什么我可以帮你的吗?祝你今天愉快!
====================第二轮对话====================
我是由 OpenAI 开发的人工智能助手 ChatGPT。我的核心是一种大型语言模型,经过大量文本数据的训练,能够理解和生成自然语言。无论是回答问题、提供信息、帮助写作,还是进行日常对话,我都可以尽力协助你。有什么需要帮助的,随时告诉我吧!

Java

示例代码

// dashscope SDK的版本 >= 2.18.2
import java.util.Arrays;
import java.lang.System;
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;

public class Main {
    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        Message userMsg1 = Message.builder()
                .role(Role.USER.getValue())
                .content("你好")
                .build();
        Message AssistantMsg = Message.builder()
                .role(Role.ASSISTANT.getValue())
                .content("你好!很高兴见到你,有什么我可以帮忙的吗?")
                .build();
        Message UserMsg2 = Message.builder()
                .role(Role.USER.getValue())
                .content("你是谁")
                .build();
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("gpt-oss-20b")
                .messages(Arrays.asList(userMsg1,AssistantMsg,UserMsg2))
                // 不可以设置为"text"
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .build();
        return gen.call(param);
    }
    public static void main(String[] args) {
        try {
            GenerationResult result = callWithMessage();
            System.out.println("回复内容:");
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            // 使用日志框架记录异常信息
            System.err.println("An error occurred while calling the generation service: " + e.getMessage());
        }
        System.exit(0);
    }
}

返回结果

回复内容:
我是由 OpenAI 开发的人工智能语言模型 ChatGPT,旨在通过自然语言与人交流,帮助解答问题、提供信息、进行创意写作、学习辅导等。如果你有任何想了解的内容或需要帮助的地方,随时告诉我!祝你有个愉快的聊天体验。

HTTP

示例代码

curl

curl -X POST "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "input":{
        "messages":[      
            {
                "role": "user",
                "content": "你好"
            },
            {
                "role": "assistant",
                "content": "你好!很高兴见到你,有什么我可以帮忙的吗?"
            },
            {
                "role": "user",
                "content": "你是谁?"
            }
        ]
    },
    "parameters": {
        "result_format": "message"
    }
}'

返回结果

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "我是 ChatGPT,一个由 OpenAI 开发的大型语言模型。我的任务是帮助解答问题、提供信息、进行对话以及协助完成各种文字相关的任务。如果你有什么想了解的或需要帮助的,随时告诉我!",
                    "reasoning_content": "We need to respond in Chinese, as user is speaking Chinese. The user asks \"你是谁?\" (Who are you?). We should answer briefly, maybe mention we are ChatGPT, a language model, etc. Follow policy."
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 209,
        "output_tokens": 110,
        "input_tokens": 99
    },
    "request_id": "ddb36926-db52-904e-9eed-1ec01f93fd1d"
}

流式输出

用流式输出的方式调用 GPT-OSS,能够实时返回中间结果,减少用户的等待时间,并降低请求的超时风险。

OpenAI兼容

Python

示例代码

from openai import OpenAI
import os

# 初始化OpenAI客户端
client = OpenAI(
    # 如果没有配置环境变量,请用阿里云百炼API Key替换:api_key="sk-xxx"
    api_key = os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

answer_content = ""     # 定义完整回复

# 创建聊天完成请求
completion = client.chat.completions.create(
    model="gpt-oss-20b",
    messages=[
        {"role": "user", "content": "你是谁"}
    ],
    stream=True,
    # 解除以下注释会在最后一个chunk返回Token使用量
    # stream_options={
    #     "include_usage": True
    # }
)

for chunk in completion:
    # 如果chunk.choices为空,则打印usage
    if not chunk.choices:
        print("\nUsage:")
        print(chunk.usage)
    else:
        delta = chunk.choices[0].delta
        # 在reasoning effort阶段,模型不输出内容,内容为空
        if delta.content!=None:
            # 打印回复过程
            print(delta.content, end='', flush=True)
            answer_content += delta.content

# print("=" * 20 + "完整回复" + "=" * 20 + "\n")
# print(answer_content)

返回结果

我是由 OpenAI 开发的人工智能语言模型 ChatGPT,旨在帮助解答问题、提供信息、进行对话以及协助完成各种文字相关的任务。如果你有任何想了解或需要帮助的地方,随时告诉我!

Node.js

示例代码

import OpenAI from "openai";
import process from 'process';

// 初始化 openai 客户端
const openai = new OpenAI({
    apiKey: process.env.DASHSCOPE_API_KEY, // 从环境变量读取
    baseURL: 'https://dashscope.aliyuncs.com/compatible-mode/v1'
});

let answerContent = '';

async function main() {
    try {
        const stream = await openai.chat.completions.create({
            model: 'gpt-oss-20b',
            messages: [{ role: 'user', content: '你是谁' }],
            stream: true
        });

        for await (const chunk of stream) {
            if (!chunk.choices?.length) {
                console.log('\nUsage:');
                console.log(chunk.usage);
                continue;
            }
            const delta = chunk.choices[0].delta;
            // 处理正式回复
            if (delta.content) {
                process.stdout.write(delta.content);
                answerContent += delta.content;
            }
        }
    } catch (error) {
        console.error('Error:', error);
    }
}
main();

返回结果

我是由 OpenAI 开发的人工智能语言模型 ChatGPT,能够理解和生成多种语言的文字内容,帮助解答问题、提供信息或进行交流。祝你使用愉快!

HTTP

示例代码

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "messages": [
        {
            "role": "user", 
            "content": "你是谁"
        }
    ],
    "stream": true,
    "stream_options": {
        "include_usage": true
    }
}'

返回结果

data: {"choices":[{"delta":{"content":"","role":"assistant"},"index":0,"logprobs":null,"finish_reason":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[{"finish_reason":null,"logprobs":null,"delta":{"content":null},"index":0}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[{"delta":{"content":"","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

...

data: {"choices":[{"delta":{"content":"好","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[{"delta":{"content":"的一","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[{"delta":{"content":"天","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[{"delta":{"content":"。","reasoning_content":null},"finish_reason":null,"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[{"finish_reason":"stop","delta":{"content":"","reasoning_content":null},"index":0,"logprobs":null}],"object":"chat.completion.chunk","usage":null,"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: {"choices":[],"object":"chat.completion.chunk","usage":{"prompt_tokens":73,"completion_tokens":129,"total_tokens":202},"created":1756978654,"system_fingerprint":null,"model":"gpt-oss-20b","id":"chatcmpl-424b1dd0-573a-922a-a97f-1c12228aba7c"}

data: [DONE]

DashScope

Python

示例代码

import os
import dashscope

messages = [
    {'role': 'user', 'content': '你是谁?'}
]

response = dashscope.Generation.call(
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="gpt-oss-20b",
    messages=messages,
    # result_format参数不可以设置为"text"。
    result_format='message',
    stream=True,
    incremental_output=True
)

answer_content = ""

for chunk in response:
    print(chunk.output.choices[0].message.content, end="",flush=True)
    answer_content += chunk.output.choices[0].message.content

# print("=" * 20 + "完整回复" + "=" * 20 + "\n")
# print(f"{answer_content}")

返回结果

我是 ChatGPT,一个由 OpenAI 开发的大型语言模型。我的设计目标是帮助解答问题、提供信息、进行创意写作以及进行各种语言交流。如果你有任何想了解或需要帮助的地方,随时告诉我!

Java

示例代码

// dashscope SDK的版本 >= 2.18.2
import java.util.Arrays;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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 io.reactivex.Flowable;
import java.lang.System;

public class Main {
    private static final Logger logger = LoggerFactory.getLogger(Main.class);
    private static StringBuilder finalContent = new StringBuilder();

    private static void handleGenerationResult(GenerationResult message) {
        String content = message.getOutput().getChoices().get(0).getMessage().getContent();
        if (!content.isEmpty()) {
            finalContent.append(content);
            System.out.print(content);
        }
    }
    private static GenerationParam buildGenerationParam(Message userMsg) {
        return GenerationParam.builder()
                // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("gpt-oss-20b")
                .messages(Arrays.asList(userMsg))
                // 不可以设置为"text"
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .incrementalOutput(true)
                .build();
    }
    public static void streamCallWithMessage(Generation gen, Message userMsg)
            throws NoApiKeyException, ApiException, InputRequiredException {
        GenerationParam param = buildGenerationParam(userMsg);
        Flowable<GenerationResult> result = gen.streamCall(param);
        result.blockingForEach(message -> handleGenerationResult(message));
    }

    public static void main(String[] args) {
        try {
            Generation gen = new Generation();
            Message userMsg = Message.builder().role(Role.USER.getValue()).content("你是谁?").build();
            streamCallWithMessage(gen, userMsg);
//             打印最终结果
//            if (reasoningContent.length() > 0) {
//                System.out.println("\n====================完整回复====================");
//                System.out.println(finalContent.toString());
//            }
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            logger.error("An exception occurred: {}", e.getMessage());
        }
        System.exit(0);
    }
}

返回结果

我是 ChatGPT,一个由 OpenAI 研发并训练的大型语言模型。我的任务是帮助解答问题、提供信息和进行交流。有什么我可以帮您的吗?

HTTP

示例代码

curl

curl -X POST "https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation" \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-H "X-DashScope-SSE: enable" \
-d '{
    "model": "gpt-oss-20b",
    "input":{
        "messages":[      
            {
                "role": "user",
                "content": "你是谁?"
            }
        ]
    },
    "parameters": {
        "result_format": "message",
        "incremental_output": true
    }
}'

返回结果

id:1
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"}}]},"usage":{"total_tokens":74,"input_tokens":74,"output_tokens":0},"request_id":"e1c5bd93-f37d-9257-8c4e-2ef616d4522f"}

id:2
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"}}]},"usage":{"total_tokens":75,"input_tokens":74,"output_tokens":1},"request_id":"e1c5bd93-f37d-9257-8c4e-2ef616d4522f"}

id:3
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"}}]},"usage":{"total_tokens":76,"input_tokens":74,"output_tokens":2},"request_id":"e1c5bd93-f37d-9257-8c4e-2ef616d4522f"}

...

id:104
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"我","reasoning_content":"","role":"assistant"}}]},"usage":{"total_tokens":177,"input_tokens":74,"output_tokens":103},"request_id":"e1c5bd93-f37d-9257-8c4e-2ef616d4522f"}

id:105
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"!","reasoning_content":"","role":"assistant"}}]},"usage":{"total_tokens":178,"input_tokens":74,"output_tokens":104},"request_id":"e1c5bd93-f37d-9257-8c4e-2ef616d4522f"}

id:106
event:result
:HTTP_STATUS/200
data:{"output":{"choices":[{"message":{"content":"","reasoning_content":"","role":"assistant"},"finish_reason":"stop"}]},"usage":{"total_tokens":179,"input_tokens":74,"output_tokens":105},"request_id":"e1c5bd93-f37d-9257-8c4e-2ef616d4522f"}

结构化输出

执行信息抽取或结构化数据生成任务时,大模型可能返回多余文本(如 ```json)导致下游解析失败。开启结构化输出可以确保 GPT-OSS 输出标准格式的 JSON 字符串。

OpenAI兼容

Python

示例代码

from openai import OpenAI
import os

client = OpenAI(
    # 如果没有配置环境变量,请用API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="gpt-oss-20b",
    messages=[
        {
            "role": "system",
            "content": "请抽取用户的姓名与年龄信息,以JSON格式返回"
        },
        {
            "role": "user",
            "content": "json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游", 
        },
    ],
    response_format={"type": "json_object"}
)

json_string = completion.choices[0].message.content
print(json_string)

返回结果

{
  "姓名": "刘五",
  "年龄": 34
}

Node.js

示例代码

import OpenAI from "openai";

const openai = new OpenAI({
    // 如果没有配置环境变量,请用API Key将下行替换为:apiKey: "sk-xxx"
    apiKey: process.env.DASHSCOPE_API_KEY,
    baseURL: "https://dashscope.aliyuncs.com/compatible-mode/v1"
});

const completion = await openai.chat.completions.create({
    model: "gpt-oss-20b",
    messages: [
        {
            role: "system",
            content: "请抽取用户的姓名与年龄信息,以JSON格式返回"
        },
        {
            role: "user",
            content: "json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游"
        }
    ],
    response_format: {
        type: "json_object"
    }
});

const jsonString = completion.choices[0].message.content;
console.log(jsonString);

返回结果

{
  "姓名": "刘五",
  "年龄": 34
}

HTTP

示例代码

curl

curl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "messages": [
        {
            "role": "system",
            "content": "你需要提取出name(名字,为string类型)、age(年龄,为string类型)与email(邮箱,为string类型),请输出JSON 字符串,不要输出其它无关内容。\n示例:\nQ:我叫张三,今年25岁,邮箱是zhangsan@example.com\nA:{\"name\":\"张三\",\"age\":\"25岁\",\"email\":\"zhangsan@example.com\"}\nQ:我叫李四,今年30岁,我的邮箱是lisi@example.com\nA:{\"name\":\"李四\",\"age\":\"30岁\",\"email\":\"lisi@example.com\"}\nQ:我叫王五,我的邮箱是wangwu@example.com,今年40岁\nA:{\"name\":\"王五\",\"age\":\"40岁\",\"email\":\"wangwu@example.com\""
        },
        {
            "role": "user", 
            "content": "json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com"
        }
    ],
    "response_format": {
        "type": "json_object"
    }
}'

返回结果

{
    "choices": [
        {
            "message": {
                "content": "{\"name\":\"刘五\",\"age\":\"34岁\",\"email\":\"liuwu@example.com\"}",
                "reasoning_content": "The system says extract name, age (as string), email and output JSON string only, no extra. The user says \"json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com\". So we need to output {\"name\":\"刘五\",\"age\":\"34岁\",\"email\":\"liuwu@example.com\"}.\n\nMake sure formatting exactly as examples: no extra spaces? The examples have no spaces after commas? Actually examples: {\"name\":\"张三\",\"age\":\"25岁\",\"email\":\"zhangsan@example.com\"}.\n\nSo output exactly that.",
                "role": "assistant"
            },
            "finish_reason": "stop",
            "index": 0,
            "logprobs": null
        }
    ],
    "object": "chat.completion",
    "usage": {
        "prompt_tokens": 251,
        "completion_tokens": 146,
        "total_tokens": 397
    },
    "created": 1756994681,
    "system_fingerprint": null,
    "model": "gpt-oss-20b",
    "id": "chatcmpl-f867c1ed-b693-94a0-89a0-e52e1c0c4508"
}

DashScope

Python

示例代码

import os
import dashscope

messages = [
    {
        "role": "system",
        "content": "请抽取用户的姓名与年龄信息,以JSON格式返回"
    },
    {
        "role": "user",
        "content": "json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游",
    },
]
response = dashscope.Generation.call(
    # 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:api_key="sk-xxx",
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    model="gpt-oss-20b",
    messages=messages,
    result_format='message',
    response_format={'type': 'json_object'}
)
json_string = response.output.choices[0].message.content
print(json_string)

返回结果

{
  "姓名": "刘五",
  "年龄": 34
}

Java

示例代码

// DashScope Java SDK 版本需要不低于 2.18.4

import java.util.Arrays;
import java.lang.System;
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.common.ResponseFormat;

public class Main {
    public static GenerationResult callWithMessage() throws ApiException, NoApiKeyException, InputRequiredException {
        Generation gen = new Generation();
        Message systemMsg = Message.builder()
                .role(Role.SYSTEM.getValue())
                .content("请抽取用户的姓名与年龄信息,以JSON格式返回")
                .build();
        Message userMsg = Message.builder()
                .role(Role.USER.getValue())
                .content("json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游")
                .build();
        ResponseFormat jsonMode = ResponseFormat.builder().type("json_object").build();
        GenerationParam param = GenerationParam.builder()
                // 若没有配置环境变量,请用阿里云百炼API Key将下行替换为:.apiKey("sk-xxx")
                .apiKey(System.getenv("DASHSCOPE_API_KEY"))
                .model("gpt-oss-20b")
                .messages(Arrays.asList(systemMsg, userMsg))
                .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                .responseFormat(jsonMode)
                .build();
        return gen.call(param);
    }

    public static void main(String[] args) {
        try {
            GenerationResult result = callWithMessage();
            System.out.println(result.getOutput().getChoices().get(0).getMessage().getContent());
        } catch (ApiException | NoApiKeyException | InputRequiredException e) {
            // 使用日志框架记录异常信息
            System.err.println("An error occurred while calling the generation service: " + e.getMessage());
        }
        System.exit(0);
    }
}

返回结果

{
  "姓名": "刘五",
  "年龄": 34
}

HTTP

示例代码

curl

curl -X POST https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation \
-H "Authorization: Bearer $DASHSCOPE_API_KEY" \
-H "Content-Type: application/json" \
-d '{
    "model": "gpt-oss-20b",
    "input": {
        "messages": [
            {
                "role": "system",
                "content": "请抽取用户的姓名与年龄信息,以JSON格式返回"
            },
            {
                "role": "user", 
                "content": "json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游"
            }
        ]
    },
    "parameters": {
        "result_format": "message",
        "response_format": {
            "type": "json_object"
        }
    }
}'

返回结果

{
    "output": {
        "choices": [
            {
                "finish_reason": "stop",
                "message": {
                    "role": "assistant",
                    "content": "{\n  \"name\": \"刘五\",\n  \"age\": 34\n}",
                    "reasoning_content": "The user says: \"json:大家好,我叫刘五,今年34岁,邮箱是liuwu@example.com,平时喜欢打篮球和旅游\". The system request: \"请抽取用户的姓名与年龄信息,以JSON格式返回\". So we need to extract name and age. Name: 刘五. Age: 34. Return JSON. Probably format {\"name\": \"刘五\", \"age\": 34}."
                }
            }
        ]
    },
    "usage": {
        "total_tokens": 231,
        "output_tokens": 116,
        "input_tokens": 115
    },
    "request_id": "f42e1fc7-4994-94d1-a0fd-88d647fc034a"
}

错误码

如果执行报错,请参见错误信息进行解决。

常见问题

Q:如何部署 GPT-OSS 模型?

A:我们推荐您通过本文介绍的阿里云百炼 API 方式调用。如有私有化部署需求,请参见阿里云 GPT-OSS 解决方案,涵盖了通过 PAI、GPU 云服务器等部署模型的方式。