平台角色对话

更新时间:

平台角色-平台历史

平台角色(平台历史调用流程)

通过系统推荐接口POST v2/api/chat/message/reminder 1、用reminder的接口,输入角色和用户的ID,以及固定文案的文本,写入用户和角色的对话历史。 2、用户A会看到这条历史消息,用户a回复后会再调用对话接口。 3、星尘客户使用用户A的回复调用星尘的对话接口,获取AI回复(星尘自动拼接包含reminder的历史)

image

鉴权

字段

传参方式

类型

必传

描述

示例值

Authorization

header

String

API-Key

Bearer d1**2a

路由配置

备注:SDK已封装好路由关系,通过SDK调用接口,无需设置接口路由配置。

字段

传参方式

类型

必传

描述

示例值

x-fag-appcode

header

String

应用表示,固定为 aca

x-fag-servicename

header

String

请求路由标识,不同接口值不一样,映射管理参考

aca-character-create

x-fag-servicename 与接口映射关系

接口

路径

x-fag-appcode

对话(流式)

/v2/api/chat/send

aca-chat-send-sse

对话(非流式)

/v2/api/chat/send

aca-chat-send

对话消息查询

/v2/api/chat/message/histories

aca-message-history

对话消息评价

/v2/api/chat/rating

aca-message-rating

系统消息推送

/v2/api/chat/reminder

aca-chat-reminder

重置对话

/v2/api/chat/reset

aca-chat-reset

对话

注意:对话场景非为固定角色对话、非固定角色对话、和助手类对话,不用场景对话,入参有所不同,详细差异请参考接口说明-必看。

接口

POST /v2/api/chat/send

入参

请求头参数

字段

传参方式

类型

必传

描述

X-AcA-SSE

header

String

是否开启流式对话

开启 - enable

不开启 - disable

请求体参数

参数

类型

必传

说明

model

string

模型,采用角色已配置的模型,也可传入其他模型名称进行路由

parameters

object

模型设置

parameters.seed

double

当使用xingchen-plus-v2默认模型时,每次调用的seed必须不同。seed生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;当需要复现模型的生成结果时,可以使用相同的种子。seed参数支持无符号64位整数类型。默认值 1683806810

parameters.incrementalOutput

boolean

是否增量输出,若为true,每次流式输出不包含已输出内容,只对流式接口的输出有效

input.messages

array

对话历史(时间顺序正排),固定角色可通过角色配置最大对话轮数。list中的每个元素形式为{"role":角色, "content": 内容}。角色当前可选值:system、user、assistant,function,其中,仅messages[0]中支持rolesystem,user、assistant、function需要交替出现,最后一条为用户提问。

input.aca.botProfile

object

角色设置

input.aca.botProfile.characterId

string

固定角色必填

input.aca.userProfile

object

用户设置

input.aca.userProfile.userId

string

业务系统用户唯一标识,同一用户不能并行对话,必须待上次对话回复结束后才可发起下轮对话

input.aca.context

object

对话上下文设置

input.aca.context.useChatHistory

boolean

必填,且必须为true

input.aca.context.isRegenerate

boolean

是否为重新生成

input.aca.context.queryId

string

重新生成且使用平台历史时,该值必传;不使用平台历史时,该值可以不传

input.aca.context.answerId

string

重新生成场景,若 answerId 不为空,认为是重新生成后的新一轮对话,该 answerId 为最后一轮对话中多个回复中的一条回复消息ID,该条回复会被采纳,该轮对话其他回复消息会被废弃

注意:模型参数parameters优先级从高到低可以通过接口传入、角色属性配置、和平台默认配置三个方式配置。

返回参数

流式调用返回

参数

类型

说明

requestId

string

系统生成的标志本次调用的id。

success

boolean

是否成功返回

errorCode

int

错误码

errorName

string

错误名称

httpStatusCode

int

http错误码

errorMessage

string

错误消息

usage

object

usage.userTokens

int

用户输入的token

usage.inputTokens

int

本次请求输入内容的 token 数目。在打开了搜索的情况下,输入的 token 数目因为还需要添加搜索相关内容支持,所以会超出客户在请求中的输入。

usage.outputTokens

int

模型生成回复转换为Token后的长度。

