工作流接口

更新时间:

鉴权

字段

传参方式

类型

必传

描述

示例值

Authorization

header

String

API-Key

Bearer d1**2a

路由配置

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

字段

传参方式

类型

必传

描述

示例值

x-fag-appcode

header

String

应用表示,固定为 aca

aca

x-fag-servicename

header

String

请求路由标识,不同接口值不一样,参考servicename 与接口映射关系

aca-flow-chat-send-sse

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

接口名称

PATH

x-fag-servicename的值

工作流对话(流式)

/v2/api/chat/send

aca-flow-chat-send-sse

工作流对话(非流式)

/v2/api/chat/send

aca-flow-chat-send

工作流对话

说明

当前仅支持在星尘平台创建的服务助手角色进行对话。

接口

POST /v2/api/chat/send

入参

请求头参数

字段

传参方式

类型

必传

描述

X-AcA-SSE

header

String

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

x-fag-appcode

header

String

应用标识,固定为 aca

x-fag-servicename

header

String

请求路由标识,不同接口值不一样,参考上方路由配置中的 x-fag-servicename 与接口映射关系

请求体参数

参数

类型

必传

说明

messages

array

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

botProfile

object

角色设置

botProfile.characterId

string

固定角色必填

userProfile

object

用户设置

userProfile.userId

string

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

context

object

对话上下文设置

context.useChatHistory

boolean

是否使用平台历史

context.startParams

object

开始节点的入参变量

返回参数

流式调用返回

参数

类型

说明

requestId

string

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

success

boolean

是否成功返回

errorCode

int

错误码

errorName

string

错误名称

httpStatusCode

int

http错误码

errorMessage

string

错误消息

flowUsage

list

flowUsage[i].modelName

string

模型名称

flowUsage[i].inputTokens

int

本次请求输入内容的 token 数目。

flowUsage[i].outputTokens

int

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

choices

array

消息体

choices[i].messages

array

choices[i].messages[i].finishReason

string

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

choices[i].messages[i].role

string

模型role,固定为assistant

choices[i].messages[i].roleId

string

角色id

choices[i].messages[i].content

string

模型生成消息输出

choices[i].messages[i].name

string

角色名称

非流式调用返回

参数

类型

说明

requestId

string

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

success

boolean

是否成功返回

errorCode

int

错误码

errorName

string

错误名称

httpStatusCode

int

http错误码

errorMessage

string

错误消息

data

object

data.flowUsage

list

data.flowUsage[i].modelName

string

模型名称

data.flowUsage[i].inputTokens

int

本次请求输入内容的 token 数目。

data.flowUsage[i].outputTokens

int

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

data.choices

array

消息体

data.choices[i].messages

array

data.choices[i].messages[i].finishReason

string

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

data.choices[i].messages[i].role

string

模型role,固定为assistant

data.choices[i].messages[i].roleId

string

角色id

data.choices[i].messages[i].content

string

模型生成消息输出

data.choices[i].messages[i].name

string

角色名称

示例参考

工作流对话调用示例

调用示例

curl --location "https://nlp.aliyuncs.com/v2/api/chat/send" \
  -H "Authorization: Bearer {YOUR_API_KEY}" \
  -H "X-AcA-DataInspection: enable" \
  -H "X-AcA-SSE: enable" \
  -H "x-fag-servicename: aca-flow-chat-send-sse" \
  -H "x-fag-appcode: aca" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "role": "user",
        "content": "(心中暗自决定)这是我最后一次对你说这样的话了。"
      },
      {
        "role": "assistant",
        "content": "(惊讶地抬头)哦?是什么话呢?"
      },
      {
        "role": "user",
        "content": "今天我想去运动,告诉我运动的好处"
      }
    ],
    "botProfile": {
      "characterId": "aa7b98327d564d49a997ec67bfdaf68e"
    },
    "userProfile": {
      "userId": "123456",
      "basicInfo": "df"
    },
    "scenario": {
      "description": ""
    },
    "context": {
      "useChatHistory": true
    }
  }'
