本文浅谈了大模型简介,调用星火大模型api,关于本地封装API在官方文档有,学习更多可点击官方学习文档。下一篇会说一些大模型开发的流程。
简介
最近搞搞本来想参加datawhale的11组队学习来着,由于各种时间冲突,最后只参加了动手学习大模型应用开发,本篇记录一些学习过程。这是官方学习文档 这是一个面向小白开发者的大模型应用开发教程,结合个人知识库助手项目,通过一个课程完成大模型开发的重点入门,主要内容包括:
- 大模型简介
- 如何调用大模型 API
- 大模型开发流程及架构
- 数据库搭建
- Prompt 设计
- 验证迭代
- 前后端开发
大模型简介
近几年所有的gpt本质上都是大模型 datawhalechina.github.io/llm-univers... 看原文比较好。(其实是懒得写字)
此图来源于([datawhalechina.github.io/llm-univers...
如何调用大模型API
API需要申请,具体可看学习文档,里面有关于Chatgpt,文心一言,智谱。如有需要,可评论获取,这里只介绍讯飞星火。
1. 讯飞星火认知大模型
由科大讯飞于2023年5月推出的中文大模型,也是国内大模型的代表产品之一。讯飞 API 的测试使用效果比文心更好,值得期待。
目前,讯飞星火大模型 API 已进入测试阶段,每一个讯飞账户都可以申请若干 token 的试用。星火 API 需要使用 WebSocket 来进行调用,对初学者、新手开发者来说调用难度较大。本节讲开发者如何将星火 API 封装为可直接通过 request 调用的 API 接口从而和其他大模型保持一致,也将介绍如何将其封装成个性化 LLM 嵌入 LangChain 使用。
申请调用权限
讯飞的权限申请简单易操作得多:
首先进入到星火认知大模型首页,点击"免费试用": 如果是没有领取过免费试用包的用户,可以领取到 100000 token 的试用量;如果已领取过,就会自动跳转到下方购买产品的页面。完成领取后,点击上文中的"服务管理"即可进入控制台:
在该界面,我们就可以看到我们获取到的 APPID
、APISecret
和 APIKey
了。
[. 调用原生星火 API]
星火 API 需要通过 WebSocket 进行连接,相对来说配置较为复杂,讯飞给出了配置示例 SparkApi.py 和连接示例 test.py,此处我们仅讲解 test.py 里的调用逻辑,配置示例代码直接使用即可。
注意,需要在环境中安装配置示例中的所需第三方库。
首先我们需要配置秘钥信息:
ini
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环境的地址
星火的调用传参,要传入一个列表,列表中包括 role 和 prompt,我们首先定义一个从用户输入 prompt 生成传入参数的函数:
scss
def getText(role, content, text = []):
# role 是指定角色,content 是 prompt 内容
jsoncon = {}
jsoncon["role"] = role
jsoncon["content"] = content
text.append(jsoncon)
return text
接着,我们将一个用户输入 prompt 封装为这样一个传入参数列表:
ini
question = getText("user", "你好")
question
css
[{'role': 'user', 'content': '你好'}]
然后再调用 SparkApi.py 中封装的 main 函数即可:
ini
response = SparkApi.main(appid,api_key,api_secret,Spark_url,domain,question)
response
你好!很高兴为您提供帮助。请问有什么问题我可以帮您解答吗?
4. 统一 API 调用方式
由于星火使用了 WebSocket 连接,不能直接使用 request 来进行访问。我们可以通过 FastAPI 将星火 API 封装成本地 API,从而实现统一的模型调用方式。
在我们完成本地 API 的封装后(spark_api.py),我们可以通过 uvicorn 命令启动:
diff
! uvicorn spark_api:app
启动之后,默认会在本地 8000 端口开启 API 服务。
启动 API 之后,我们可以向本地 8000 端口发起 Request 请求来访问 API:
ini
import requests
api_url = "http://127.0.0.1:8000/spark"
headers = {"Content-Type": "application/json"}
data = {
"prompt" : "你好",
"temperature" : 0.2,
"max_tokens" : 3096}
response = requests.post(api_url, headers=headers, json=data)
response.text
arduino
'"你好!有什么我可以帮助你的吗?"'
同样,我们可以用一个函数来封装 requests 访问的细节:
ini
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
scss
get_completion_spark("你好")
arduino
'"你好!有什么我可以帮助你的吗?"'
星火 API 同样可以制作成自定义 LLM 并接入 LangChain,,如有需要可查看项目代码/project/llm/spark_llm。