choices

array

消息体

choices[i].stopReason

string

完成标识符,已完成为 stop,未完成为 “null”

choices[i].messages

array

message.role

string

模型role,固定为assistant

message.content

string

模型生成消息输出

message.meta

object

消息属性

message.meta.hasRisk

boolean

是否存在安全风险,true/false

非流式调用返回

参数

类型

说明

requestId

string

系统生成的标志本次调用的id。

success

boolean

是否成功返回

errorCode

int

错误码

errorName

string

错误名称

httpStatusCode

int

http错误码

errorMessage

string

错误消息

data

object

data.usage

object

usage.userTokens

int

用户输入的token

usage.inputTokens

int

本次请求输入内容的 token 数目。在打开了搜索的情况下,输入的 token 数目因为还需要添加搜索相关内容支持,所以会超出客户在请求中的输入。

usage.outputTokens

int

模型生成回复转换为Token后的长度。

data.choices

array

消息体

choices[i].stopReason

string

完成标识符,已完成为 stop,未完成为 null

choices[i].messages

array

message.role

string

模型role,固定为assistant

message.content

string

模型生成消息输出

message.meta

object

消息属性

message.meta.hasRisk

boolean

是否存在安全风险,true/false

对话历史

对话历史查询

接口

POST /v2/api/chat/message/histories

入参

名称

类型

是否必传

说明

where

object

查询条件对象角色参考下表

where.characterId

string

角色ID

where.userId

string

对话用户ID

where.sessionId

string

会话ID

where.startTime

long

开始时间戳精确到毫秒

where.endTime

long

结束时间戳

where.messageIds

list

消息ID列表

pageNum

int

否(默认1)

分页页码

pageSize

int

否(默认10)

分页大小

orderBy

list

否(默认创建时间倒排)

历史消息排序

返回

名称

类型

说明

messageId

string

消息ID

sessionId

string

会话ID

chatId

string

一次对话ID,一问多答 chatId 相同

messageIssuer

object

不同userType, userId 和 userName表示不同含义,userType 取值:- user - 用户,userId 和 userName 分别表示用户ID和用户名- character - 角色,userId 和 userName 分别表示角色ID和角色名

messageType

string

opening_remarks - 开场白sys_greetings - 系统问候user - 用户提问character - 角色回复chat_description - 对话提示

status

string

历史消息状态normal:正常reset:被重置

content

string

json string

对话历史评价

接口

POST /v2/api/chat/message/rating

入参

名称

类型

是否必传

说明

messageId

string

消息ID

rating

int

评分 0为差评 5为好评

返回

名称

类型

说明

content

boolean

true成功、false失败

系统推荐

接口

POST /v2/api/chat/message/reminder

入参

名称

类型

是否必传

说明

characterId

string

角色的id 角色给用户主动发消息

bizUserId

string

接收消息的用户bizUserId

content

string

提示消息

返回

名称

类型

说明

content

boolean

true成功、false失败

重置对话(清除上下文)

在使用平台对话历史的场景下,每次对话会自动将对话历史作为记忆送给大模型,若要抹去这段记忆,可以通过该接口清除历史对话,开启新会话。

接口

POST /v2/api/chat/reset

入参

名称

类型

是否必传

说明

characterId

string

角色的id

userId

string

接收消息的用户bizUserId

返回

名称

类型

说明

data

boolean

true成功、false失败

平台角色-自定义历史

平台角色(自定义历史调用流程)

通过系统推荐接口POST v2/api/chat/message/reminder 1、星尘客户给他的用户推送运营文案 2、用户A会看到这条历史消息,用户A回复AI角色 3、星尘客户使用自定义历史(需包含运营文案+用户A的回复)调用星尘的对话接口,获取AI回复

image

鉴权

字段

传参方式

类型

必传

描述

示例值

Authorization

header

String

API-Key

Bearer yourAccessKeySecret

路由配置

备注:SDK已封装好路由关系,通过SDK调用接口,无需设置接口路由配置。

字段

传参方式

类型

必传

描述

示例值

x-fag-appcode

header

String

应用表示,固定为 aca

x-fag-servicename

header

String

请求路由标识,不同接口值不一样,映射管理参考

aca-character-create

