# 星火认知大模型Web API文档

诚邀您参与我们星火大模型服务有奖调研 (opens new window),参与问卷即有机会获取千万Tokens

# 1. 接口说明

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

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

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

3. 仅Spark Pro, Spark Max和Spark 4.0Ultra支持[搜索]、[天气]、[日期]、[诗词]、[字词]、[股票]等内置插件;

4. Spark 4.0Ultra、Max现已支持system、Function Call功能;

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

# 1.1 请求地址

通用星火大模型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

# 1.2 接口鉴权

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

# 1.3 接口请求

# 1.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": "你会做什么"}  # 最新的一条问题,如无需上下文,可只传最新一条问题
                ]
        }
    }
}

接口请求字段由三个部分组成: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 核采样阈值。取值越高随机性越强,即相同的问题得到的不同答案的可能性越大
max_tokens int Pro、Max、Max-32K、4.0 Ultra 取值为[1,8192],默认为4096;
Lite、Pro-128K 取值为[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长度,不同版本限制不同:
Lite、Pro、Max、4.0 Ultra版本: 不超过8192;
Max-32K版本: 不超过32* 1024;
Pro-128K版本:不超过 128*1024;
用户和AI的对话内容

# 1.4 接口响应

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

# 接口为流式返回,此示例为最后一次返回结果,开发者需要将接口多次返回的结果进行拼接展示
{
    "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
            }
        }
    }
}

在不返回检索信源的情况下,接口返回字段分为两个部分,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 + " ]")

# 2.Function Call说明

Function call 作为大模型能力扩展的核心,支持大模型在交互过程中识别出需要调度的外部接口:
注:当前仅Spark Max/4.0 Ultra 支持了该功能;需要请求参数payload.functions中申明大模型需要辨别的外部接口,申明方式见下方请求示例

# 2.1接口请求

# 2.1.1 请求示例

# 参数构造示例如下,仅在原本生成的基础上,增加了functions.text字段,用于方法的注册
{
        "header": {
            "app_id": appid,
            "uid": "1234"
        },
        "parameter": {

            "chat": {
                "domain": domain,
                "random_threshold": 0.5,
                "max_tokens": 2048,
                "auditing": "default"
            }
        },
        "payload": {
            "message": {
                "text": [
                    {"role": "user", "content": ""} # 用户的提问
                    ]
            },
            "functions": {
                "text": [
                    {
                        "name": "天气查询",
                        "description": "天气插件可以提供天气相关信息。你可以提供指定的地点信息、指定的时间点或者时间段信息,来精准检索到天气信息。",
                        "parameters": {
                            "type": "object",
                            "properties": {
                                "location": {
                                    "type": "string",
                                    "description": "地点,比如北京。"
                                },
                                "date": {
                                    "type": "string",
                                    "description": "日期。"
                                }
                            },
                            "required": [
                                "location"
                            ]
                        }
                    },
                    {
                        "name": "税率查询",
                        "description": "税率查询可以查询某个地方的个人所得税率情况。你可以提供指定的地点信息、指定的时间点,精准检索到所得税率。",
                        "parameters": {
                            "type": "object",
                            "properties": {
                                "location": {
                                    "type": "string",
                                    "description": "地点,比如北京。"
                                },
                                "date": {
                                    "type": "string",
                                    "description": "日期。"
                                }
                            },
                            "required": [
                                "location"
                            ]
                        }
                    }
                ]
            }
        }
    }

# 2.1.2参数说明

接口请求payload.functions字段解释如下:

参数名称 类型 必传 参数要求 参数说明
text array 列表形式,列表中的元素是json格式 元素中包含name、description、parameters属性
name string function名称 用户输入命中后,会返回该名称
description string function功能描述 描述function功能即可,越详细越有助于大模型理解该function
parameters json function参数列表 包含type、properties、required字段
parameters.type string 参数类型
parameters.properties string 参数信息描述 该内容由用户定义,命中该方法时需要返回哪些参数
properties.x.type string 参数类型描述 该内容由用户定义,需要返回的参数是什么类型
properties.x.description string 参数详细描述 该内容由用户定义,需要返回的参数的具体描述
parameters.required array 必须返回的参数列表 该内容由用户定义,命中方法时必须返回的字段

# 2.2接口响应

# 2.2.1示例如下

// 触发了function_call的情况下,只会返回一帧结果,其中status 为2
{"header":{"code":0,"message":"Success","sid":"cht000b41d5@dx18b851e6931b894550","status":2},"payload":{"choices":{"status":2,"seq":0,"text":[{"content":"","role":"assistant","content_type":"text","function_call":{"arguments":"{\"datetime\":\"今天\",\"location\":\"合肥\"}","name":"天气查询"},"index":0}]},"usage":{"text":{"question_tokens":3,"prompt_tokens":3,"completion_tokens":0,"total_tokens":3}}}}

# 2.2.2返回字段说明

字段名 类型 字段说明
function_call json function call 返回结果
function_call.arguments json 客户在请求体中定义的参数及参数值
function_call.name string 客户在请求体中定义的方法名称

# 3. 调用示例

# 3.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)查看

# 3.2 web API调用示例

注: demo只是一个简单的调用示例,不适合直接放在复杂多变的生产环境使用

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)

在线
咨询
建议
反馈
体验
中心