2.2 调用星火大模型的API

news2025/1/18 11:51:44

调用星火大模型的API

  • 1 申请API调用权限:
  • 2 调用原生星火 API
  • 3 统一API调用方式

项目仓库地址:https://github.com/datawhalechina/llm-universe

讯飞星火认知大模型,由科大讯飞于2023年5月推出的中文大模型,也是国内大模型的代表产品之一。同样,受限于中文语境与算力资源,星火在使用体验上与 ChatGPT 还存在差异,但是,作为与文心不分伯仲的国内中文大模型,仍然值得期待与尝试。相较于存在显著资源、技术优势的百度,科大讯飞想要杀出重围,成为国内大模型的佼佼者,需要充分利用相对优势,至少目前来看,星火并未掉队。同时,不知道是否因为讯飞 API 还没有全面开放,讯飞 API 的测试使用效果比文心更好,值得期待。
目前,讯飞星火大模型 API 已进入 β 测试阶段,每一个讯飞账户都可以申请若干 token 的试用。但是,相对于文心与 GPT 几乎完全一致的 API 调用方式,星火 API 需要使用 WebSocket 来进行调用,对企业友好,但对初学者、新手开发者来说调用难度较大。本章节将指导开发者如何将星火 API 封装为可直接通过 request 调用的 API 接口从而和其他大模型保持一致,也将介绍如何将其封装成个性化 LLM 嵌入 LangChain 使用。

1 申请API调用权限:

首先,申请API的调用权限,可以使用Datawhale提供的专属连接:通过该链接进入可以获得更多的免费额度,点击“免费试用”:
https://xinghuo.xfyun.cn/sparkapi?ch=dwKeloHY

image.png

如果是没有领取过免费试用包的用户,可以领取到 100000 token 的试用量;如果已领取过,就会自动跳转到下方购买产品的页面。完成领取后,点击上文中的“服务管理”即可进入控制台:
image.png

在该界面,我们就可以看到我们获取到的 APPID、APISecret 和 APIKey 了。

2 调用原生星火 API

星火 API 需要通过 WebSocket 进行连接,相对来说配置较为复杂,讯飞给出了配置示例 SparkApi.py 和连接示例 test.py,此处我们仅讲解 test.py 里的调用逻辑,配置示例代码直接使用即可。
注意,需要在环境中安装配置示例中的所需第三方库。

在使用第三方的spark 库之前,需要使用pip 方式进行安装:

pip install sparkapi-python 

如果你使用pycharm 进行调用测试:你可以在 notebook/ C2 调用大模型 API 文件夹下创建 :
ifly_api_test.py文件,在里面输入代码进行测试:

image.png

首先我们需要配置秘钥信息:

import SparkApi
#以下密钥信息从控制台获取
appid = ""     #填写控制台中获取的 APPID 信息
api_secret = ""   #填写控制台中获取的 APISecret 信息
api_key =""    #填写控制台中获取的 APIKey 信息

#用于配置大模型版本,默认“general/generalv2”
domain = "general"   # v1.5版本
# domain = "generalv2"    # v2.0版本

#云端环境的服务地址
Spark_url = "ws://spark-api.xf-yun.com/v1.1/chat"  # v1.5环境的地址
# Spark_url = "ws://spark-api.xf-yun.com/v2.1/chat"  # v2.0环境的地址

将下面的 APPID、APISecret 和 APIKey;填入上述对应部分:image.png

星火的调用传参和文心类似,也需要传入一个列表,列表中包括 role 和 prompt,我们首先定义一个从用户输入 prompt 生成传入参数的函数:

def getText(role, content, text = []):
    # role 是指定角色,content 是 prompt 内容
    jsoncon = {}
    jsoncon["role"] = role
    jsoncon["content"] = content
    text.append(jsoncon)
    return text

接着,我们将一个用户输入 prompt 封装为这样一个传入参数列表:

question = getText("user", "你好")
print(question)
[{'role': 'user', 'content': '你好'}]

image.png

然后再调用 SparkApi.py 中封装的 main 函数即可:

response = SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
print(response)

image.png

3 统一API调用方式

由于星火使用了 WebSocket 连接,不能直接使用** request **来进行访问,同其他大模型 API 访问方式具有一定差异。我们可以通过 FastAPI 将星火 API 封装成本地 API,从而实现统一的模型调用方式。