x-fag-servicename 与接口映射关系

接口

路径

x-fag-appcode

对话(流式)

/v2/api/chat/send

aca-chat-send-sse

对话(非流式)

/v2/api/chat/send

aca-chat-send

对话消息查询

/v2/api/chat/message/histories

aca-message-history

对话消息评价

/v2/api/chat/rating

aca-message-rating

系统消息推送

/v2/api/chat/reminder

aca-chat-reminder

重置对话

/v2/api/chat/reset

aca-chat-reset

角色描述自动生成

/v2/api/character/auto/desc

aca-polling-image

对话

注意:对话场景非为角色对话、和工作流对话,不用场景对话,入参有所不同,详细差异请参考接口说明

接口

POST /v2/api/chat/send

入参

请求头参数

字段

传参方式

类型

必传

描述

X-AcA-SSE

header

String

是否开启流式对话- 开启 - enable- 不开启 - disable

请求体参数

参数

类型

必传

说明

model

string

模型,采用角色已配置的模型,也可传入其他模型名称进行路由

parameters

object

模型设置

parameters.seed

double

**当使用xingchen-plus-v2默认模型时,每次调用的seed必须不同。**seed生成时,随机数的种子,用于控制模型生成的随机性。如果使用相同的种子,每次运行生成的结果都将相同;当需要复现模型的生成结果时,可以使用相同的种子。seed参数支持无符号64位整数类型。默认值 1683806810

parameters.incrementalOutput

boolean

是否增量输出,若为true,每次流式输出不包含已输出内容,只对流式接口的输出有效

input.messages

array

对话历史(按时间正序),可支持自主拼接历史。list中的每个元素形式为{"role":角色, "content": 内容}。角色当前可选值:system、user、assistant,function,其中,仅messages[0]中支持rolesystem,user、assistant需要交替出现,最后一条为用户提问。

input.aca.botProfile

object

角色设置

input.aca.botProfile.characterId

string

固定角色必填

input.aca.userProfile

object

用户设置

input.aca.userProfile.userId

string

业务系统用户唯一标识,同一用户不能并行对话,必须待上次对话回复结束后才可发起下轮对话

input.aca.context

object

对话上下文设置

input.aca.context.useChatHistory

boolean

必填,且必须为false,false代表不使用平台历史

注意:模型参数parameters优先级从高到低可以通过接口传入、角色属性配置、和平台默认配置三个方式配置。

返回参数

流式调用返回

参数

类型

说明

requestId

string

系统生成的标志本次调用的id。

success

boolean

是否成功返回

errorCode

int

错误码

errorName

string

错误名称

httpStatusCode

int

http错误码

errorMessage

string

错误消息

usage

object

usage.userTokens

int

用户输入的token

usage.inputTokens

int

本次请求输入内容的 token 数目。在打开了搜索的情况下,输入的 token 数目因为还需要添加搜索相关内容支持,所以会超出客户在请求中的输入。

usage.outputTokens

int

模型生成回复转换为Token后的长度。

choices

array

消息体

choices[i].stopReason

string

完成标识符,已完成为 stop,未完成为 “null”

choices[i].messages

array

message.role

string

模型role,固定为assistant

message.content

string

模型生成消息输出

message.meta

object

消息属性

message.meta.hasRisk

boolean

是否存在安全风险,true/false

非流式调用返回

参数

类型

说明

requestId

string

系统生成的标志本次调用的id。

success

boolean

是否成功返回

errorCode

int

错误码

errorName

string

错误名称

httpStatusCode

int

http错误码

errorMessage

string

错误消息

data

object

data.usage

object

usage.userTokens

int

用户输入的token

usage.inputTokens

int

本次请求输入内容的 token 数目。在打开了搜索的情况下,输入的 token 数目因为还需要添加搜索相关内容支持,所以会超出客户在请求中的输入。

usage.outputTokens

int

模型生成回复转换为Token后的长度。

data.choices

array

消息体

choices[i].stopReason

string

完成标识符,已完成为 stop,未完成为 null

choices[i].messages

array

message.role

string

模型role,固定为assistant

message.content

string

模型生成消息输出

message.meta

object

消息属性

message.meta.hasRisk

boolean

是否存在安全风险,true/false

