3
千帆大模型平台从沉浸式开箱体验到实际场景应用
大模型开发/技术交流
- 社区上线
- 开箱评测
- 文心大模型
2023.10.041654看过
前言
从去年年底到现在,最火的词无疑是人工智能相关的AIGC、人工智能大语言模型,从chatGPT到国内首个发布的文心一言,到了今天国内在人工智能大语言模型领域的技术研发越发成熟,迭代快速,应用简便。对于普通开发者甚至其他行业对人工智能感兴趣或者有应用需求的人而言,无疑是一个喜大普奔的好消息。特别是百度智能云千帆大模型平台的开放,一个一站式提供先进的生成式AI生产及应用全流程开发工具链。根据千帆的文档介绍:千帆不仅提供了包括文心一言底层模型(ERNIE-Bot)和第三方开源大模型(如图一),还提供了各种AI开发工具和整套开发环境,方便开发者轻松使用和开发大模型相关应用。支持数据管理、自动化模型SFT以及推理服务云端部署的一站式大模型定制服务,助力各行业的生成式AI应用需求落地。也就是说千帆不仅仅只是只有文心的核心,还集百家之长。让我们普通开发者方案能够更加简便地在千帆这个平台上一站式需求落地。大模型研发的难度和成本对普通人来说根本无法承受,千帆大模型平台的开放不管是对于企业或者是个人来说大大降低了开发成本,特别是对于普通开发者来说,简直是福音。无论是从时间成本还是金钱上,都比自己研发来得容易且简单。而且学习成本极低。况且开放的大平台的好处在于,开放之前平台的服务已经经过无数的测试以及经过市场严格的考验,从而大大降低了使用者的试错成本,而且从应用的角度来说,千帆大模型拥有大而全的应用场景以满足不同开发者的需求,且应用灵活。话不多说,咱们直接进入正题,下面通过沉浸式的体验来感受千帆大模型平台的强大,主打的就是一个真实。
(图一)
面向不同的企业需求,提供了不同的功能服务。例如,智能对话、智能输入法等通用应用场景,可在千帆直接体验文心一言企业级推理云服务,并进行业务集成;细分领域电销场景的商品介绍、推广文章等需要对推理结果进行定制调整,则可在文心千帆使用模型在线微调训练功能,快速生成行业场景定制模型服务,满足用户特定需求。
就连提示词千帆大模型平台都提供了丰富的prompt模板:(如下图)
(图二)
千帆大模型平台的初体验
1.通过在线测试体验千帆大模型的服务能力
首先咱们先体验一下大家最常用生成式AI以及提示词的简单的使用流程如下:
创建应用->创建提示词模板->在线测试或者使用API调用(如下图)
1.创建应用
填写名称和简单描述,选择相应的服务即可,然后点创建按钮进行应用创建
2.创建prompt模板
可以自制模板也可以使用预制的模板,当你的提问获取不到你期望的答案时,你还可以用prompt优化功能,对Prompt语料进行内容质量和结构上的优化,便于获得更符合期望的大模型推理结果.
提示词优化提供两种方式,在线单个模板优化以及批量优化
3.在线体验prompt模板在某个人工智能大语言模型下,不同模型的推理能力
针对生成的答案,可以通过对prompt的优化来达到自己期望的结果
以上就是千帆平台最简简单的体验.不需要写一行代码就可以轻松使用生成式AI.在线测试除了pc端还是可以通过移动端进行测试(如下图)
前面我们是通过千帆大模型平台提供的在线测试功能对我们创建好的应用和prompt模板进行测试,上文当中我们还提到可以通过调用API的方式来使用大模型的服务,接着我们就通过API调用的方式来体验千帆大模型开放平台的灵活应用
2.通过调用API的方式调用使用千帆大模型
在前的截图中我们可以看到,创建应用之后,我们可以获取到AppID、API Key、Secret Key 等相关信息,我们调用API的时候需要使用这些作为鉴权凭证去调用平台的相关接口,这一步和百度云其他API服务的调用是一样的,非常简单,学习成本可忽略不计
API调用流程
API调用流程如下图所示:
创建一个千帆应用。根据实际需求创建千帆应用,创建成功后,获取AppID、API Key、Secret Key 等信息。 API 授权。对应用的 AppID 进行授权。 获取接口访问凭证 access_token 。根据第1步获取的 API Key 和 Secret Key ,调用获取access_token接口获取 access_token ,通过 access_token 鉴权调用者身份。 调用API接口。例如调用ERNIE-Bot相关接口,详见API列表
创建的具体流程我们上面已经介绍过,下面我们直接进入编码阶段,上面引用的文档给出的流程描述得非常详细,我们按照上面的文字描述通过Python一步步实现API的调用,用法简单到令人发指,使用API的方式,最优秀地方就是不受编程语言的限制,即语言无关性.
1.通过API授权接口获取access_token来获得调用大模型相应接口的权限,本例中,我们主要是调用ERNIE-Bot提供的会话接口,来实现生成式的对话功能.
获取access_token的代码如下:
接口请求url:https://aip.baidubce.com/oauth/2.0/token?client_id=【API Key】&client_secret=【Secret Key】&grant_type=client_credentials
import requestsimport jsondef getAccessToken():#client_id=你的API Key&client_secret=你的Secret Key,在创建应用的列表页可以获取到url = "https://aip.baidubce.com/oauth/2.0/token?client_id=jamcQPeWrTyS1LTCTCEHug9A&client_secret=f2dWmKb1Qq4T5e6F5O8A7CLyETccE2og&grant_type=client_credentials"payload = json.dumps("")headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")if __name__ == '__main__':access_token = getAccessToken()print("accessToken如下:\r\n"+access_token)#注意:access_token默认有效期30天,生产环境注意及时刷新
注意:access_token默认有效期30天,生产环境注意及时刷新
执行结果如下:
2.通过获取的access_token进行大模型接口的调用,以调用ERNIE-Bot提供的对话接口为例
请求方式:POST
具体的请求参数如下:
详细的参数介绍这里不再赘述,感兴趣的同学请访问此链接:https://cloud.baidu.com/doc/WENXINWORKSHOP/s/jlil56u11
在多轮对话中,请求参数message需要注意的点:
聊天上下文信息。说明:(特别是最后标红的两点)
(1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话
(2)最后一个message为当前请求的信息,前面的message为历史对话信息
(3)必须为奇数个成员,成员中message的role必须依次为user(or function)、assistant
(4)最后一个message的content长度(即此轮对话的问题)不能超过3000 token;如果messages中content总长度大于3000 token,系统会依次遗忘最早的历史会话,直到content的总长度不超过3000 token
(1)messages成员不能为空,1个成员表示单轮对话,多个成员表示多轮对话
(2)最后一个message为当前请求的信息,前面的message为历史对话信息
(3)必须为奇数个成员,成员中message的role必须依次为user(or function)、assistant
(4)最后一个message的content长度(即此轮对话的问题)不能超过3000 token;如果messages中content总长度大于3000 token,系统会依次遗忘最早的历史会话,直到content的总长度不超过3000 token
注:单轮和多轮请求代码基本一致,只是请求参数中的message元素的个数不同而已,在多轮请求中message的元素必须为奇数且必须依次为user,assistant.否则会出现报错.
单轮对话具体代码如下:
#coding:utf-8import requestsimport jsondef getAccessToken():"""使用 API Key,Secret Key 获取access_token"""url = "https://aip.baidubce.com/oauth/2.0/token?client_id=jamcQPeWrTyS1LTCTCEHug9A&client_secret=f2dWmKb1Qq4T5e6F5O8A7CLyETccE2og&grant_type=client_credentials"payload = json.dumps("")headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")def main():url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + getAccessToken()payload = json.dumps({"messages": [{"role": "user","content": "广州今天的天气怎样"}]})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)print(response.text)print("广州今天的天气情况如下:\r\n "+response.json().get("result"))if __name__ == '__main__':main()
执行结果如下:
多轮对话的请求如下:(多轮对话的请求只是message中参数的个数不同)
#coding:utf-8import requestsimport jsondef getAccessToken():"""使用 API Key,Secret Key 获取access_token"""url = "https://aip.baidubce.com/oauth/2.0/token?client_id=jamcQPeWrTyS1LTCTCEHug9A&client_secret=f2dWmKb1Qq4T5e6F5O8A7CLyETccE2og&grant_type=client_credentials"payload = json.dumps("")headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")def main():url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + getAccessToken()payload = json.dumps({"messages": [{"role": "user","content": "广州今天的天气怎样"},{"role": "assistant","content": "广州现在气温33℃,多云,西北风1级,2023年10月4日(今日)气温26~36℃,空气质量优,空气质量指数47。"},{"role": "user","content": "今天广州天河区会下雨吗?"},]})headers = {'Content-Type': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)print(response.text)print("今天广州天河区会下雨吗?回答如下:\r\n "+response.json().get("result"))if __name__ == '__main__':main()
执行结果如下:
就这样简简单单即可以灵活调用百度自行研发的大语言模型大模型ERNIE-Bot的对话功能,注:本文的例子中,每次请求都会请求获取access_token,在实际的使用中,为了避免频繁获取access_token,在过期之前我们可以将access_token以及它的有效期保存到json文件,数据库或者其他类型的配置文件中,过期之前我们从存储的文件中获取,过期后,就通过请求接口获取新的access_token,同时更新存储文件中的access_token及过期时间。
对话接口的流式请求
除了上面的单轮和多轮对话外,还有流式对话请求,调用也很简单,只需要在message中增加一项"stream": True,然后在请求时添加一项stream=True如:response = requests.request("POST", url, headers=headers, data=payload, stream=True),流式对话请求,简单粗暴点来说,实际就是将响应结果分多次返回,以达到实时请求的互动效果
#coding:utf-8import requestsimport jsonimport sseclientdef getAccessToken():"""使用 API Key,Secret Key 获取access_token"""url = "https://aip.baidubce.com/oauth/2.0/token?client_id=jamcQPeWrTyS1LTCTCEHug9A&client_secret=f2dWmKb1Qq4T5e6F5O8A7CLyETccE2og&grant_type=client_credentials"payload = json.dumps("")headers = {'Content-Type': 'application/json','Accept': 'application/json'}response = requests.request("POST", url, headers=headers, data=payload)return response.json().get("access_token")def main():url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + getAccessToken()payload = json.dumps({"messages": [{"role": "user","content": "广州今天的天气怎样"},{"role": "assistant","content": "广州现在气温33℃,多云,西北风1级,2023年10月4日(今日)气温26~36℃,空气质量优,空气质量指数47。"},{"role": "user","content": "给我推荐一些自驾游路线"},],"stream": True})headers = {'Content-Type': 'application/json'}#response = requests.request("POST", url, headers=headers, data=payload)response = requests.request("POST", url, headers=headers, data=payload, stream=True)# 如果请求的结果没有设置编码,就设置为utf-8if response.encoding is None:response.encoding = 'utf-8'print("回答如下:\r\n " )for line in response.iter_lines(decode_unicode=True):# print(json.loads(json.dumps('['+line[6:]+']')))if line: # 每一个循环都是一个json数据texts = json.loads('[' + line[6:] + ']')#print(texts[0])print(texts[0]['result'])if __name__ == '__main__':main()
流式请求执行结果如下:
实际应用场景案例
上面的例子中,我们通过非常简短的代码就可以快速地调用千帆大模型平台中对话的相关接口,实现对话功能,这在我们目前的实际应用中非常广泛,比如:结合公众号,小程序,或者嵌入到其它应用中作为线上客服,提供一些比较专业性的自助服务,这比以前的关键字回复,更加灵活,回答更加准确,更具专业性.。结合百度的文字转语音以及语音识别接口可以实现语音咨询对话,或者将接口响应的文字结果通过文字转语音接口转换为语音,接入呼叫中心可以实现电话客服的功能,从而提升服务的效率和准确性。甚至我们还可以使用对话接口实现简单的推荐系统。在这些常用的应用场景中我们可以将应用设定在某个角色范围,为了让用户得到更合适的答案,我们可以通过设定prompt模板,将用户的沟通限定在特定的范围,还可以通过对prompt提示词的优化,以帮助用户更好地获得期望的回答。除此之外,如果你有更高的要求,需要更专业的模型,需要得到更加准确的预测结果,你还可以在千帆大模型平台上,训练自己的模型,来实现更具有针对性和专业性的应用场景。以前想要自己实现这些应用功能,需要花费更多的时间,更多的资源和成本,而且门槛较高,对普通的开发者而言不够友好。而现在这样的应用场景,在百度云平台上只需要很小的成本,即可整套方案快速落地。而且千帆大模型平台还提供了贴切的快速云部署服务,可以将训练完成的模型部署在百度云服务器,通过云服务接口调用模型。同时支持公有化和私有化部署两种方案。不管是简单还是复杂应用场景,千帆大模型平台都可以很好应对。不得不感叹,人工智能时代,科学技术升级迭代之快,简直是瞬息万变。关于大模型的训练,请听下回分解!
评论