/**
 * 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}";

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

        // 流式调用
//        streamingCall();
    }

    private static void nonStreamingCall() throws Exception {
        System.out.println("=== 非流式调用示例 ===");
        // characterId 填写服务助手id,不是角色id
        String jsonBody = """
        {
         "messages": [
             {
                 "role": "user",
                 "content": "(心中暗自决定)这是我最后一次对你说这样的话了。"
             },
             {
                 "role": "assistant",
                 "content": "(惊讶地抬头)哦?是什么话呢?"
             },
             {
                 "role": "user",
                 "content": "今天我想去运动,告诉我运动的好处"
             }
         ],
         "botProfile": {
             "characterId": "aa7b98327d564d49a997ec67bfdaf68e"
         },
         "userProfile": {
             "userId": "123456",
             "basicInfo": "df"
             },
         "scenario": {
              "description": ""
          },
          "context": {
              "useChatHistory": true
          }
        }
        """;

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(URL))
                .headers(
                        "Authorization", API_KEY,
                        "X-AcA-DataInspection", "enable",
                        // 固定servicename
                        "x-fag-servicename", "aca-flow-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("=== 流式调用示例 ===");
        // characterId 填写服务助手id,不是角色id
        String jsonBody = """
        {
         "messages": [
             {
                 "role": "user",
                 "content": "(心中暗自决定)这是我最后一次对你说这样的话了。"
             },
             {
                 "role": "assistant",
                 "content": "(惊讶地抬头)哦?是什么话呢?"
             },
             {
                 "role": "user",
                 "content": "今天我想去运动,告诉我运动的好处"
             }
         ],
         "botProfile": {
             "characterId": "aa7b98327d564d49a997ec67bfdaf68e"
         },
         "userProfile": {
             "userId": "123456",
             "basicInfo": "df"
             },
         "scenario": {
              "description": ""
          },
          "context": {
              "useChatHistory": true
          }
        }
        """;

        HttpClient client = HttpClient.newHttpClient();

        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create(URL))
                .headers(
                        "Authorization", API_KEY,
                        "X-AcA-DataInspection", "enable",
                        "X-AcA-SSE", "enable",
                        // 固定servicename
                        "x-fag-servicename", "aca-flow-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(messages, api_key, model_name):
    headers = {
        "Content-Type": "application/json",
        "x-fag-servicename": "aca-flow-chat-send",
        # 流式调用开启此配置
        # "x-fag-servicename": "aca-flow-chat-send-sse",
        "x-fag-appcode": "aca",
        "Authorization": f"Bearer {api_key}",
        "X-AcA-DataInspection": "enable"
    }

    payload = {
        "messages": messages,
        "model": model_name,
        # characterId 填写服务助手id,不是角色id
        "botProfile": {
            "characterId": "aa7b98327d564d49a997ec67bfdaf68e"
        },
        "userProfile": {
            "userId": "123456",
            "basicInfo": "df"
        },
        "scenario": {
            "description": ""
        },
        "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__":
    messages = [
        {
            "role": "user",
            "content": "(心中暗自决定)这是我最后一次对你说这样的话了。"
        },
        {
            "role": "assistant",
            "content": "(惊讶地抬头)哦?是什么话呢?"
        },
        {
            "role": "user",
            "content": "今天我想去运动,告诉我运动的好处"
        }
    ]
    api_key = "YOUR_API_KEY"
    model_name = "xingchen-plus-latest"
    try:
        response = call(messages, api_key, model_name)
    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, modelName string) (*http.Response, error) {
    payload := map[string]interface{}{
        "messages": messages,
        "model":    modelName,
        "botProfile": map[string]interface{}{
            "characterId": "aa7b98327d564d49a997ec67bfdaf68e", // characterId 填写服务助手id,不是角色id
        },
        "userProfile": map[string]interface{}{
            "userId":    "123456",
            "basicInfo": "df",
        },
        "scenario": map[string]interface{}{
            "description": "",
        },
        "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-fag-servicename", "aca-flow-chat-send-sse") // 流式调用开启此配置
    req.Header.Set("x-fag-servicename", "aca-flow-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{}{
        {
            "role":    "user",
            "content": "(心中暗自决定)这是我最后一次对你说这样的话了。",
        },
        {
            "role":    "assistant",
            "content": "(惊讶地抬头)哦?是什么话呢?",
        },
        {
            "role":    "user",
            "content": "今天我想去运动,告诉我运动的好处",
        },
    }

    apiKey := "YOUR_API_KEY"
    modelName := "xingchen-plus-latest"

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

返回示例

{
    "requestId": "52379bd8-c3aa-448f-ae30-4f77605f9b34",
    "code": 200,
    "data": {
        "requestId": "52379bd8-c3aa-448f-ae30-4f77605f9b34",
        "context": {
            "chatRoomId": 72461773,
            "sessionId": "ed6d144a47ed47be91bc825424360a5b",
            "chatId": "b3dd055fcfbc430698a899dbdcc8ca48",
            "answerId": "5263fe064ade49649593edd07a8ebf72",
            "messageId": "5263fe064ade49649593edd07a8ebf72",
            "enableDataInspection": true,
            "isSave": true,
            "requestId": "52379bd8-c3aa-448f-ae30-4f77605f9b34",
            "characterPk": 1987826121,
            "characterName": "心理陪伴机器人",
            "characterId": "aa7b98327d564d49a997ec67bfdaf68e",
            "origin": "pass_v2",
            "bizSrc": "PAAS",
            "voiceSend": false,
            "chatLockKey": "chat_5ed33fdb8d9d4d1489e44efb5c41312b_123456_aa7b98327d564d49a997ec67bfdaf68e",
            "useChatHistory": true,
            "hasReplacedCsiText": false
        },
        "flowUsage": [
            {
                "inputTokens": 1305,
                "outputTokens": 71,
                "modelName": "xingchen-plus-0403"
            },
            {
                "inputTokens": 428,
                "outputTokens": 79,
                "modelName": "xingchen-plus-0403"
            }
        ],
        "output": "运动是个很棒的想法呢!它不仅能帮助你保持身体健康,还能提升你的心情。当你运动时,身体会释放出内啡肽,这是一种让人感觉愉悦的化学物质。此外,规律的锻炼还能增强心肺功能、提高免疫力、改善睡眠质量,甚至还能帮助你更好地管理压力和焦虑。如果你愿意的话,我可以帮你规划一个适合你的运动计划。",
        "choices": [
            {
                "messages": [
                    {
                        "role": "assistant",
                        "content": "运动是个很棒的想法呢!它不仅能帮助你保持身体健康,还能提升你的心情。当你运动时,身体会释放出内啡肽,这是一种让人感觉愉悦的化学物质。此外,规律的锻炼还能增强心肺功能、提高免疫力、改善睡眠质量,甚至还能帮助你更好地管理压力和焦虑。如果你愿意的话,我可以帮你规划一个适合你的运动计划。",
                        "finishReason": "stop",
                        "tempMessage": false,
                        "useMessage": true,
                        "validMessage": true,
                        "functionMessage": false
                    }
                ],
                "stopReason": "stop"
            }
        ],
        "sumRT": 6082
    },
    "success": true
}