对话历史

对话历史查询

接口

POST /v2/api/chat/message/histories

入参

名称

类型

是否必传

说明

where

object

查询条件对象角色参考下表

where.characterId

string

角色ID

where.userId

string

对话用户ID

where.sessionId

string

会话ID

where.startTime

long

开始时间戳精确到毫秒

where.endTime

long

结束时间戳

where.messageIds

list

消息ID列表

pageNum

int

否(默认1)

分页页码

pageSize

int

否(默认10)

分页大小

orderBy

list

否(默认创建时间倒排)

历史消息排序

返回

名称

类型

说明

messageId

string

消息ID

sessionId

string

会话ID

chatId

string

一次对话ID,一问多答 chatId 相同

messageIssuer

object

不同userType, userId 和 userName表示不同含义,userType 取值:- user - 用户,userId 和 userName 分别表示用户ID和用户名- character - 角色,userId 和 userName 分别表示角色ID和角色名

messageType

string

opening_remarks - 开场白sys_greetings - 系统问候user - 用户提问character - 角色回复chat_description - 对话提示

status

string

历史消息状态normal:正常reset:被重置

content

string

json string

对话历史评价

接口

POST /v2/api/chat/message/rating

入参

名称

类型

是否必传

说明

messageId

string

消息ID

rating

int

评分 0为差评 5为好评

返回

名称

类型

说明

content

boolean

true成功、false失败

系统推荐

接口

POST v2/api/chat/message/reminder

入参

名称

类型

是否必传

说明

characterId

string

角色的id 角色给用户主动发消息

bizUserId

string

接收消息的用户bizUserId

content

string

提示消息

返回

名称

类型

说明

content

boolean

true成功、false失败

重置对话

在不使用平台对话历史的场景下,如果需要重置对话,则传入新的对话历史即可。

示例参考

角色对话-平台历史

说明

使用平台保存的历史记录继续对话

调用示例

curl --location \
 'https://nlp.aliyuncs.com/v2/api/chat/send' \
 --header 'Expect: '  \
 --header 'Content-Type: application/json' \
 --header 'X-AcA-DataInspection: enable' \
 --header 'x-fag-servicename: aca-chat-send' \
 --header 'x-fag-appcode: aca' \
 --header 'Authorization: Bearer {YOUR_API_KEY}' \
 --data '{
            "input": {
                "messages": [
                    {
                        "name":"小明",
                        "role":"user",
                        "content":"你有几个闺蜜?"
                    }
                ],
                "aca": {
                    "botProfile": {
                        "characterId": "c39797a35ad243f1a85baaa6e1ec37e0"
                    },
                    "userProfile": {
                        "userId": "123456789"
                        "basicInfo": ""
                    },
                    "context": {
                        "useChatHistory": true,
                    }
                }
            }
              
        }'
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

/**
 * API名称:平台角色对话
 * 环境要求:Java 17及以上
 */
public class Example {
    private static final String URL = "https://nlp.aliyuncs.com/v2/api/chat/send";
    private static final String API_KEY = "Bearer {YOUR_API_KEY}";

    private static final String jsonBody = """
        {
            "input": {
                "messages": [
                    {
                        "name":"小明",
                        "role":"user",
                        "content":"你有几个闺蜜?"
                    }
                ],
                "aca": {
                    "botProfile": {
                        "characterId": "c39797a35ad243f1a85baaa6e1ec37e0"
                    },
                    "userProfile": {
                        "userId": "123456789"
                    },
                    "context": {
                        "useChatHistory": true,
                    }
                }
            }
        }
        """;

    public static void main(String[] args) throws Exception {
        // 非流式调用
        nonStreamingCall();

        // 流式调用
        streamingCall();
    }

    private static void nonStreamingCall() throws Exception {
        System.out.println("=== 非流式调用示例 ===");

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(URL))
                .headers(
                        "Authorization", API_KEY,
                        "X-AcA-DataInspection", "enable",
                        "x-fag-servicename", "aca-chat-send",
                        "x-fag-appcode", "aca",
                        "Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                .build();

        // 同步调用
        HttpResponse<String> response = client.send(
                request,
                HttpResponse.BodyHandlers.ofString()
        );

        String responseBody = response.body();
        System.out.println("响应数据: " + responseBody);
    }