在我们完成本地 API 的封装后(spark_api.py),我们可以通过 uvicorn 命令启动:
在这里,使用anaconda prompt命令行来进行启动:
首先, cd 到 F:\python_project\LLM\llm-universe-main\notebook\C2 调用大模型 API 文件夹下:
可以看到 文件spark_api.py :

在 prompt 命令行里面输入

uvicorn spark_api:app

可以看到,已经启动: 启动之后,默认会在本地 8000 端口开启 API 服务。

启动 API 之后,我们可以向本地 8000 端口发起 Request 请求来访问 API:

def get_completion_spark(prompt, temperature = 0.1, max_tokens = 4096):

    api_url = "http://127.0.0.1:8000/spark"
    headers = {"Content-Type": "application/json"}
    data = {
        "prompt" : prompt,
        "temperature" : temperature,
        "max_tokens" : max_tokens}

    response = requests.post(api_url, headers=headers, json=data)
    return response.text
get_completion_spark("你好")

运行输出:报错: 只输出了 “”:
image.png

原因:
改: spark_api.py 的get_spark函数: 原始的get_spark函数里没有 个人控制台 信息;

image.png

填上个人信息之后,然后重新启动:

uvicorn spark_api:app

可以按 ctrl + c可以终止进程:
然后运行测试代码: 成功

image.png

出现问题1
我在pycharm里的 terminal 里输入指令 uvicorn spark_api:app 启动的时候,出现了报错;
38415628cc7cc0ed89ee8dc7a0eb29a.png

但是我已经安装了websocket, 而且我在prompt里面import websocket 也能成功:
image.png

在pycharm里面无法加载,但是在anaconda prompt里面可以加载:
所以我直接使用anaconda prompt到spark_api.py目录下,直接输入指令:uvicorn spark_api:app 进行启动:
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224892.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang环境搭建Win10(简洁版)

Golang环境搭建Win10 Golang环境搭建(Win10)一、前言二、Golang下载三、配置环境变量3.1、配置GOROOT3.2、配置GOPATH3.3、配置GOPROXY代理 Golang环境搭建(Win10) 一、前言 Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken…

Spring Framework 6.1 正式 GA

Spring Framework 6.1在运行时方面针对 JDK 21 和 Jakarta EE 10 上提供了一级支持,同时保留了 JDK 17 和 Jakarta EE 9 基线。Spring 还通过精细的元数据推理跟踪 GraalVM for JDK 21 的演变,同时暂时保持与 GraalVM 22.3 的兼容性。 主要变化 支持 JD…

运行ps软件提示由于找不到vcruntime140.dll无法继续执行代码怎么修复

今天我在打开ps时候突然电脑出现找不到vcruntime140.dll无法继续执行代码,我很困扰不知道什么原因,于是我花了一天时间在网上找了5个可以解决这个问题的方案分享给大家,同时我自己也解决了问题。分享给大家就是为了大家以后遇到这个问题不用像…

基于Java+SpringBoot+Vue3+Uniapp+TypeScript(有视频教程)前后端分离健身预约系统设计与实现

博主介绍:✌全网粉丝5W,全栈开发工程师,从事多年软件开发,在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战,博主也曾写过优秀论文,查重率极低,在这方面有丰富的经验…

Vite - 配置 - 文件路径别名的配置

为什么要配置别名 别名的配置,主要作用是为了缩短代码中的导入路径。例如有如下的项目目录: project-name| -- src| -- a| --b| --c| --d| --e| -- abc.png| -- index.html| -- main.js如果想在 main.js 文件中使用 abc.png ,则使用的路径是 &#xff1…

八股文-TCP的四次挥手

TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它的连接的建立和关闭过程都是经过精心设计的。在TCP连接关闭时,使用四次挥手来保证数据的完整传输和连接的正常终止。 漫画TCP的四次挥手 第一次挥手&#…

Azure Machine Learning - Azure AI 搜索中的矢量搜索

矢量搜索是一种信息检索方法,它使用内容的数字表示形式来执行搜索方案。 由于内容是数字而不是纯文本,因此搜索引擎会匹配与查询最相似的矢量,而不需要匹配确切的字词。本文简要介绍了 Azure AI 搜索中的矢量支持。 其中还解释了与其他 Azure…

