当前位置: 首页 > news >正文

【动手学大模型开发】使用 LLM API:讯飞星火

🌈 嗨,我是青松,很高兴遇到你!

🌟 希望用我的经验,让每个人的AI学习之路走的更容易些~

🔥 专栏:大模型(LLMs)高频面题全面整理(★2025最新版★)| 动手学大模型开发


目录

3.1 API 申请指引

3.2 通过 SDK 方式调用(推荐使用)

3.3 通过 WebSocket 调用


讯飞星火认知大模型,由科大讯飞于 2023 年 5 月推出的中文大模型,也是国内大模型的代表产品之一。同样,受限于中文语境与算力资源,星火在使用体验上与 ChatGPT 还存在差异,但是,作为与文心不分伯仲的国内中文大模型,仍然值得期待与尝试。相较于存在显著资源、技术优势的百度,科大讯飞想要杀出重围,成为国内大模型的佼佼者,需要充分利用相对优势,至少目前来看,星火并未掉队。

3.1 API 申请指引

讯飞星火平台提供了 Spark3.5 Max、Spark4.0 Ultra 等多种模型的免费额度,我们可以在平台领取免费 tokens 额度,点击免费领取

领取免费试用包后,点击进入控制台并创建应用,创建完成后,就可以看到我们获取到的 APPIDAPISecret 和 APIKey 了:

星火提供了两种调用模型的方式,一种是 SDK 方式调用,上手难度小,推荐初学者使用;另一种是 WebSocket 方式调用,对企业友好,但对初学者、新手开发者来说调用难度较大。下面会具体介绍这两种调用方式。

3.2 通过 SDK 方式调用(推荐使用)

首先执行以下代码,将密钥加载到环境变量中。

import osfrom dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中  
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())Copy to clipboardErrorCopied

然后我们使用 SDK,封装一个 get_completion 函数供后续使用。