    private static void streamingCall() {
        System.out.println("\n=== 流式调用示例 ===");

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(URL))
                .headers(
                        "Authorization", API_KEY,
                        "X-AcA-DataInspection", "enable",
                        "X-AcA-SSE", "enable",
                        "x-fag-servicename", "aca-chat-send-sse",
                        "x-fag-appcode", "aca",
                        "Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                .build();

        // 异步处理 SSE 流
        CompletableFuture<Void> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofLines())
                .thenApply(HttpResponse::body)
                .thenAccept(stream -> {
                    stream.forEach(line -> {
                        System.out.println("流式响应数据: " + line);
                    });
                });

        // 保持主线程等待
        future.join();
    }
}
import requests

URL = "https://nlp.aliyuncs.com/v2/api/chat/send"

# API名称:平台角色对话
# 环境要求:python3.10及以上
def call(api_key):
    headers = {
        "Content-Type": "application/json",
        "x-fag-servicename": "aca-chat-send",
        # "X-AcA-SSE": "enable", # 流式调用开启此配置
        "x-fag-appcode": "aca",
        "Authorization": f"Bearer {api_key}",
        "X-AcA-DataInspection": "enable"
    }

    payload = {
        "input": {
            "messages": messages,
            "aca": {
                "botProfile": {
                    "characterId": "c39797a35ad243f1a85baaa6e1ec37e0"
                },
                "userProfile": {
                    "userId": "123456789"
                },
                "context": {
                    "useChatHistory": True,
                }
            }
        }
    }

    response = requests.post(URL, json=payload, headers=headers)
    # 逐行打印原始响应内容
    for line in response.iter_lines():
        if line:
            print(line.decode('utf-8'))
    # 检查响应状态,如有错误则抛出异常
    response.raise_for_status()
    return response


if __name__ == "__main__":
    api_key = "{YOUR_API_KEY}"
    messages = [
        {
            "name": "小明",
            "role": "user",
            "content": "你有几个闺蜜?"
        }
    ]

    try:
        response = call(api_key)
    except requests.HTTPError as e:
        print(f"请求出错: {e}")
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

// API名称:平台角色对话
// 环境要求:go 1.20及以上

const URL = "https://nlp.aliyuncs.com/v2/api/chat/send"

func call(messages []map[string]interface{}, apiKey string) (*http.Response, error) {
    payload := map[string]interface{}{
        "input": map[string]interface{}{
            "messages": messages,
            "aca": map[string]interface{}{
                "botProfile": map[string]interface{}{
                    "characterId": "c39797a35ad243f1a85baaa6e1ec37e0",
                },
                "userProfile": map[string]interface{}{
                    "userId":    "123456789",
                },
                "context": map[string]interface{}{
                    "useChatHistory": true,
                },
            },
        },
    }

    payloadBytes, err := json.Marshal(payload)
    if err != nil {
        return nil, err
    }

    req, err := http.NewRequest("POST", URL, bytes.NewBuffer(payloadBytes))
    if err != nil {
        return nil, err
    }

    req.Header.Set("Content-Type", "application/json")
    //req.Header.Set("X-AcA-SSE", "enable") // 流式调用开启此配置
    req.Header.Set("x-fag-servicename", "aca-chat-send")
    req.Header.Set("x-fag-appcode", "aca")
    req.Header.Set("Authorization", "Bearer "+apiKey)
    req.Header.Set("X-AcA-DataInspection", "enable")
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }

    // 逐行打印原始响应内容
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("请求出错,状态码:%d", resp.StatusCode)
    }

    return resp, nil
}

func main() {
    messages := []map[string]interface{}{
        {
            "name":    "小明",
            "role":    "user",
            "content": "你有几个闺蜜?",
        },
    }

    apiKey := "{YOUR_API_KEY}"

    _, err := call(messages, apiKey)
    if err != nil {
        fmt.Printf("请求出错: %v\n", err)
    }
}

返回示例

