# 角色模拟Web API文档
# 一、接口要求
| 内容 | 说明 | 
|---|---|
| 传输协议 | 接口url为https则使用https协议,接口url为wss则使用wss协议 | 
| 接口鉴权 | 签名机制,详情请参照下方鉴权认证 | 
| 字符编码 | UTF-8 | 
| 响应格式 | 统一采用 JSON 格式 | 
| 开发语言 | 任意,只要可以向讯飞云服务发起 HTTP/WebSocket 请求的均可 | 
# 二、调用示例
部分接口demo如下,其他开发语言请参照 接口调用流程 进行开发,也欢迎热心的开发者到 讯飞开放平台社区 (opens new window) 分享你们的demo。
角色模拟demo java语言 (opens new window)
# 三、鉴权认证
在调用业务接口时,除了接口请求体中的业务参数,请求方需要额外在header中对请求进行签名,服务端通过签名来校验请求的合法性。
# 鉴权方法
# 1、设置签名
在 HTTP 接口的请求头 Header 或者 WebSocket 接口的请求地址 url 中设置参数:appId, timestamp, signature
示例:
- HTTP接口:在 Http Request Header 中配置以下参数
String appId = "应用ID";
String secret = "应用的秘钥"
Long timestamp = System.currentTimeMillis();
String signature = ApiAuthAlgorithm.getSignature(appId, secret, timestamp);
request.setHeader("appId",appId);
request.setHeader("timestamp",timestamp);
request.setHeader("signature",signature);
- WebSocket接口:通过在请求地址后面加上鉴权相关参数的方式
wss://ai-character-v2.xfyun.cn/personality/open/interactivews/{sid}?appId=xxx×tamp=xxx&signature=xxxxxx
签名参数说明:
| 字段名 | 类型 | 描述 | 必须 | 
|---|---|---|---|
| appId | String | 应用 ID | Y | 
| timestamp | Long | 时间戳,单位: ms,与服务端时间相差五分钟之内 | Y | 
| signature | String | 签名 | Y | 
# 2、签名(signature)生成规则
- 首先,用应用 ID(appId)和时间戳(timestamp)通过 MD5 算法生成随机授权参数 auth 
- 再使用授权参数 auth 和接口密钥(secret)基于 HmacSHA1 生产签名 signature 
示例:
public class ApiAuthAlgorithm {
  private static final char[] MD5_TABLE = {
    '0',
    '1',
    '2',
    '3',
    '4',
    '5',
    '6',
    '7',
    '8',
    '9',
    'a',
    'b',
    'c',
    'd',
    'e',
    'f'
  };
  /**
   * 获取签名
   *
   * @param appId    签名的key
   * @param secret 签名秘钥
   * @return 返回签名
   */
  public String getSignature(String appId, String secret, long ts) {
    try {
      String auth = md5(appId + ts);
      return hmacSHA1Encrypt(auth, secret);
    } catch (SignatureException e) {
      return null;
    }
  }
  /**
   * sha1加密
   *
   * @param encryptText 加密文本
   * @param encryptKey  加密键
   * @return 加密
   */
  private String hmacSHA1Encrypt(String encryptText, String encryptKey)
    throws SignatureException {
    byte[] rawHmac;
    try {
      byte[] data = encryptKey.getBytes(StandardCharsets.UTF_8);
      SecretKeySpec secretKey = new SecretKeySpec(data, "HmacSHA1");
      Mac mac = Mac.getInstance("HmacSHA1");
      mac.init(secretKey);
      byte[] text = encryptText.getBytes(StandardCharsets.UTF_8);
      rawHmac = mac.doFinal(text);
    } catch (InvalidKeyException e) {
      throw new SignatureException("InvalidKeyException:" + e.getMessage());
    } catch (NoSuchAlgorithmException e) {
      throw new SignatureException(
        "NoSuchAlgorithmException:" + e.getMessage()
      );
    }
    return new String(Base64.encodeBase64(rawHmac));
  }
  private String md5(String cipherText) {
    try {
      byte[] data = cipherText.getBytes();
      // 信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。
      MessageDigest mdInst = MessageDigest.getInstance("MD5");
      // MessageDigest对象通过使用 update方法处理数据, 使用指定的byte数组更新摘要
      mdInst.update(data);
      // 摘要更新之后,通过调用digest()执行哈希计算,获得密文
      byte[] md = mdInst.digest();
      // 把密文转换成十六进制的字符串形式
      int j = md.length;
      char[] str = new char[j * 2];
      int k = 0;
      for (byte byte0 : md) { // i = 0
        str[k++] = MD5_TABLE[byte0 >>> 4 & 0xf]; // 5
        str[k++] = MD5_TABLE[byte0 & 0xf]; // F
      }
      // 返回经过加密后的字符串
      return new String(str);
    } catch (Exception e) {
      return null;
    }
  }
}
# 鉴权结果
如果鉴权失败,则根据不同错误类型返回不同 HTTP Code 状态码,同时携带错误描述信息,详细错误说明如下:
| HTTP Code | 说明 | 错误描述信息 | 解决方法 | 
|---|---|---|---|
| 100400 | 鉴权参数为空 | 非法鉴权参数,请检查请求header! | 检查是否设置鉴权参数 | 
| 100401 | 签名参数解析失败 | 请填写签名signature! | 检查签名的各个参数是否有缺失是否正确,特别确认下复制的secret是否正确 | 
| 100402 | 签名校验失败 | 签名signature错误! | 签名验证失败,可能原因有很多。 1. 检查 appId、secret 是否正确。 2.检查计算签名的方法是否正确。 3. 检查时间戳是否正确等等 | 
| 100403 | 时钟偏移校验失败 | 时间戳错误,请检查时间戳timestamp! | 检查服务器时间是否标准,相差 5 分钟以上会报此错误 | 
| 100405 | 应用无效 | appId未授权,请检查appId! | 检查该 appId 是否开通授权 | 
# 四、接口列表
# 1 创建玩家账号
# 1.1 接口描述
玩家帐号,即与角色对话的终端用户。您需要为每一位使用对话功能的用户创建玩家帐号。 除非您在应用层自定义了特殊逻辑,否则默认情况下,每个玩家都可以与应用下的任意角色进行对话。
# 1.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/player/register
# 1.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerName | String | 玩家名称(同一应用下不允许重复),50字符以内 | Y | |
| playerIdentity | String | 玩家职业身份(300字符以内,描述玩家的职业身份、和人格的关系、使命职责等) | N | 
示例:
{
    "playerName":"张三",
    "playerIdentity":"张三和李四是同事,在一家公司上班。"
}
# 1.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | String | 新建玩家ID | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": "新建玩家ID",
    "sid": "请求ID"
}
# 2 编辑玩家账号
# 2.1 接口描述
编辑玩家名称、描述和类型信息。
# 2.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/player/modify
# 2.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerId | String | 玩家ID | Y | |
| playerName | String | 玩家姓名(同一应用下不允许重复) | N | |
| playerIdentity | String | 玩家身份标识,300字符以内 | N | 
示例:
{
    "playerId": "0f1c9c1ab6ce1fc7c2f1731394fdf33e", 
    "playerName": "张三",
    "playerIdentity":"张三"
}
# 2.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | String | 修改成功后玩家信息 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": "修改成功后玩家信息",
    "sid": "请求ID"
}
# 3 删除玩家账号
# 3.1 接口描述
删除玩家帐号,会同步删除该玩家创建的所有人格,人格的所有记忆,以及该玩家参与的所有对话记忆。 删除后可重新注册同名帐号。
# 3.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/player/delete/{playerId}
# 3.3 请求参数
POST,路径变量
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerId | String | 玩家账号ID | Y | 
示例:
https://ai-character-v2.xfyun.cn/personality/open/player/delete/xxxxx
# 3.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | Boolean | 删除成功或失败 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": true,
    "sid": "b526d7d034b14392b991f4ef0ed9c0e0"
}
# 4 创建人格
# 4.1 接口描述
角色,即人格。角色必须创建在某个玩家帐号下。您可以使用固定的玩家帐号来集中管理所有角色,也可以允许玩家自定义角色, 将角色创建在不同玩家帐号下。 角色设定信息请以角色名称或第二人称“你”来指代。
# 4.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/save
# 4.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerId | String | 玩家ID | Y | |
| agentName | String | 人格名称(50字符以内) | Y | |
| agentHobby | String | 爱好(使用人格名称指代,100字符以内) | N | |
| agentIdentity | String | 社会身份(职业身份、和他人的关系、使命职责等。使用人格名称指代,避免使用“你”“我”代词。100字符以内。) | N | |
| agentPersonalityDesc | String | 性格描述(身世背景,影响性格的重大事件,体现性格的典型表现等。使用人格名称指代。2000字符以内) | N | 
示例:
{
    "playerId": "0f1c9c1ab6ce1fc7c2f1731394fdf33e",
    "agentName": "星巴",
    "agentHobby": "星巴喜欢驾驶飞船欣赏宇宙的浪漫。",
    "agentIdentity": "星巴是一名星际探险家,同时担任宇宙联盟的特使,负责寻找和联络未知星系中的文明。",
    "agentPersonalityDesc": "星巴出生在一个多星球组成的和平联邦中,自幼对星际旅行充满了无限的憧憬。一次偶然的星际风暴经历让他失去了家人,但也因此被一位神秘的星际旅者所救,从此他决定成为一名探险家,以寻找新的星际文明为己任,希望能够连接更多的世界,促进宇宙间的理解和和平。星巴性格乐观、勇敢且充满好奇心,面对未知从不畏惧,总是第一个冲在前面。在团队中,他以其卓越的领导力和对未知的无畏探索而受到同伴们的尊敬。" 
  }
