学习大模型应用开发(第一章)

本文浅谈了大模型简介,调用星火大模型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 的试用量;如果已领取过,就会自动跳转到下方购买产品的页面。完成领取后,点击上文中的"服务管理"即可进入控制台:

在该界面,我们就可以看到我们获取到的 APPIDAPISecretAPIKey 了。

[. 调用原生星火 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

相关推荐
m0_7482548828 分钟前
Spring Boot实现多数据源连接和切换
spring boot·后端·oracle
庄周de蝴蝶1 小时前
一次 MySQL IF 函数的误用导致的生产小事故
后端·mysql
韩数1 小时前
Nping: 支持图表实时展示的多地址并发终端命令行 Ping
后端·rust·github
18号房客1 小时前
云原生后端开发(一)
后端·云原生
胡尔摩斯.2 小时前
SpringMVC
java·开发语言·后端·spring·代理模式
Bony-3 小时前
Go语言高并发实战案例分析
开发语言·后端·golang
ac-er88883 小时前
Golang并发机制以及它所使⽤的CSP并发模型
开发语言·后端·golang
Pandaconda3 小时前
【Golang 面试题】每日 3 题(六)
开发语言·笔记·后端·面试·职场和发展·golang·go
海绵波波1074 小时前
flask后端开发(2):URL与视图
后端·python·flask
理想青年宁兴星4 小时前
【SpringBoot】Java中isEmpty使用不当报错空指针
java·spring boot·后端