{
    "requestId": "576041ab-240c-463a-9d6e-4f57eaea5951",
    "code": 200,
    "data": {
        "requestId": "576041ab-240c-463a-9d6e-4f57eaea5951",
        "choices": [
            {
                "messages": [
                    {
                        "name": "小婉",
                        "roleId": "c39797a35ad243f1a85baaa6e1ec37e0",
                        "role": "assistant",
                        "content": "你……你故意的吧!【愤怒】",
                        "finishReason": "stop",
                        "useMessage": true,
                        "validMessage": true,
                        "functionMessage": false,
                        "tempMessage": false
                    }
                ],
                "stopReason": "stop"
            }
        ],
        "usage": {
            "outputTokens": 10,
            "inputTokens": 1460,
            "userTokens": 4,
            "pluginTokens": 0,
            "cachedTokens": 0
        },
        "context": {
            "chatRoomId": 72536669,
            "sessionId": "ea8174b798554e7e8bd4f20872429923",
            "chatId": "fab7bf3e39024da49c89e1a5e9ed0514",
            "answerId": "ec397019cc9540569d69f9f15bd417f9",
            "messageId": "ec397019cc9540569d69f9f15bd417f9",
            "queryId": "70b3bbef65a247c09424bd2988d36d4f",
            "replyMessageId": "70b3bbef65a247c09424bd2988d36d4f",
            "enableDataInspection": true,
            "isSave": true,
            "requestId": "576041ab-240c-463a-9d6e-4f57eaea5951",
            "modelRequestId": "6ba75834-a3c0-9940-808e-2283f88cfe8a",
            "characterPk": 157,
            "characterName": "小婉",
            "characterId": "c39797a35ad243f1a85baaa6e1ec37e0",
            "modelName": "xingchen-plus-v2",
            "origin": "pass_v2",
            "bizSrc": "PAAS",
            "ext": "chat",
            "bizUserId": "123456789",
            "chatLockKey": "chat_5ed33fdb8d9d4d1489e44efb5c41312b_123456789_c39797a35ad243f1a85baaa6e1ec37e0",
            "resultCount": 1,
            "isGroupChat": false
        },
        "stop": true
    },
    "success": true
}

角色对话-自定义历史

说明

不使用平台历史记录,用户自行保存对话历史记录,将自定义历史记录拼接到上下文,useChatHistory设置为 false。

调用示例

curl --location \
 'https://nlp.aliyuncs.com/v2/api/chat/send' \
 --header 'Expect: '  \
 --header 'Content-Type: application/json' \
 --header 'X-AcA-DataInspection: enable' \
 --header 'x-fag-servicename: aca-chat-send' \
 --header 'x-fag-appcode: aca' \
 --header 'Authorization: Bearer {YOUR_API_KEY}' \
 --data '{
            "input": {
                "messages": [
                    {
                        "name":"小明",
                        "role":"user",
                        "content":"你叫什么名字"
                    },
                    {
                        "name":"小婉",
                        "role":"assistant",
                        "content":"我叫小婉啊。"
                    },
                    {
                        "name":"小明",
                        "role":"user",
                        "content":"你今年多大"
                    },
                    {
                        "name":"小婉",
                        "role":"assistant",
                        "content":"我今年17岁了。"
                    },
                    {
                        "name":"小明",
                        "role":"user",
                        "content":"你有几个闺蜜?"
                    }
                ],
                "aca": {
                    "botProfile": {
                        "characterId": "c39797a35ad243f1a85baaa6e1ec37e0"
                    },
                    "userProfile": {
                        "userId": "123456789"
                    },
                    "context": {
                      "useChatHistory": false
                    }
                }
            }
        }'
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.concurrent.CompletableFuture;

/**
 * API名称:平台角色对话-自定义历史记录
 * 环境要求:Java 17及以上
 */
public class Example {
    private static final String URL = "https://nlp.aliyuncs.com/v2/api/groupchat/send";
    private static final String API_KEY = "Bearer {YOUR_API_KEY}";

