# 星火认知大模型websocket接口文档

公告说明: Ultra版本已升级至X1.5 快思考模式

# 1. 接口说明

注意: 该接口可以正式使用。如您需要申请使用,请点击前往产品页面 (opens new window)


# 1.1 概念说明

1. 计费包含接口的输入和输出内容;

2. 1 token约等于1.5个中文汉字 或者 0.8个英文单词;

3. 仅Spark Pro, Spark Max和Spark Ultra支持[搜索]插件,天气、日期等问题依赖搜索;

4. 当前仅Spark Ultra、Max版本支持返回联网检索的信源标题及地址。

注:如果需要使用FunctionCall 功能,请移步http协议



# 1.2 请求地址

通用星火大模型API当前有Lite、Pro、Pro-128K、Max、Max-32K和4.0 Ultra六个版本 和 科技文献大模型(kjwx),各版本独立计量tokens。

传输协议 :ws(s),为提高安全性,强烈推荐wss

Spark4.0 Ultra 请求地址,对应的domain参数为4.0Ultra:

wss://spark-api.xf-yun.com/v4.0/chat

Spark Max-32K请求地址,对应的domain参数为max-32k

wss://spark-api.xf-yun.com/chat/max-32k

Spark Max请求地址,对应的domain参数为generalv3.5

wss://spark-api.xf-yun.com/v3.5/chat

Spark Pro-128K请求地址,对应的domain参数为pro-128k:

 wss://spark-api.xf-yun.com/chat/pro-128k

Spark Pro请求地址,对应的domain参数为generalv3:

wss://spark-api.xf-yun.com/v3.1/chat

Spark Lite请求地址,对应的domain参数为lite:

wss://spark-api.xf-yun.com/v1.1/chat

行业大模型列表如下:

科技文献大模型,对应的domain参数为kjwx:

wss://spark-openapi-n.cn-huabei-1.xf-yun.com/v1.1/chat_kjwx

# 2 接口鉴权

参考通用URL鉴权文档 (opens new window)

# 3 接口请求

# 3.1 请求示例

# 参数构造示例如下
{
        "header": {
            "app_id": "12345",
            "uid": "12345"
        },
        "parameter": {
            "chat": {
                "domain": "generalv3.5",
                "temperature": 0.5,
                "max_tokens": 1024, 
            }
        },
        "payload": {
            "message": {
                # 如果想获取结合上下文的回答,需要开发者每次将历史问答信息一起传给服务端,如下示例
                # 注意:text里面的所有content内容加一起的tokens需要控制在8192以内,开发者如有较长对话需求,需要适当裁剪历史信息
                "text": [
                    #如果传入system参数,需要保证第一条是system
                    {"role":"system","content":"你现在扮演李白,你豪情万丈,狂放不羁;接下来请用李白的口吻和用户对话。"} #设置对话背景或者模型角色
                    {"role": "user", "content": "你是谁"} # 用户的历史问题
                    {"role": "assistant", "content": "....."}  # AI的历史回答结果
                    # ....... 省略的历史对话
                    {"role": "user", "content": "你会做什么"}  # 最新的一条问题,如无需上下文,可只传最新一条问题
                ]
        }
    }
}

# 3.2 参数说明

接口请求字段由三个部分组成:header,parameter, payload。 字段解释如下

header部分

参数名称 类型 必传 参数要求 参数说明
app_id string 应用appid,从开放平台控制台创建的应用中获取
uid string 每个用户的id,非必传字段,用于后续扩展 ,"maxLength":32

parameter.chat部分

参数名称 类型 必传 参数要求 参数说明
domain string 取值范围为:
lite、
generalv3、
pro-128k、
generalv3.5、
max-32k、
4.0Ultra、
kjwx
指定访问的模型版本:
lite 指向Lite版本;
generalv3 指向Pro版本;
pro-128k 指向Pro-128K版本;
generalv3.5 指向Max版本;
max-32k 指向Max-32K版本;
4.0Ultra 指向4.0 Ultra版本;
kjwx 指向科技文献大模型(重点优化论文问答、写作等垂直领域);
注意:不同的取值对应的url也不一样!
temperature float 取值范围 (0,1] ,默认值0.5 核采样阈值:取值越高随机性越强,即相同的问题得到的不同答案的可能性越大;
数学、推理、代码类任务建议调为0.6
max_tokens int 4.0 Ultra 取值为[1,32768],默认为32768
Max-32K取值为[1,32768],默认为4096
Max取值为[1,8192],默认为4096
Pro 取值为[1,8192],默认为4096
Pro-128K取值为[1,131072],默认为4096
Lite取值为[1,4096],默认为4096
模型回答的tokens的最大长度
top_k int 取值为[1,6],默认为4 从k个候选中随机选择⼀个(⾮等概率)
tools array 通过该参数控制工具使用 工具列表
tools.type string 可选值:web_search 当前工具列表中,仅支持联网搜索工具;
如需使用FunctionCall ,请参见下文对应描述
tools.web_search object 否,默认表示开启

