更新时间:2026-07-29 GMT+08:00

多轮对话

chat.completions接口是无状态的,不会存储历史对话。为了实现多轮对话,模型需要在每次请求时,将历史信息都放在messages中,并通过role字段设置,让模型了解之前不同角色的不同对话内容(系统消息、用户消息、模型回复的消息),以便进行主题相关的延续性对话。

表1 单轮对话与多轮对话的messages对比

单轮对话

多轮对话

"messages": 
    [
     {"role": "system", "content": "You are a helpful assistant."},
     {"role": "user", "content": "9.11和9.8哪个大?"}
    ]
"messages": 
    [
       {"role": "system", "content": "You are a helpful assistant."},
       {"role": "user", "content": "9.11和9.8哪个大?"},
       {"role": "assistant", "content": "9.8更大"},
        {"role": "user", "content": "它们相加等于多少?"}
    ]

API说明

模型调用的完整参数列表请见对话Chat/Post

前提条件

  • 已在模型推理 > 在线推理 > 预置服务页签开通预置服务。详情请见开通MaaS预置服务
  • (可选)如果需要控制服务调用流量,可提前创建自定义接入点,详情请参见创建自定义接入点

快速入门

以下为多轮对话的示例代码,可通过model参数替换模型,model参数详情请参见文本生成

思考模式下,reasoning_content是模型的思考内容,多轮对话场景下,不应作为输入。如果在输入的messages数组中包含此字段,将被忽略,不作为模型输入。进行多轮对话时,应只保留上一轮模型返回的role和content字段。

import requests
import json
if __name__ == '__main__':
    url = "https://api-ap-southeast-1.modelarts-maas.com/v2/chat/completions"  # API地址
    api_key = "MAAS_API_KEY"  # 把MAAS_API_KEY替换成已获取的API Key
    # Send request.
    headers = {
        'Content-Type': 'application/json',
        'Authorization': f'Bearer {api_key}'
    }
    data = {
         "model": "glm-5.2",  # model参数
         "messages": [
             {"role": "system", "content": "You are a helpful assistant."},
             {"role": "user", "content": "9.11和9.8哪个大?"},
             {"role": "assistant", "content": "9.8更大"},
             {"role": "user", "content": "它们相加等于多少?"}
         ]
     }
    response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)
    # Print result.
    print(response.status_code)
    print(response.text)
模型返回的content:
它们相加等于18.91。
curl -X POST "https://api-ap-southeast-1.modelarts-maas.com/v2/chat/completions" \   
-H "Content-Type: application/json" \   
-H "Authorization: Bearer $MAAS_API_KEY" \   
-d '{     
    "model": "glm-5.2",     
    "messages": [       
        {"role": "system", "content": "You are a helpful assistant."},     
        {"role": "user", "content": "9.11和9.8哪个大?"}, 
        {"role": "assistant", "content": "9.8更大"},     
        {"role": "user", "content": "它们相加等于多少?"}
    ]
}'
模型返回的content:
它们相加等于18.91。

建议JDK版本为15+。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ChatCompletionsExample {
    public static void main(String[] args) {
        // 接口地址
        String apiUrl =  "https://api-ap-southeast-1.modelarts-maas.com/v2/chat/completions";
        // 把MAAS_API_KEY替换成已获取的API Key
        String apiKey = "MAAS_API_KEY";
        // 替换为你要调用的模型名称,例如 "deepseek-v3.2" 等
        String modelName = "glm-5.2";
        // 构造请求体
        String requestBody = String.format(
                """
                        {
                            "model": "%s",
                            "messages": [
                                {"role": "system", "content": "You are a helpful assistant."},
                                {"role": "user", "content": "9.11和9.8哪个大?"},
                                {"role": "assistant", "content": "9.8更大"},
                                {"role": "user", "content": "它们相加等于多少?"}
                            ]
                        }""", modelName);
        // 创建 HttpClient
        HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(10))
                .build();
        // 创建请求
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(apiUrl))
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + apiKey)
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();
        try {
            // 发送请求并打印结果
            HttpResponse<String> response = client.send(
                    request, HttpResponse.BodyHandlers.ofString());
            System.out.println("HTTP Status: " + response.statusCode());
            System.out.println("Response Body:\n" + response.body());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}  
模型返回的content:
它们相加等于18.91。

设置模型回答长度限制

多轮对话场景下,随着对话轮数的增加,每次调用消耗的Token数量也会增加,从而增加了使用成本。

这种情况下,可在请求时设置max_tokens字段明确限制模型生成的最大token数量,来限制模型回答长度。各模型的max_tokens取值可参考模型详情页的最大输出长度

下面是设置模型回答长度限制的示例代码,可通过model参数替换模型,model参数详情请参见文本生成

import requests 
import json  
if __name__ == '__main__':     
    url =   # API地址     
    api_key = "MAAS_API_KEY"  # 把MAAS_API_KEY替换成已获取的API Key      
    # Send request.     
    headers = {         
        'Content-Type': 'application/json',         
        'Authorization': f'Bearer {api_key}'     
    }     
    data = {         
         "model": "glm-5.2",  # model参数         
         "messages": [
             {"role": "system", "content": "You are a helpful assistant." },             
             {"role": "user","content": "你好" }         
         ],
         "max_tokens": 1024
     }     
    response = requests.post(url, headers=headers, data=json.dumps(data), verify=False)      
    # Print result.     
    print(response.status_code)     
    print(response.text)
curl -X POST  \   
-H "Content-Type: application/json" \   
-H "Authorization: Bearer $MAAS_API_KEY" \   
-d '{     
    "model": "glm-5.2",     
    "messages": [       
        {"role": "system", "content": "You are a helpful assistant."},     
        {"role": "user", "content": "你好"}    
    ],
    "max_tokens": 1024
}'

建议JDK版本为15+。

import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.time.Duration;
public class ChatCompletionsExample {
    public static void main(String[] args) {
        // 接口地址
        String apiUrl =  "https://api-ap-southeast-1.modelarts-maas.com/v2/chat/completions";
        // 把MAAS_API_KEY替换成已获取的API Key
        String apiKey = "MAAS_API_KEY";
        // 替换为你要调用的模型名称,例如 "deepseek-v3.2" 等
        String modelName = "glm-5.2";
        // 构造请求体
        String requestBody = String.format(
                """
                        {
                            "model": "%s",
                            "messages": [
                                {"role": "system", "content": "You are a helpful assistant."},
                                {"role": "user", "content": "你好"}
                            ],
                            "max_tokens": 1024
                        }""", modelName);
        // 创建 HttpClient
        HttpClient client = HttpClient.newBuilder()
                .connectTimeout(Duration.ofSeconds(10))
                .build();
        // 创建请求
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(apiUrl))
                .header("Content-Type", "application/json")
                .header("Authorization", "Bearer " + apiKey)
                .POST(HttpRequest.BodyPublishers.ofString(requestBody))
                .build();
        try {
            // 发送请求并打印结果
            HttpResponse<String> response = client.send(
                    request, HttpResponse.BodyHandlers.ofString());
            System.out.println("HTTP Status: " + response.statusCode());
            System.out.println("Response Body:\n" + response.body());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}  

错误码

模型调用过程中,如有报错,请参考错误码排查并处理。