    private static final String jsonBody = """
        {
            "input": {
                "messages": [
                    {
                      "name":"小明",
                      "role":"user",
                      "content":"你叫什么名字"
                    },
                    {
                      "name":"小婉",
                      "role":"assistant",
                      "content":"我叫小婉啊。"
                    },
                    {
                      "name":"小明",
                      "role":"user",
                      "content":"你今年多大"
                    },
                    {
                      "name":"小婉",
                      "role":"assistant",
                      "content":"我今年17岁了。"
                    },
                    {
                      "name":"小明",
                      "role":"user",
                      "content":"你有几个闺蜜?"
                    }
                ],
                "aca": {
                    "botProfile": {
                        "characterId": "c39797a35ad243f1a85baaa6e1ec37e0"
                    },
                    "userProfile": {
                        "userId": "123456789"
                    },
                    "context": {
                        "useChatHistory": false,
                    }
                }
            }
        }
        """;

    public static void main(String[] args) throws Exception {
        // 非流式调用
        nonStreamingCall();

        // 流式调用
        streamingCall();
    }

    private static void nonStreamingCall() throws Exception {
        System.out.println("=== 非流式调用示例 ===");

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(URL))
                .headers(
                        "Authorization", API_KEY,
                        "X-AcA-DataInspection", "enable",
                        "x-fag-servicename", "aca-chat-send",
                        "x-fag-appcode", "aca",
                        "Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                .build();

        // 同步调用
        HttpResponse<String> response = client.send(
                request,
                HttpResponse.BodyHandlers.ofString()
        );

        String responseBody = response.body();
        System.out.println("响应数据: " + responseBody);
    }

    private static void streamingCall() {
        System.out.println("\n=== 流式调用示例 ===");

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(URL))
                .headers(
                        "Authorization", API_KEY,
                        "X-AcA-DataInspection", "enable",
                        "X-AcA-SSE", "enable",
                        "x-fag-servicename", "aca-chat-send-sse",
                        "x-fag-appcode", "aca",
                        "Content-Type", "application/json")
                .POST(HttpRequest.BodyPublishers.ofString(jsonBody))
                .build();

        // 异步处理 SSE 流
        CompletableFuture<Void> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofLines())
                .thenApply(HttpResponse::body)
                .thenAccept(stream -> {
                    stream.forEach(line -> {
                        System.out.println("流式响应数据: " + line);
                    });
                });

        // 保持主线程等待
        future.join();
    }
}
import requests

URL = "https://nlp.aliyuncs.com/v2/api/chat/send"

# API名称:平台角色对话-自定义历史记录
# 环境要求:python3.10及以上
def call(api_key):
    headers = {
        "Content-Type": "application/json",
        "x-fag-servicename": "aca-chat-send",
        # "X-AcA-SSE": "enable", # 流式调用开启此配置
        "x-fag-appcode": "aca",
        "Authorization": f"Bearer {api_key}",
        "X-AcA-DataInspection": "enable"
    }

    payload = {
        "input": {
            "messages": messages,
            "aca": {
                "botProfile": {
                    "characterId": "c39797a35ad243f1a85baaa6e1ec37e0"
                },
                "userProfile": {
                    "userId": "123456789"
                },
                "context": {
                    "useChatHistory": False,
                }
            }
        }
    }

    response = requests.post(URL, json=payload, headers=headers)
    # 逐行打印原始响应内容
    for line in response.iter_lines():
        if line:
            print(line.decode('utf-8'))
    # 检查响应状态,如有错误则抛出异常
    response.raise_for_status()
    return response


if __name__ == "__main__":
    api_key = "{YOUR_API_KEY}"
    messages = [
        {
            "name":"小明",
            "role":"user",
            "content":"你叫什么名字"
        },
        {
            "name":"小婉",
            "role":"assistant",
            "content":"我叫小婉啊。"
        },
        {
            "name":"小明",
            "role":"user",
            "content":"你今年多大"
        },
        {
            "name":"小婉",
            "role":"assistant",
            "content":"我今年17岁了。"
        },
        {
            "name":"小明",
            "role":"user",
            "content":"你有几个闺蜜?"
        }
    ]

    try:
        response = call(api_key)
    except requests.HTTPError as e:
        print(f"请求出错: {e}")
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

// API名称:平台角色对话
// 环境要求:go 1.20及以上

const URL = "https://nlp.aliyuncs.com/v2/api/chat/send"

