# 星火认知大模型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 | 否,默认表示开启 |
| 仅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)
uni-app 带上下文调用示例 (opens new window)
小程序 带上下文调用示例 (opens new window)