当前位置:   article > 正文

使用Gradio搭建聊天UI实现质谱AI智能问答_gradio 聊天

gradio 聊天

一、调用智谱 AI API

1、获取api_key

智谱AI开放平台网址:
https://open.bigmodel.cn/overview
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、安装库pip install zhipuai
3、执行一下代码,调用质谱api进行问答

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="xxxxx")  # 填写您自己的APIKey
while True:
    prompt = input("user:")
    response = client.chat.completions.create(
        model="glm-4",  # 填写需要调用的模型名称
        messages=[
            {"role": "user", "content": prompt}
        ],
    )
    answer = response.choices[0].message.content
    print("ZhipuAI:", answer)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

二、使用Gradio搭建聊天UI

import gradio as gr
import random
import time

from langchain_community.chat_models import ChatZhipuAI
from zhipuai import ZhipuAI

import configure

llm = configure.chat
client = ZhipuAI(api_key="xxx")  # 填写您自己的APIKey

with gr.Blocks() as demo:
    chatbot = gr.Chatbot()
    msg = gr.Textbox()
    clear = gr.Button("清除")


    def respond(message, chat_history):
        response = client.chat.completions.create(
            model="glm-4",  # 填写需要调用的模型名称
            messages=[
                {"role": "user", "content": message}
            ],
        )
        chat_history.append((message, response.choices[0].message.content))
        return "", chat_history


    msg.submit(respond, [msg, chatbot], [msg, chatbot])
    clear.click(lambda: None, None, chatbot, queue=False)

demo.launch()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • Gradio的Textbox模块允许用户输入字符串并显示字符串输出。它创建一个文本区域,用户可以在其中输入文本或显示输出结果。
  • Button组件是Gradio中的一个模块,用于创建一个按钮,并可以为其分配任意的click()事件。按钮的标签(value)可以作为输入使用,或者通过函数的输出来设置。
  • chatbot模块是Gradio中的一个组件,用于展示聊天机器人的输出,包括用户提交的消息和机器人的回复。它支持一些Markdown语法,包括粗体、斜体、代码和图片等。Chatbot模块的输入不接受用户输入,而是通过函数返回的列表来设置聊天内容。返回的列表应包含多个内部列表,每个内部列表包含两个元素:用户消息和机器人回复。消息可以是字符串、元组或None。如果消息是字符串,可以包含Markdown格式的文本。如果消息是元组,应包含文件路径和可选的替代文本。值为None的消息将不会显示在聊天界面上。

三、将流式处理添加到交互式聊天机器人

import gradio as gr
import time

from zhipuai import ZhipuAI
from typing import *

client = ZhipuAI(api_key="your api key")  # 填写您自己的APIKey
# https://blog.csdn.net/sinat_26917383/article/details/133950480
# https://open.bigmodel.cn/dev/api#glm-4
# https://www.cnblogs.com/ddsuifeng/p/17989484
with gr.Blocks(title="智小优") as demo:
    gr.HTML("""<h1 align="center">智小优</h1>""")
    gr.Markdown("<h1><center>Welcome to my personal AI-OR assistant (powered by zhipu)</center></h1>")

    chatbot = gr.Chatbot(render=True)
    msg = gr.Textbox(placeholder="请输入你的问题")
    with gr.Row():
        submit = gr.Button('Submit')
        clear = gr.Button("Clear")


    def user(user_message: str, history: List[List]) -> Tuple:
        """
        Args:
            user_message: 用户输入
            history: 历史问答
        Returns:
        """
        return "", history + [[user_message, None]]


    def bot(history: List[List]) -> None:
        response = client.chat.completions.create(
            model="glm-4",  # 填写需要调用的模型名称
            messages=[
                {"role": "user", "content": history[-1][0]}
            ],
            stream=True
        )

        history[-1][1] = ""

        for chunk in response:
            for choice in chunk.choices:
                # content = choice.delta.content
                if content := choice.delta.content: 
                    history[-1][1] += content
                    time.sleep(0.05)
                    yield history


    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, chatbot, chatbot
    )
    # 触发事件监听
    submit.click(user, [msg, chatbot], [msg, chatbot], queue=False).then(bot, chatbot, chatbot)
    clear.click(lambda: None, None, chatbot, queue=False)

if __name__ == '__main__':
    demo.queue().launch()

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61

参考:

  • https://blog.csdn.net/sinat_26917383/article/details/133950480
  • https://zhuanlan.zhihu.com/p/681207328
  • https://blog.csdn.net/Alexa_/article/details/134485161
  • https://blog.csdn.net/u013558123/article/details/136118024
  • https://zhuanlan.zhihu.com/p/678228971
  • https://open.bigmodel.cn/dev/api#glm-4
  • https://www.cnblogs.com/ddsuifeng/p/17989484
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/981008
推荐阅读
相关标签
  

闽ICP备14008679号