{
  "type": "web_search",
  "web_search": {
  "enable": true,
  "show_ref_label": true,
  "search_mode": "deep"
  }
 }
仅Pro、Max、Ultra系列模型支持
tools.web_search.enable bool 否,默认开启(true) true or false enable:是否开启搜索功能,设置为true,模型会根据用户输入判断是否触发联网搜索,false则完全不触发;
tools.web_search.show_ref_label bool 否,默认关闭(false) true or false show_ref_label 开关控制触发联网搜索时是否返回信源信息(仅在enable为true时生效)
如果开启,则先返回搜索结果,之后再返回模型回复内容
tools.web_search.search_mode string 否,默认标准搜索(normal) deep/normal search_mode 控制联网搜索策略(仅在enable为true时生效)
normal:标准搜索模式,模型引用搜索返回的摘要内容回答问题
deep:深度搜索模式,模型引用搜索返回的全文内容,回复的更准确;同时会带来额外的token消耗(返回search_prompt字段)

payload.message.text部分
注意:1、请确保text下所有content内容累计的tokens数量在模型上下文长度的限制之内。具体可参考下文中content字段的参数要求
2、如果传入system参数,需要保证第一条是system;多轮交互需要将之前的交互历史按照system-user-assistant-user-assistant进行拼接

参数名称 类型 必传 参数要求 参数说明
role string 取值为[system,user,assistant] system用于设置对话背景(仅Max、Ultra版本支持)
user表示是用户的问题,
assistant表示AI的回复
content string 所有content的累计tokens长度,不同版本限制不同:
4.0 Ultra: 不超过32768;
Max-32K: 不超过32768;
Max: 不超过8192;
Pro-128K:不超过 131072;
Pro: 不超过8192;
Lite: 不超过8192;
用户和AI的对话内容

# 4 接口响应

# 4.1响应示例

在不返回检索信源的情况下,大模型流式返回结构如下:

# 接口为流式返回,此示例为最后一次返回结果,开发者需要将接口多次返回的结果进行拼接展示
{
    "header":{
        "code":0,
        "message":"Success",
        "sid":"cht000cb087@dx18793cd421fb894542",
        "status":2
    },
    "payload":{
        "choices":{
            "status":2,
            "seq":0,
            "text":[
                {
                    "content":"我可以帮助你的吗?",
                    "role":"assistant",
                    "index":0
                }
            ]
        },
        "usage":{
            "text":{
                "question_tokens":4,
                "prompt_tokens":5,
                "completion_tokens":9,
                "total_tokens":14
            }
        }
    }
}

# 4.2 参数说明

在不返回检索信源的情况下,接口返回字段分为两个部分,header,payload。字段解释如下

header部分

字段名 类型 字段说明
code int 错误码,0表示正常,非0表示出错;详细释义可在接口说明文档最后的错误码说明了解
message string 会话是否成功的描述信息
sid string 会话的唯一id,用于讯飞技术人员查询服务端会话日志使用,出现调用错误时建议留存该字段
status int 会话状态,取值为[0,1,2];0代表首次结果;1代表中间结果;2代表最后一个结果

payload.choices部分

字段名 类型 字段说明
status int 文本响应状态,取值为[0,1,2]; 0代表首个文本结果;1代表中间文本结果;2代表最后一个文本结果
seq int 返回的数据序号,取值为[0,9999999]
content string AI的回答内容
role string 角色标识,固定为assistant,标识角色为AI
index int 结果序号,取值为[0,10]; 当前为保留字段,开发者可忽略

payload.usage部分(在最后一次结果返回)

字段名 类型 字段说明
question_tokens int 保留字段,可忽略
prompt_tokens int 包含历史问题的总tokens大小
completion_tokens int 回答的tokens大小
total_tokens int prompt_tokens和completion_tokens的和,也是本次交互计费的tokens大小

