当前位置: 首页 > news >正文

大模型架构记录3-1-Gradio 入门

一 什么是 Gradio ?

www.gradio.app/

二 使用示例

三 使用方法

3.1 分享

3.2 聊天机器人

3.3 blocks 

3.4 布局使用

3.5 加组件名字

4-MyGPT


import gradio as gr
from loguru import logger
from MyGPT import MyGPT
from config import MODELS, DEFAULT_MODEL, MODEL_TO_MAX_TOKENSmygpt = MyGPT()def fn_prehandle_user_input(user_input, chat_history):# 检查输入if not user_input:gr.Warning("请输入您的问题")logger.warning("请输入您的问题")return chat_history# 用户消息在前端对话框展示chat_history.append([user_input, None])logger.info(f"\n用户输入: {user_input}, \n"f"历史记录: {chat_history}")return chat_historydef fn_predict(user_input,chat_history,model,max_tokens,temperature,stream):# 如果用户输入为空,则返回当前的聊天历史if not user_input:return chat_history# 打印日志,记录输入参数信息logger.info(f"\n用户输入: {user_input}, \n"f"历史记录: {chat_history}, \n"f"使用模型: {model}, \n"f"要生成的最大token数: {max_tokens}\n"f"温度: {temperature}\n"f"是否流式输出: {stream}")# 构建 messages 参数messages = user_input  # or [{"role": "user", "content": user_input}]if len(chat_history) > 1:messages = []for chat in chat_history:if chat[0] is not None:messages.append({"role": "user", "content": chat[0]})if chat[1] is not None:messages.append({"role": "assistant", "content": chat[1]})print(messages)# 生成回复bot_response = mygpt.get_completion(messages, model, max_tokens, temperature, stream)if stream:# 流式输出chat_history[-1][1] = ""for character in bot_response:character_content = character.choices[0].delta.contentif character_content is not None:chat_history[-1][1] += character_contentyield chat_historyelse:# 非流式输出chat_history[-1][1] = bot_responselogger.info(f"历史记录: {chat_history}")yield chat_historydef fn_update_max_tokens(model, origin_set_tokens):"""更新最大令牌数的函数。:param model: 要更新最大令牌数的模型。:param origin_set_tokens: 原始滑块组件设置的令牌数。:return: 包含新最大令牌数的滑块组件。"""# 获取模型对应的新最大令牌数,如果没有设置则使用传入的最大令牌数new_max_tokens = MODEL_TO_MAX_TOKENS.get(model)new_max_tokens = new_max_tokens if new_max_tokens else origin_set_tokens# 如果原始设置的令牌数超过了新的最大令牌数,将其调整为默认值(这里设置为500,你可以根据需要调整)new_set_tokens = origin_set_tokens if origin_set_tokens <= new_max_tokens else 500# 创建新的最大令牌数滑块组件new_max_tokens_component = gr.Slider(minimum=0,maximum=new_max_tokens,value=new_set_tokens,step=1.0,label="max_tokens",interactive=True,)return new_max_tokens_componentwith gr.Blocks() as demo:# 标题gr.Markdown("# MyGPT")with gr.Row(equal_height=True):# 左侧对话栏with gr.Column(scale=4):chatbot = gr.Chatbot(label="聊天机器人")user_input_textbox = gr.Textbox(label="用户输入框", value="你好")with gr.Row():submit_btn = gr.Button("Submit")clear_btn = gr.Button("Clear", elem_id="btn")# 右侧工具箱with gr.Column(scale=1):# 创建一个包含三个滑块的选项卡,用于调整模型的温度、最大长度和Top P参数with gr.Tab(label="参数"):# 选择模型model_dropdown = gr.Dropdown(label="model",choices=MODELS,value=DEFAULT_MODEL,multiselect=False,interactive=True,)max_tokens_slider = gr.Slider(minimum=0,maximum=4096,value=500,step=1.0,label="max_tokens",interactive=True)temperature_slider = gr.Slider(minimum=0,maximum=1,value=0.5,step=0.01,label="temperature",interactive=True)stream_radio = gr.Radio(choices=[True,False],label="stream",value=True,interactive=True)# 模型有改动时,对应的 max_tokens_slider 滑块组件的最大值随之改动。# https://www.gradio.app/docs/dropdownmodel_dropdown.change(fn=fn_update_max_tokens,inputs=[model_dropdown, max_tokens_slider],outputs=max_tokens_slider)# 当用户在文本框处于焦点状态时按 Enter 键时,将触发此侦听器。# https://www.gradio.app/docs/textboxuser_input_textbox.submit(fn=fn_prehandle_user_input,inputs=[user_input_textbox,chatbot],outputs=[chatbot]).then(fn=fn_predict,inputs=[user_input_textbox,chatbot,model_dropdown,max_tokens_slider,temperature_slider,stream_radio],outputs=[chatbot])# 单击按钮时触发。# https://www.gradio.app/docs/buttonsubmit_btn.click(fn=fn_prehandle_user_input,inputs=[user_input_textbox,chatbot],outputs=[chatbot]).then(fn=fn_predict,inputs=[user_input_textbox,chatbot,model_dropdown,max_tokens_slider,temperature_slider,stream_radio],outputs=[chatbot])clear_btn.click(lambda: None, None, chatbot, queue=False)demo.queue().launch(share=True)


http://www.mrgr.cn/news/94049.html

相关文章:

  • 【FreeRTOS】FreeRTOS操作系统在嵌入式单片机上裸机移植
  • Maven的依赖管理
  • ubuntu 解决 DNS 代理设置错误,导致不能上网的 DoH、DoT问题
  • 统计登录系统10秒内连续登录失败超过3次的用户
  • 基于redisson实现接口幂等性
  • Jenkins链接私有仓库Failed to connect to repository,stderr: No ECDSA...的问题
  • bootloader相关部分
  • 通道注意力机制、空间注意力机制、混合注意力机制
  • 【Spring 事务】
  • PySide(PyQT),QGraphicsRectItem的setPos()和setRect()的坐标位置的区别
  • 【WRF-Urban】使用 LCZ 替换 WRF 运行中的 LUCC 数据
  • 【Yonghong 企业日常问题07 】 东方通TongWeb替代Tomcat的实战指南!
  • 如何使用logrotete定时切割mysql的慢日志
  • Android DUKPT - 3DES
  • shell编程——条件表达式和if判断
  • liunx磁盘挂载和jar启动命令
  • Vue3项目-大事件
  • 在资源有限中逆势突围:从抗战智谋到寒门高考的破局智慧
  • 瑞芯微RK3576(2)-调试过程中遇到的问题
  • 使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)