func call(messages []map[string]interface{}, apiKey string) (*http.Response, error) {
    payload := map[string]interface{}{
        "input": map[string]interface{}{
            "messages": messages,
            "aca": map[string]interface{}{
                "botProfile": map[string]interface{}{
                    "characterId": "c39797a35ad243f1a85baaa6e1ec37e0",
                },
                "userProfile": map[string]interface{}{
                    "userId":    "123456789",
                },
                "context": map[string]interface{}{
                    "useChatHistory": false,
                },
            },
        },
    }

    payloadBytes, err := json.Marshal(payload)
    if err != nil {
        return nil, err
    }

    req, err := http.NewRequest("POST", URL, bytes.NewBuffer(payloadBytes))
    if err != nil {
        return nil, err
    }

    req.Header.Set("Content-Type", "application/json")
    //req.Header.Set("X-AcA-SSE", "enable") // 流式调用开启此配置
    req.Header.Set("x-fag-servicename", "aca-chat-send")
    req.Header.Set("x-fag-appcode", "aca")
    req.Header.Set("Authorization", "Bearer "+apiKey)
    req.Header.Set("X-AcA-DataInspection", "enable")
    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        return nil, err
    }

    // 逐行打印原始响应内容
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))

    if resp.StatusCode != http.StatusOK {
        return nil, fmt.Errorf("请求出错,状态码:%d", resp.StatusCode)
    }

    return resp, nil
}

func main() {
    messages := []map[string]interface{}{
        {
            "name":    "小明",
            "role":    "user",
            "content": "你叫什么名字",
        },
        {
            "name":    "小婉",
            "role":    "assistant",
            "content": "我叫小婉啊。",
        },
        {
            "name":    "小明",
            "role":    "user",
            "content": "你今年多大",
        },
        {
            "name":    "小婉",
            "role":    "assistant",
            "content": "我今年17岁了。",
        },
        {
            "name":    "小明",
            "role":    "user",
            "content": "你有几个闺蜜?",
        },
    }

    apiKey := "YOUR_API_KEY"

    _, err := call(messages, apiKey)
    if err != nil {
        fmt.Printf("请求出错: %v\n", err)
    }
}

返回示例

{
    "requestId": "d9b4e665-49fb-4ce5-9752-184cd0328103",
    "code": 200,
    "data": {
        "requestId": "d9b4e665-49fb-4ce5-9752-184cd0328103",
        "choices": [
            {
                "messages": [
                    {
                        "name": "小婉",
                        "roleId": "c39797a35ad243f1a85baaa6e1ec37e0",
                        "role": "assistant",
                        "content": "我有三个闺蜜,我们经常一起出去玩。",
                        "finishReason": "stop",
                        "tempMessage": false,
                        "useMessage": true,
                        "validMessage": true,
                        "functionMessage": false
                    }
                ],
                "stopReason": "stop"
            }
        ],
        "usage": {
            "outputTokens": 11,
            "inputTokens": 1157,
            "userTokens": 4,
            "pluginTokens": 0,
            "cachedTokens": 0
        },
        "context": {
            "chatRoomId": 72536669,
            "sessionId": "f74dbfcbe9ea41fc8ba5e732a12e0970",
            "chatId": "3e867a59922f457984f7a4c3c5fc70f7",
            "answerId": "64430e6754644690a8d8c51efee16b61",
            "messageId": "64430e6754644690a8d8c51efee16b61",
            "queryId": "2ab073dbd8a04ddaa8316e67c3a22d50",
            "replyMessageId": "2ab073dbd8a04ddaa8316e67c3a22d50",
            "enableDataInspection": true,
            "isSave": true,
            "requestId": "d9b4e665-49fb-4ce5-9752-184cd0328103",
            "modelRequestId": "b2780bd5-974e-9e82-8d29-27c027a273c9",
            "characterPk": 157,
            "characterName": "小婉",
            "characterId": "c39797a35ad243f1a85baaa6e1ec37e0",
            "modelName": "xingchen-plus-v2",
            "origin": "pass_v2",
            "bizSrc": "PAAS",
            "ext": "chat",
            "bizUserId": "123456789",
            "chatLockKey": "chat_5ed33fdb8d9d4d1489e44efb5c41312b_123456789_c39797a35ad243f1a85baaa6e1ec37e0",
            "resultCount": 1,
            "isGroupChat": false
        },
        "stop": true
    },
    "success": true
}