1-讯飞星火大模型API调用示例解析

1官网链接

  1. 比赛官网:2024 iFLYTEK A.I.开发者大赛-讯飞开放平台 (xfyun.cn)
  2. 控制台官网:控制台-讯飞开放平台 (xfyun.cn)

2星火模型python调用示例

  1. 示例链接:https://xfyun-doc.xfyun.cn/lc-sp-PythonDemo-1716370485358.zip;
  2. 使用上述示例时,执行到on_close时报参数数量不匹配的错误;因此将def on_close(ws):改为def on_close(ws,*args):;以接收剩余的多个参数;
    1. 修改之后的补充了一些备注的示例文件链接:1-websocket调用星火大模型-简单示例-无上下文.py
    2. 注意:要换成自己的appidapi_secretapi_key

2.1步骤总结

  1. 初始化参数对象,包括设置自己的api、连接的大模型的接口地址等;对应Ws_Param.__init__函数;

  2. 将连接地址与自己的鉴权信息进行拼接,生成最终的请求用的url【详细解释见官网WebSocket协议通用鉴权URL生成说明 | 讯飞开放平台文档中心 (xfyun.cn)】;对应Ws_Param.create_url方法;

  3. 使用上面的url创建一个WebSocketApp对象,其中传入了自己实现了的四个回调函数(on_message, on_error, on_close, on_open);接着就可以通过run_forever方法启动一个websocket客户端;

    1. 虽然这个方法可以建立永久的连接,但是在官网说了星火认知大模型接口默认采用短链接的模式,即接口每次将结果完整返回给用户后会主动断开链接,用户在下次发送请求的时候需要重新握手链接。

    2. 收到websocket连接建立时会先调用on_open方法:

      1. 该方法先开启一个新的线程,将使用WebSocket对象的send方法将消息发送到服务器
      2. 消息是一个json格式的字符串,由gen_params方法生成并返回;
      3. 关于消息的各个部分的含义,详见星火认知大模型Web API文档 | 讯飞开放平台文档中心 (xfyun.cn)1.3.1 请求参数部分的解释;
    3. 之后将收到来自服务器的消息,因此将调用on_message方法:

      1. 通过debug可以发现,这里收到的消息是类似流式输出的方式,每次只接收完整回复的一小部分内容,如下图所示;因此on_message方法将被多次调用,直到所有的回复都被接收;

        在这里插入图片描述

      2. 关于模型回复的消息各个部分的含义详见星火认知大模型Web API文档 | 讯飞开放平台文档中心 (xfyun.cn)1.4 接口响应部分;

      3. 当最后一部分消息返回之后,上图中的status=2

      4. 之后会直接调用WebSocketApp对象的close()方法关闭连接;

      5. 下图为一次连接请求完成之后收到的完整回复:

        在这里插入图片描述

    4. 最后,收到websocket关闭时将调用on_close方法打印一些信息;

3星火模型python调用示例-带上下文

  1. 示例链接:https://xfyun-doc.xfyun.cn/lc-sp-PythonDemo(content)-1716370504832.zip;
  2. 加入注释之后的示例代码链接:2-PythonDemo(content);注意:要换成自己的appidapi_secretapi_key

3.1步骤总结

  1. 这个示例将2星火模型python调用示例章节的代码作为类进行引用;仅额外在SparkPythondemo.py中增加了几个用于处理上下文的函数和代码;

  2. PythonDemo(content)\SparkApi.py文件与2星火模型python调用示例章节的代码的区别主要有以下几点:

    1. 增加了answersid全局变量;并在on_message方法中将模型返回的结果存放到了answer中;当然,on_message方法中对模型返回的结果依旧做了输出;
    2. gen_params方法生成请求参数时,payload.message.text参数不是直接指定了,而是由变量代替;这样可以从控制台输入问题,并经过处理后传入;
    3. 再就是,有一些变量的名称发生了变化;
  3. 再来看PythonDemo(content)\SparkPythondemo.py文件:

    1. 原先在PythonDemo(content)\SparkApi.py文件中的密钥、主机地址等信息都在这里;

    2. 上下文列表text作为全局变量;后续在调用getText方法时上下文列表将不断得到扩充;从而实现具有连续上下文调用大模型进行回答的功能

    3. 使用getlengthchecklen方法计算当前上下文列表中所有content的长度之和,判断有无超出长度上限;若超过上限,则将上下文列表中最早的消息删除掉;

    4. 通过执行下述语句,将控制台输入的信息封装成符合格式要求的带上下文的text列表,并使用之前的socket方法与模型交流,得到的答案存在SparkApi.answer中;

      while(1):
          Input = input("\n" +"我:") # 控制台读入问题
          question = checklen(getText("user",Input))
          SparkApi.answer ="" # 每次循环都将答案置为空,这样每次输出的答案就是当前问题的答案了
          print("星火:",end ="")
          SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
          # print(SparkApi.answer)
          getText("assistant",SparkApi.answer)
      

      讯飞星火大模型带上下文的API调用与提问示例

  • 14
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值