【千帆竞发 谁与争锋】基于文心一言千帆API和gradio实现大模型多伦对话web应用

一、基于千帆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...
相关推荐
搏博16 分钟前
神经网络问题之一:梯度消失(Vanishing Gradient)
人工智能·机器学习
z千鑫16 分钟前
【人工智能】深入理解PyTorch:从0开始完整教程!全文注解
人工智能·pytorch·python·gpt·深度学习·ai编程
YRr YRr25 分钟前
深度学习:神经网络的搭建
人工智能·深度学习·神经网络
威桑27 分钟前
CMake + mingw + opencv
人工智能·opencv·计算机视觉
爱喝热水的呀哈喽31 分钟前
torch张量与函数表达式写法
人工智能·pytorch·深度学习
肥猪猪爸1 小时前
使用卡尔曼滤波器估计pybullet中的机器人位置
数据结构·人工智能·python·算法·机器人·卡尔曼滤波·pybullet
LZXCyrus2 小时前
【杂记】vLLM如何指定GPU单卡/多卡离线推理
人工智能·经验分享·python·深度学习·语言模型·llm·vllm
我感觉。2 小时前
【机器学习chp4】特征工程
人工智能·机器学习·主成分分析·特征工程
YRr YRr2 小时前
深度学习神经网络中的优化器的使用
人工智能·深度学习·神经网络
DieYoung_Alive2 小时前
一篇文章了解机器学习(下)
人工智能·机器学习