pdf如何让多张图片在一页

pdf保存为一页六张图片的方法是: 1、打开pdf查看器,打开文档。 2、点击【打印】图标进入打印程序,选择打印范围。 3、在【打印处理】选项,选择【每张张上放置多页】。 4、自定义每页放置的图片张数为六张,并对打印排版预览设置。 5、设置打印…

大师学SwiftUI第16章 - UIKit框架集成

其它相关内容请见​​虚拟现实(VR)/增强现实(AR)&visionOS开发学习笔记​​ SwiftUI是一套新框架,因此并没有包含我们构建专业应用所需的所有工具。这意味着我们会需要求助于UIKit(移动设备)和AppKit(Mac电脑)等原…

管理类联考——逻辑——知识+记忆篇——综合推理——考点+记忆

文章目录 整体目录大纲法汇总分类法记忆宫殿法绘图记忆法 考点记忆/考点汇总——按大纲 局部数字编码法归类记忆法重点记忆法歌决记忆法谐音记忆法理解记忆法比较记忆法 本篇思路:根据各方的资料,比如名师的资料,按大纲或者其他方式&#xff…

SQL注入1

对sql进行一个小结 还有其他的注入 其他注入:堆叠注入,宽字节注入,二次注入 首先是数值和字符 id1 and 11和id1 and 12 如果这两个语句返回的页面不一样就说明是数字型 id1 and 11#和id1 and 12# 如果这两个语句返回的页面不一样就说明是字符型 常…

微服务下整合knife4j接口文档

前言:本文旨在解决微服务下通过网关访问所用服务的knife4j文档,无需再通过其他服务单独访问 功能模块配置: 1.配置类: 在这个文件中注意下basePackage的扫描路径,修改为对应controller下的路径。 Configuration EnableSwagger…

土地利用强度(LUI)综合指数

土地利用强度的概念可以解释为某一时间特定区域内人类活动对土地利用强度的干扰程度[1],其不仅反映不同土地利用类型本身的自然属性,也体现了人类利用土地的深度和广度,进而揭示在人类社会系统干扰下土地资源自然综合体自然平衡的保持状态[2]…

jbase打印导出实现

上一篇实现了虚拟M层,这篇基于虚拟M实现打印导出。 首先对接打印层 using Newtonsoft.Json; using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Xml;namesp…

【原创】java+swing+mysql鲜花购物商城设计与实现

前言: 本文主要介绍了鲜花购物商城的设计与实现。首先,通过市场需求,我们确定了鲜花商场的功能,通常的商城一般都是B/S架构,然而我们今天要用javaswing去开发一个C/S架构的鲜花商城,利用开发技术和工具&am…

Swagger(4):Swagger配置

在上一张的项目中创建SwaggerConfig,进行配置文档内容。 1 配置基本信息 Docket:摘要对象,通过对象配置描述文件的信息。 apiInfo:设置描述文件中info。参数类型ApiInfo select():返回ApiSelectorBuilder对象,通过对象调用buil…

Android Studio 写一个Java调用c++ 的demo

前提条件: 本地已经配置好了ndk环境,如果没有配置好,建议参考macos 配置ndk环境-CSDN博客 这篇链接。 新建一个Empty Project 比如我这里的Project的名字是HelloJNI,包名是com.example.hellojni 然后在src目录下,右键选择Add C …

PHP 中传值与传引用的区别,什么时候传值什么时候传引用?

传值:当使用传值的方式时,函数或方法会创建原始变量的一个副本,并将该副本传递给函数或方法。在函数或方法内部,对副本的任何修改都不会影响到原始变量。当函数或方法执行完毕后,副本被销毁,不再使用。 传引…

一款.NET开源的小巧、智能、免费的Windows内存清理工具 - WinMemoryCleaner

前言 我们在使用Windows系统的时候经常会遇到一些程序不会释放已分配的内存,从而导致电脑变得缓慢。今天给大家推荐一款.NET开源的小巧、智能、免费的Windows内存清理工具:WinMemoryCleaner。 使用Windows内存清理工具来优化内存,这样不必浪…

电子商务、搜索引擎

电子商务 域名 网络服务 网络樱肖 搜索引擎优化