from sparkai.llm.llm import ChatSparkLLM, ChunkPrintHandler
from sparkai.core.messages import ChatMessagedef gen_spark_params(model):'''构造星火模型请求参数'''spark_url_tpl = "wss://spark-api.xf-yun.com/{}/chat"model_params_dict = {# v1.5 版本"v1.5": {"domain": "general", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v1.1") # 云端环境的服务地址},# v2.0 版本"v2.0": {"domain": "generalv2", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v2.1") # 云端环境的服务地址},# v3.0 版本"v3.0": {"domain": "generalv3", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v3.1") # 云端环境的服务地址},# v3.5 版本"v3.5": {"domain": "generalv3.5", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v3.5") # 云端环境的服务地址}}return model_params_dict[model]def gen_spark_messages(prompt):'''构造星火模型请求参数 messages请求参数:prompt: 对应的用户提示词'''messages = [ChatMessage(role="user", content=prompt)]return messagesdef get_completion(prompt, model="v3.5", temperature = 0.1):'''获取星火模型调用结果请求参数:prompt: 对应的提示词model: 调用的模型,默认为 v3.5,也可以按需选择 v3.0 等其他模型temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。'''spark_llm = ChatSparkLLM(spark_api_url=gen_spark_params(model)["spark_url"],spark_app_id=os.environ["SPARK_APPID"],spark_api_key=os.environ["SPARK_API_KEY"],spark_api_secret=os.environ["SPARK_API_SECRET"],spark_llm_domain=gen_spark_params(model)["domain"],temperature=temperature,streaming=False,)messages = gen_spark_messages(prompt)handler = ChunkPrintHandler()# 当 streaming设置为 False的时候, callbacks 并不起作用resp = spark_llm.generate([messages], callbacks=[handler])return respCopy to clipboardErrorCopied
# 这里直接打印输出了正常响应内容,在生产环境中,需要兼容处理响应异常的情况
get_completion("你好").generations[0][0].textCopy to clipboardErrorCopied
'你好!有什么我能帮忙的吗?'Copy to clipboardErrorCopied

3.3 通过 WebSocket 调用

通过 WebSocket 进行连接的方式相对来说配置较为复杂,讯飞给出了调用示例 ,点击对应的语言调用示例下载即可。这里我们以 Python 调用示例为例进行讲解,下载后我们可以得到一个 sparkAPI.py 文件,文件中包含了服务端封装和客户端调用的实现。

需要注意的是,直接运行官方示例的 sparkAPI.py 文件会有报错,需要做如下修改:

(1)注释掉如下行:import openpyxl(代码中并未使用到这个包,如未安装,则会提示 ModuleNotFoundError);

(2)修改 on_close 函数(该函数接收 3 个入参),修改后的函数如下:

# 收到 websocket 关闭的处理
def on_close(ws, close_status_code, close_msg):  print("### closed ###")Copy to clipboardErrorCopied

然后我们运行一下修改后的官方示例代码。注意:在运行之前,还需要把在上一节中获取到的 API 的密钥赋值给 main 函数的入参 appidapi_secretapi_key

执行 python sparkAPI.py,可以得到如下的输出结果:

可以注意到,官方示例的输出结果中除了 LLM 的回答内容外,还包含标识回答结束(“#### 关闭会话”、“### close ###”)的打印日志,如果只想保留原始输出内容,可以通过修改源代码来进行优化。

我们基于 sparkAPI.py 文件,同样封装一个 get_completion 函数,用于后续章节的调用。

首先执行如下代码,读取 .env 文件的密钥配置。

import os
import sparkAPIfrom dotenv import load_dotenv, find_dotenv# 读取本地/项目的环境变量。# find_dotenv() 寻找并定位 .env 文件的路径
# load_dotenv() 读取该 .env 文件,并将其中的环境变量加载到当前的运行环境中  
# 如果你设置的是全局的环境变量,这行代码则没有任何作用。
_ = load_dotenv(find_dotenv())Copy to clipboardErrorCopied

星火大模型 API 当前有 V1.5、V2.0、V3.0 和 V3.5 四个版本,四个版本独立计量 tokens。get_completion 函数封装如下:

def gen_spark_params(model):'''构造星火模型请求参数'''spark_url_tpl = "wss://spark-api.xf-yun.com/{}/chat"model_params_dict = {# v1.5 版本"v1.5": {"domain": "general", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v1.1") # 云端环境的服务地址},# v2.0 版本"v2.0": {"domain": "generalv2", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v2.1") # 云端环境的服务地址},# v3.0 版本"v3.0": {"domain": "generalv3", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v3.1") # 云端环境的服务地址},# v3.5 版本"v3.5": {"domain": "generalv3.5", # 用于配置大模型版本"spark_url": spark_url_tpl.format("v3.5") # 云端环境的服务地址}}return model_params_dict[model]def get_completion(prompt, model="v3.5", temperature = 0.1):'''获取星火模型调用结果请求参数:prompt: 对应的提示词model: 调用的模型,默认为 v3.5,也可以按需选择 v3.0 等其他模型temperature: 模型输出的温度系数,控制输出的随机程度,取值范围是 0~1.0,且不能设置为 0。温度系数越低,输出内容越一致。'''response = sparkAPI.main(appid=os.environ["SPARK_APPID"],api_secret=os.environ["SPARK_API_SECRET"],api_key=os.environ["SPARK_API_KEY"],gpt_url=gen_spark_params(model)["spark_url"],domain=gen_spark_params(model)["domain"],query=prompt)return responseCopy to clipboardErrorCopied
get_completion("你好")Copy to clipboardErrorCopied
你好!有什么我能帮忙的吗?Copy to clipboardErrorCopied

需要注意的是,在官方示例 sparkAPI.py 文件中,temperature 参数并不支持外部传入,而是固定值为 0.5,如果不想使用默认值,可以通过修改源代码实现支持外部参数传入,这里就不额外讲解了。

相关文章:

  • ShenNiusModularity项目源码学习(25:ShenNius.Admin.Mvc项目分析-10)
  • Go语言Context机制深度解析:从原理到实践
  • 【angular19】入门基础教程(四):默认的css隔离作用域
  • 项目三 - 任务1:采用面向对象方式求三角形面积
  • Tauri 跨平台开发指南及实战:用前端技术征服桌面应用(合集-万字长文)
  • Javascript 中作用域的理解?
  • 【AI提示词】第一性原理
  • k8s学习笔记
  • 2025年KBS新算法 SCI1区TOP:长颖燕麦优化算法AOO,深度解析+性能实测
  • 【计算机视觉】深度解析MediaPipe:谷歌跨平台多媒体机器学习框架实战指南
  • 海外App数据隐私架构实战:构建GDPR、CCPA合规的全栈解决方案
  • 打造美观 API 文档:Spring Boot + Swagger 实战指南
  • 案例速成GO+Socket,个人笔记
  • Linux 服务管理两种方式service和systemctl
  • 《数学物理方程》——第一章 引入与基本概念
  • AGILE:开启LLM Agent强化学习的创新框架
  • 【dify—3】拉取镜像、本地访问dify
  • AimRT 从零到一:官方示例精讲 —— 六、pb_chn示例.md
  • 香港科技大学广州|可持续能源与环境学域博士招生宣讲会—四川大学专场
  • 【Fifty Project - D20】
  • 厚重与潮流交织,淮安展现“运河之都”全新城市想象
  • 被算法重塑的世界,人与技术如何和谐共处
  • 韩国下届大选执政党初选4进2结果揭晓,金文洙、韩东勋胜出
  • 马上评丨又见酒店坐地起价,“老毛病”不能惯着
  • 第二艘国产大型邮轮实现坞内起浮,重点强化邮轮供应链本土化建设
  • 报告显示2024年全球军费开支增幅达冷战后最大