# 4.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| data | String | 新增人格ID | Y | |
| description | String | 异常信息描述 | Y | |
| data | String | 新增人格ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": "新增人格ID",
    "sid": "请求ID"
}
# 5 编辑人格
# 5.1 接口描述
编辑人格的属性。
# 5.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/edit
# 5.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| agentId | String | 人格ID | Y | |
| agentName | String | 人格名称(50字符以内) | N | |
| agentHobby | String | 爱好(使用人格名称指代,100字符以内) | N | |
| agentIdentity | String | 社会身份(职业身份、和他人的关系、使命职责等。使用人格名称指代,避免使用“你”“我”代词。100字符以内。) | N | |
| agentPersonalityDesc | String | 性格描述(身世背景,影响性格的重大事件,体现性格的典型表现等。使用人格名称指代。2000字符以内) | N | 
示例:
{
  "agentId": "513fb8e354a546e75c0c7bda32a408fd",
  "agentName": "星巴",
  "agentIdentity": "示例人格",
  "agentPersonalityDesc": "星巴出生在一个多星球组成的和平联邦中,自幼对星际旅行充满了无限的憧憬。一次偶然的星际风暴经历让他失去了家人,但也因此被一位神秘的星际旅者所救,从此他决定成为一名探险家,以寻找新的星际文明为己任,希望能够连接更多的世界,促进宇宙间的理解和和平。星巴性格乐观、勇敢且充满好奇心,面对未知从不畏惧,总是第一个冲在前面。在团队中,他以其卓越的领导力和对未知的无畏探索而受到同伴们的尊敬。",  
  "agentHobby": "星巴喜欢驾驶飞船欣赏宇宙的浪漫。"
}
# 5.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | String | 修改成功后人格信息 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": "修改成功后人格信息",
    "sid": "请求ID"
}
# 6 查询人格
# 6.1 接口描述
查询人格的所有属性信息。
# 6.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/get-agent/{agentId}
# 6.3 请求参数
GET,路径变量
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| agentId | String | 人格ID | Y | 
示例:
https://ai-character-v2.xfyun.cn/personality/open/agent/get-agent/xxxx
# 6.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | String | 查询到的人格信息 | Y | |
| sid | String | 请求ID | Y | 
data示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": {
        "id": "人格ID",
        "appId": "12345678",
        "playerId": "玩家ID",
        "agentName": "人格昵称",
        "agentIdentity": "人格身份",
        "agentHobby": "人格爱好",
        "agentPersonalityDesc": "人格性格描述",
        "delFlag": false,
        "createTime": "2024-08-07T09:30:04.000+00:00",
        "updateTime": "2024-08-07T09:30:04.000+00:00"
    },
    "sid": "88e9579ff11e499d86d652abca31f55d"
}
# 7 分页搜索人格列表
# 7.1 接口描述
根据创建者、关键词,或全局分页搜索人格。
# 7.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/list
# 7.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| pageNum | int | 查询页码 | N | 1 | 
| pageSize | int | 每页条数 | N | 15 | 
| searchKey | String | 搜索关键词 | N | |
| playerId | String | 创建玩家ID | N | 
示例:
{
    "pageNum": 1,
    "pageSize": 10,
    "playerId": "创建玩家ID",
    "searchKey": "搜索关键词"
}
# 7.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data.records | Array | 查询到的人格信息列表 | Y | |
| sid | String | 请求ID | Y | 
data示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": {
        "records": [
            {
                "id": "人格ID",
                "appId": "12345678",
                "playerId": "玩家ID",
                "agentName": "人格昵称",
                "agentIdentity": "人格身份",
                "agentHobby": "人格爱好",
                "agentPersonalityDesc": "人格性格描述",
                "delFlag": false,
                "createTime": "2024-08-07T09:30:04.000+00:00",
                "updateTime": "2024-08-07T09:30:04.000+00:00"
            }
        ]
    },
    "sid": "7587b0be50574cb49b3d288c181c17ed"
}
# 8 删除人格
# 8.1 接口描述
删除角色,且同步删除角色的所有记忆。
# 8.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/delete/{agentId}
# 8.3 请求参数
POST,路径变量
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| agentId | String | 人格ID | Y | 
示例:
https://ai-character-v2.xfyun.cn/personality/open/agent/delete/xxxxx
# 8.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | Boolean | 删除成功或失败 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": true,
    "sid": "b526d7d034b14392b991f4ef0ed9c0e0"
}
# 9 设置人格角色关系
# 9.1 接口描述
设置玩家和人格之间的关系、玩家对于人格的身份,以及独属双方的昵称。
# 9.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/set-relationship
# 9.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerId | String | 玩家ID | Y | |
| agentId | String | 人格ID | Y | |
| playerNickname | String | 人格对玩家的称呼 | N | |
| playerIdentity | String | 玩家对于人格的身份 | N | |
| agentNickname | String | 玩家对人格的称呼 | N | |
| relationship | String | 玩家和人格的关系 | N | 
示例:
{
    "playerId": "玩家ID",
    "agentId": "人格ID",
    "playerNickname":"张三",
    "playerIdentity":"李四的爸爸",
    "agentNickname":"李四",
    "relationship":"父子"
}
# 9.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | Boolean | 设置成功或失败 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": true,
    "sid": "b526d7d034b14392b991f4ef0ed9c0e0"
}
# 10 查询人格角色关系
# 10.1 接口描述
查询玩家和人格之间的关系、玩家对于人格的身份,以及独属双方的昵称。
# 10.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/agent/get-relationship
# 10.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerId | String | 玩家ID | Y | |
| agentId | String | 人格ID | Y | 
示例:
{
    "playerId": "玩家ID",
    "agentId": "人格ID"
}
# 10.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | Boolean | 双方关系 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": {
        "playerId": "玩家ID",
        "agentId": "人格ID",
        "playerNickname":"张三",
        "playerIdentity":"李四的爸爸",
        "agentNickname":"李四",
        "relationship":"父子",
        "createTime": "2024-08-13T09:33:16.000+00:00",
        "updateTime": "2024-12-10T11:17:45.000+00:00"
    },
    "sid": "a22128dfdb8f4a9e8493c6422538a233"
}
# 11 新建会话
# 11.1 接口描述
在玩家和角色开始聊天之前,需要创建一个会话实例。同一会话下,角色模拟服务默认携带上下文记忆。
# 11.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/chat/new-chat
# 11.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| playerId | String | 玩家ID | Y | |
| agentId | String | 人格ID | Y | |
| mission | String | 人格在本会话中的任务或目标 | N | |
| conversationScene | String | 会话场景,比如环境、前情提要等 | N | 
示例:
{
	"playerId": "玩家ID",
	"agentId": "人格ID",
	"mission": "星巴需要守住自己的身世秘密,绝不能告诉任何人。",
	"conversationScene": "星巴驾驶着飞船,降落在一颗陌生星球上,迎面走来一位神秘老者。"
}
# 11.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | String | 新增会话ID | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": "新增会话ID",
    "sid": "b526d7d034b14392b991f4ef0ed9c0e0"
}
# 12 编辑会话场景
# 12.1 接口描述
当会话实例已存在,但需要编辑会话场景时,可调用本接口。
# 12.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/chat/add-scene
# 12.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| chatId | String | 会话ID | Y | |
| scene | String | 新会话场景的描述 | Y | 
示例:
{
    "chatId":"d7a5a04c164636391b3fb3a1c5aaf9a6",
    "scene":"星巴按照老者的指示,前往星球上唯一的地下掩体。"
}
# 12.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | Boolean | 编辑成功或失败 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": true,
    "sid": "b526d7d034b14392b991f4ef0ed9c0e0"
}
# 13 对话
# 13.1 接口描述
用于生成角色对话。
# 13.2 接口地址
wss://ai-character-v2.xfyun.cn/personality/open/chat/{chatId}/{playerId}/{agentId}?appId=xxx&timestamp=xxx&signature=xxxxxx
在请求URL上带上参数:appId, timestamp, signature 鉴权生成见上文接口鉴权,首次连接时,服务器会校验身份凭证及配额。
# 13.3 请求参数
POST,application/json
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| parameter.type | String | 枚举值。当前支持"ping"、"chat"、"reanswer"。"ping"表示ping消息,websocket接口30秒钟无消息会主动断联,如需保持连接需要发送ping消息,服务端会响应pong消息。"chat"适用于一般场景,即用户发言后触发角色发言的生成。需要在content中传入用户的发言文本。"reanswer"适用于重新生成场景,角色模拟服务会自动选择当前会话中的最新一条角色发言进行重新生成,因此需要保证已进行过至少一轮会话。 | Y | |
| payload.content | String | 用户发言内容。会话类型为"chat"时必填,其他类型可传null。 | N | 
示例:
{
    "header": {
        "appId": "appId"
    },
    "payload": {
        "content": "发言内容"
    },
    "parameter": {
        "type": "chat"
    }
}
# 13.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| header.code | int | 错误码,成功= 0 | Y | 0 | 
| header.status | int | 状态码,2表示会话完成 | Y | |
| header.message | String | 结果描述 | Y | |
| header.messageSid | String | 大模型会话id。ping消息响应没有此字段。 | N | |
| header.sid | String | 服务端响应id | Y | |
| header.status | int | 服务端响应状态。2表示会话完成。ping消息响应没有此字段。 | Y | |
| header.type | String | 会话类型。"pong"表示pong消息响应,"chat"和"reanswer"分别表示正常会话和重新回答。 | Y | |
| payload.usage | Array | 当前轮次问答用量。当大模型响应消息结束时,会返回该字段。 | N | |
| payload.usage.agent_current_chars | int | 当前轮次角色输出的字数 | N | |
| payload.usage.player_current_chars | int | 当前轮次玩家输入的字数 | N | |
| payload.usage.history_chars | int | 请求模型携带的会话上下文字数(包括玩家和用户发言) | N | |
| payload.usage.system_current_chars | int | 角色设定部分字数 | N | |
| payload.usage.total_current_chars | int | 当前轮次消耗的总字数 | N | |
| payload.usage.total_current_tokens | int | 当前轮次消耗的总token数 | N | |
| payload.choices | Array | 大模型响应内容。ping消息响应没有此字段。 | Y | |
| payload.choices.seq | int | 返回片段在回答全句中的次序 | Y | |
| payload.choices.status | int | 状态码,2表示会话完成 | Y | |
| payload.choices.text | Array | 大模型生成的会话内容 | Y | 
示例:
{
    "header": {
        "code": 0,
        "message": "Success",
        "messageSid": "cht000bf67f@dx192d79d70d5b81a540",
        "sid": "31de7440-179e-4d18-bc55-eadfa99c655e",
        "status": 2,
        "type": "reanswer"
    },
    "payload": {
        "choices": {
            "seq": 3,
            "status": 2,
            "text": [
                {
                    "content": "嗨李四,你是来提需求的吗?",
                    "role": "assistant"
                }
            ]
        },
        "usage": {
            "agent_current_chars": 13,
            "player_current_chars": 32,
            "history_chars": 115,
            "system_current_chars": 484,
            "total_current_chars": 674,
            "total_current_tokens": 322
        }
    }
}
# 14 清空会话历史
# 14.1 接口描述
删除角色记忆缓存中的对话历史。当玩家用当前chatId输入新一轮发言时,角色将不携带任何上文记忆进行对话生成。 若角色出现重复生成等异常,可调用本接口进行重置。
# 14.2 接口地址
https://ai-character-v2.xfyun.cn/personality/open/chat/clear-chat/{chatId}
# 14.3 请求参数
GET,路径变量
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| chatId | String | 会话ID | Y | 
示例:
https://ai-character-v2.xfyun.cn/personality/open/chat/clear-chat/xxxxx
# 14.4 返回参数
| 字段名 | 类型 | 描述 | 必须 | 默认值 | 
|---|---|---|---|---|
| code | int | 响应码,成功= 0 | Y | 0 | 
| success | Boolean | 是否成功 | Y | |
| message | String | 结果描述 | Y | |
| description | String | 异常信息描述 | Y | |
| data | Boolean | 清除成功或失败 | Y | |
| sid | String | 请求ID | Y | 
示例:
{
    "success": true,
    "code": 0,
    "message": "成功",
    "description": null,
    "data": true,
    "sid": "b526d7d034b14392b991f4ef0ed9c0e0"
}
# 五、错误码
操作成功响应 0
系统错误码列表
| 错误码 | 描述 | 处理方式 | 
|---|---|---|
| 100000 | 系统异常,请检查请求方法或参数 | 请检查请求方法或参数 | 
| 100001 | 参数错误 | 请检查参数 | 
| 100002 | 参数长度错误 | 请检查参数 | 
| 100003 | 参数缺失 | 请检查参数 | 
| 100004 | 参数非法 | 请检查参数 | 
| 110001 | 请求错误,请检查请求方法或参数 | 请检查请求方法或参数 | 
| 110007 | 服务间调用异常 | 请联系管理员 | 
计量与授权错误码列表
| 错误码 | 描述 | 处理方式 | 
|---|---|---|
| 170003 | 并发路数不足,请检查路数余量 | 请联系管理员确认余量 | 
| 170004 | 问答总字数不足,请检查字数余量 | 请联系管理员确认余量 | 
| 170005 | 时间缺失 | 请填写授权有效期 | 
| 170006 | 时间无效 | 请检查授权有效期 | 
业务错误码列表
| 错误码 | 描述 | 处理方式 | 
|---|---|---|
| 100020 | 玩家创建失败 | 请检查参数 | 
| 100021 | 玩家不存在 | 请检查参数 | 
| 100022 | 玩家编辑失败 | 请检查参数 | 
| 100030 | 人格创建失败 | 检查入参 | 
| 100031 | 人格不存在 | 请检查参数 | 
| 100032 | 人格姓名为空 | 请检查参数 | 
| 100040 | 会话不存在 | 请检查参数 | 
| 100041 | 会话中包含违禁词 | 请修改会话内容 | 
| 100042 | 会话创建失败 | 请检查参数 | 
| 100043 | 会话删除失败 | 请检查参数 | 
| 100044 | 会话记录保存失败 | 请检查参数 | 
| 100045 | 对话消息类型错误 | 请检查参数 | 
| 100046 | 对话消息格式错误 | 请检查参数 | 
| 100047 | 会话信息错误 | 请检查当前会话的玩家和用户是否正确 | 
| 100048 | 会话历史为空 | 重新回答时需要保证已存在会话历史 | 
| 100049 | 拼接大模型提示词失败 | 请检查人格设定和会话参数 | 
| 100050 | 大模型调用失败 | 请稍后重试 | 
| 100051 | 大模型返回消息异常 | 请稍后重试 | 
 
 