在返回检索信源的情况下,在大模型返回结果之前会先返回检索信源,结构如下:

{
    "header": {
        "code": 0,
        "message": "Success",
        "sid": "cht000b79a4@dx190da456b5db80a560",
        "status": 1
    },
    "payload": {
        "plugins": {
            "text": [
                {
                    "name": "ifly_search",
                    "content": "[{\"index\":1,\"url\":\"https://baike.baidu.com/item/%E6%9B%B9%E6%93%8D/6772\",\"title\":\"曹操(中国东汉末年权臣,曹魏政权的奠基者)_百度百科\"},{\"index\":2,\"url\":\"https://zhidao.baidu.com/question/437349472.html\",\"title\":\"曹操是哪一年出生的? - 百度知道\"},{\"index\":3,\"url\":\"http://www.lidaishi.com/default.aspx?did=130019\",\"title\":\"曹操的一生事迹简介-历代史历史网\"},{\"index\":4,\"url\":\"https://zhidao.baidu.com/question/374585705.html\",\"title\":\"曹操生于哪一年? - 百度知道\"},{\"index\":5,\"url\":\"https://baike.baidu.hk/item/%E6%9B%B9%E6%93%8D/6772\",\"title\":\"曹操(中國東漢末年權臣,曹魏政權的奠基者)_百度百科\"}]",
                    "content_type": "text",
                    "content_meta": null,
                    "role": "tool",
                    "status": "finished",
                    "invoked": {
                        "namespace": "ifly_search",
                        "plugin_id": "ifly_search",
                        "plugin_ver": "",
                        "status_code": 200,
                        "status_msg": "Success",
                        "type": "local"
                    }
                }
            ]
        }
    }
}

解析检索信源Python示例:

if('plugins' in data['payload']):
    text_list = data['payload']['plugins']['text']
    search_refer = text_list[0]
    refer_content = search_refer['content']
    refer_list = json.loads(refer_content)
    print("参考内容:")
    for line in refer_list:
        num = line['index']
        url = line['url']
        title = line['title']
        print(str(num) + "、" + title + "[ " + url + " ]")

# 5. 调用示例

# 5.1 Python SDK 调用示例

# 快速调用集成星火认知大模型(Python SDK调用示例)

注:项目仅支持 Python3.8+
步骤一:安装PyPI上的包,在python环境中执行命令

pip install --upgrade spark_ai_python

步骤二:python代码示例执行

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessage

#星火认知大模型Spark Max的URL值,其他版本大模型URL值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_URL = 'wss://spark-api.xf-yun.com/v3.5/chat'
#星火认知大模型调用秘钥信息,请前往讯飞开放平台控制台(https://console.xfyun.cn/services/bm35)查看
SPARKAI_APP_ID = ''
SPARKAI_API_SECRET = ''
SPARKAI_API_KEY = ''
#星火认知大模型Spark Max的domain值,其他版本大模型domain值请前往文档(https://www.xfyun.cn/doc/spark/Web.html)查看
SPARKAI_DOMAIN = 'generalv3.5'

if __name__ == '__main__':
    spark = ChatSparkLLM(
        spark_api_url=SPARKAI_URL,
        spark_app_id=SPARKAI_APP_ID,
        spark_api_key=SPARKAI_API_KEY,
        spark_api_secret=SPARKAI_API_SECRET,
        spark_llm_domain=SPARKAI_DOMAIN,
        streaming=False,
    )
    messages = [ChatMessage(
        role="user",
        content='你好呀'
    )]
    handler = ChunkPrintHandler()
    a = spark.generate([messages], callbacks=[handler])
    print(a)

更多Python SDK功能请前往github (opens new window)查看

# 5.2 web API调用示例

注: demo只是一个简单的调用示例,不适合直接放在复杂多变的生产环境使用,错误码见服务说明 (opens new window)

Python 调用示例 (opens new window)

Python 带上下文调用示例 (opens new window)

Python FunctionCall调用示例 (opens new window)

Java 带上下文调用示例 (opens new window)

Js 调用示例 (opens new window)

C# 调用示例 (opens new window)

Go 调用示例 (opens new window)

PHP 调用示例 (opens new window)

uni-app 带上下文调用示例 (opens new window)

小程序 带上下文调用示例 (opens new window)

PYTHON-SDK-DEMO (opens new window)

JAVA-SDK-DEMO (opens new window)

在线咨询
体验中心