一、基于千帆API调用项目简介
【千帆竞发 谁与争锋】基于文心一言千帆API的大模型应用,可摆脱大模型技术难关,快速将大模型能力集成到你的应用里去,快速落地你的Idea!!!
- 你是不是有很多大模型想法,但是由于技术原因无法实现?
- 你是不是有一些通过web页面实现的prompt,但是一直想要chatgpt模式的api构建自己应用,但苦于无接口可调用?
- 你想要集成文心一言到你的项目里,苦于没有代码参考?
- 你想要多伦对话跟文心一言一样的网页版?
- 你想要你的大模型智能?
大家期待文心一言API开放好几天了,那么项目来了,本项目是基于千帆API构建自己的聊天机器人,非常方便。
1.效果图
2.前情提要
- 需要了解一点gradio知识 www.gradio.app/
- 需要了解一点python知识
二、开通千帆 & 学习帮助文档
1.申请 cloud.baidu.com/product/wen...
现在通过速度很快,基本上2小时就通过。
2.申请大模型权限
3.申请鉴权
url: cloud.baidu.com/doc/WENXINW...
python
# 填充API Key与Secret Key
import requests
import json
def main():
url = "https://aip.baidubce.com/oauth/2.0/token?client_id=【API Key】&client_secret=【Secret Key】&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 = main()
print(access_token)
4.大模型使用文档
url:cloud.baidu.com/doc/WENXINW...
python
import requests
import json
def get_access_token():
"""
使用 API Key,Secret Key 获取access_token,替换下列示例中的应用API Key、应用Secret Key
"""
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=[应用API Key]&client_secret=[应用Secret Key]"
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=" + get_access_token()
payload = json.dumps({
"messages": [
{
"role": "user",
"content": "请介绍一下你自己"
},
{
"role": "assistant",
"content": "我是百度公司开发的人工智能语言模型,我的中文名是文心一言,英文名是ERNIE-Bot,可以协助您完成范围广泛的任务并提供有关各种主题的信息,比如回答问题,提供定义和解释及建议。如果您有任何问题,请随时向我提问。"
},
{
"role": "user",
"content": "我在上海,周末可以去哪里玩?"
},
{
"role": "assistant",
"content": "上海是一个充满活力和文化氛围的城市,有很多适合周末游玩的地方。以下是几个值得推荐的地方:
1. 上海科技馆:上海科技馆是中国大陆最大的科技馆之一,有许多互动展览和科学实验室,可以让您了解科技的发展历史和最新成果。
2. 上海博物馆:上海博物馆是一座集艺术、历史和文化于一体的博物馆,有许多精美的艺术品和文物,可以让您深入了解中国和世界的文化历史。
3. 外滩:外滩是上海的标志性景点之一,有许多高楼大厦和繁华的商业街区,是欣赏黄浦江美景和城市风貌的好去处。
4. 上海迪士尼乐园:上海迪士尼乐园是世界上最大的迪士尼主题公园之一,有许多精彩的游乐项目和演出,可以让您尽情享受娱乐和欢乐。
5. 上海野生动物园:上海野生动物园是一个以自然保护为主题的野生动物园,有许多珍稀动物和植物,可以让您近距离接触大自然。
这些地方都是上海周末游玩的好去处,可以根据自己的兴趣和需求选择合适的行程。"
},
{
"role": "user",
"content": "上海有哪些美食?"
}
]
})
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
main()
三、gradio脚本编写
1. 基本思路
- 1.获取的token
- 2.调用大模型接口
- 3.绑定gradio展示
2.鉴权token获取
注意:client_id client_secret替换成你自己的
python
import requests
import json
def main():
url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=xxxxxxxxxxxxxxxxx&client_secret=yyyyyyyyyyyyyy"
payload = ""
headers = {
'Content-Type': 'application/json',
'Accept': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)
if __name__ == '__main__':
main()
3.gradio代码
注意:mykey替换成你自己的
python
# coding=utf-8
import os
# os.system('pip install -U gradio')
# coding=utf-8
import gradio as gr
import json
import requests
from pprint import pprint
def clear_session():
return '', None
# 定义入口
with gr.Blocks() as demo:
gr.Markdown("""<img src="https://bce.bdstatic.com/p3m/common-service/uploads/banner_ae19e27.png"/>
<h1><center>千帆-Webui</center></h1>
本项目基于文心千帆API, 提供自动问答应用. <br>
欢迎品尝<br></center></font>""")
chatbot = gr.Chatbot(label="千帆 WebUI")
message = gr.Textbox(label='请输入问题', value="请介绍一下你自己?")
state = gr.State()
clear_history = gr.Button("🧹 清除历史对话")
send = gr.Button("🚀 发送")
# aisutdio 不支持ClearButton
# clear = gr.ClearButton([msg, chatbot])
# 调用API
def predict(message, chat_history):
tmp = {
"role": "user",
"content": message
}
if chat_history == None:
chat_history = []
# mykey 换自己的
mykey = 'XXX'
url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions?access_token=" + mykey
mess_dict["messages"].append(tmp)
pprint("mess_dict")
pprint(mess_dict)
payload = json.dumps(mess_dict)
headers = {
'Content-Type': 'application/json'
}
response = requests.request("POST", url, headers=headers, data=payload)
print(json.loads(response.text))
try:
content = json.loads(response.text)['result']
except Exception as e:
content = str(e)
tmp = {
"role": "assistant",
"content": content
}
mess_dict["messages"].append(tmp)
chat_history.append((message, content))
print(content)
print(chat_history)
return "", chat_history, chat_history
# 回车提交
send.click(predict,
inputs=[
message, state
],
outputs=[message, chatbot, state])
clear_history.click(fn=clear_session,
inputs=[],
outputs=[chatbot, state],
queue=False)
message.submit(predict,
inputs=[
message, state
],
outputs=[message, chatbot, state])
gr.Markdown("""**提醒**:<br>
- 建议使用自己的api
- 1.回车提交
- 2.建议使用自己的api
- 3.我的 key 有限
- 4.用完了20金币就要收费了
- 5.该版本仅局限于aistudio应用部署,基于gradio最新版的请联系作者,微信liivingbody
""")
if __name__ == "__main__":
# 启动
mess_dict = dict()
mess_dict["messages"] = []
bot_message = []
demo.queue().launch(server_name='0.0.0.0', share=False)
四、注意事项
- 1.aistudio部署时最新版gradio个别特性不支持,因此以上代码是针对性定制
- 2.代码我上传根目录了,文件名qianfan,fork下载
- 3.基于gradio 最新版的也放在里面了,文件名qianfannew。
- 项目地址: aistudio.baidu.com/aistudio/pr...