掘金 人工智能 15小时前
使用gradio构建一个大模型多轮对话WEB应用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了一个基于Gradio构建的大模型多轮对话Web界面。该界面支持灵活的API配置,允许用户设置API密钥和自定义Base URL,并内置了多种大模型选项,如ernie系列模型。用户还可以调整温度参数和最大令牌数来控制模型的输出效果。此外,该界面还提供了便捷的对话管理功能,支持查看、清除和保存对话历史。整个界面操作直观,无需编程知识即可轻松使用,大大降低了大模型交互的门槛。

🔑 **灵活的API与模型配置**:该Web界面允许用户轻松配置API密钥和自定义Base URL,并提供ernie系列等多种大模型选择。用户还可根据需求调整温度参数和最大令牌数,以精细控制模型的生成效果,满足不同场景下的对话需求。

💬 **便捷的对话管理与交互**:界面支持多轮对话,用户可以方便地查看、清除和保存对话历史记录。通过直观的Web操作,用户无需编程即可与大模型进行流畅的交互,大大提升了使用体验。

🛠️ **易于安装与部署**:项目提供了清晰的安装说明,仅需Python 3.8+环境和相应的API密钥即可。通过简单的命令即可启动Web界面,用户可以快速搭建和使用自己的大模型对话应用。

💾 **对话记录的持久化**:用户可以将重要的对话历史以JSONL格式保存到本地文件,便于回顾和分析。这种格式的保存方式保证了数据的结构化和易读性,为后续的数据处理提供了便利。

一个基于Gradio构建的大模型多轮对话Web界面,支持API密钥配置、模型参数调整和对话记录管理功能。

1.功能特点

2.安装说明

2.1 前提条件

2.2安装步骤

    克隆或下载本项目到本地

    安装依赖包

pip install gradio openai

3.使用方法

3.1 代码实现

import gradio as grimport openaiimport jsonfrom datetime import datetimefrom openai import OpenAI# 设置OpenAI API密钥和Base URLdef set_model_config(api_key, base_url, model_name, temperature, max_tokens):    if api_key:        openai.api_key = api_key    if base_url:        openai.api_base = base_url    # 保存模型参数到全局变量    global MODEL_CONFIG    MODEL_CONFIG = {        "model_name": model_name,        "temperature": temperature,        "max_tokens": max_tokens    }    return f"配置已更新: 模型={model_name}, 温度={temperature}, 最大令牌={max_tokens}"# 处理对话逻辑def chat_with_model(user_message, history):    # 转换历史记录为OpenAI API所需格式    messages = []    for user_msg, bot_msg in history:        messages.append({"role": "user", "content": user_msg})        messages.append({"role": "assistant", "content": bot_msg})    messages.append({"role": "user", "content": user_message})        # 使用全局模型配置    global MODEL_CONFIG        # 调用OpenAI API    client = OpenAI(                    api_key="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",  # Access Token属于个人账户的重要隐私信息,请谨慎管理,切忌随意对外公开,                    base_url="https://aistudio.baidu.com/llm/lmapi/v3",  # aistudio 大模型 api 服务域名                    )    chat_completion = client.chat.completions.create(                        model=MODEL_CONFIG["model_name"],                        messages=messages,                        temperature=MODEL_CONFIG["temperature"],                        max_tokens=MODEL_CONFIG["max_tokens"]                        )        print("chat_completion.choices[0].message.content:",chat_completion.choices[0])    return chat_completion.choices[0].message.content# 保存对话记录为JSONL格式def save_chat_history(history, api_key):    if not history:        return "没有聊天记录可保存"        # 确保API密钥已设置    if api_key:        openai.api_key = api_key        # 生成带时间戳的文件名    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")    filename = f"chat_history_{timestamp}.jsonl"        # 以JSONL格式保存    with open(filename, "w", encoding="utf-8") as f:        for user_msg, bot_msg in history:            json.dump({"role": "user", "content": user_msg}, f, ensure_ascii=False)            f.write("\n")            json.dump({"role": "assistant", "content": bot_msg}, f, ensure_ascii=False)            f.write("\n")        return f"聊天记录已保存至: {filename}"# 创建Gradio界面with gr.Blocks(title="大模型多轮对话") as demo:    gr.Markdown("# 大模型多轮对话界面")        # 初始化全局模型配置    global MODEL_CONFIG    MODEL_CONFIG = {        "model_name": "ernie-4.0-8k-latest",        "temperature": 0.7,        "max_tokens": 1024    }        with gr.Row():        api_key_input = gr.Textbox(            label="OpenAI API密钥",             type="password",            placeholder="请输入您的OpenAI API密钥",            value="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"        )        base_url_input = gr.Textbox(            label="大模型Base URL",            placeholder="请输入大模型的Base URL (可选)",            value="https://aistudio.baidu.com/llm/lmapi/v3"        )        set_key_btn = gr.Button("设置API配置")        key_status = gr.Textbox(label="配置状态", interactive=False)        # 先定义模型参数输入控件    with gr.Accordion("模型参数设置", open=False):        model_name_input = gr.Dropdown(            label="模型选择",            choices=["ernie-4.5-0.3b", "ernie-4.0-8k-latest","ernie-4.5-turbo-vl-preview"],            value="ernie-4.5-0.3b"        )        temperature_slider = gr.Slider(            label="温度参数",            minimum=0.0, maximum=2.0, value=0.7, step=0.1,            info="控制输出的随机性,值越高越随机,值越低越确定"        )        max_tokens_slider = gr.Slider(            label="最大令牌数",            minimum=128, maximum=4096, value=1024, step=128,            info="控制输出的最大长度"        )        # 再定义按钮点击事件(现在可以引用上面定义的控件了)    set_key_btn.click(        fn=set_model_config,        inputs=[api_key_input, base_url_input, model_name_input, temperature_slider, max_tokens_slider],        outputs=[key_status]    )        chatbot = gr.Chatbot(height=500)    msg = gr.Textbox(label="输入消息")    clear = gr.Button("清除对话")    save_btn = gr.Button("保存对话记录")    save_status = gr.Textbox(label="保存状态", interactive=False)        def user(user_message, history):        return "", history + [[user_message, None]]        def bot(history, api_key):        if not api_key and not openai.api_key:            history[-1][1] = "请先设置OpenAI API密钥"            return history                if api_key:            openai.api_key = api_key                user_message = history[-1][0]        bot_response = chat_with_model(user_message, history[:-1])        history[-1][1] = bot_response        return history        msg.submit(        user, [msg, chatbot], [msg, chatbot], queue=False    ).then(        bot, [chatbot, api_key_input], [chatbot]    )        clear.click(lambda: None, None, chatbot, queue=False)        save_btn.click(        fn=save_chat_history,        inputs=[chatbot, api_key_input],        outputs=[save_status]    )if __name__ == "__main__":    demo.launch()

3.2 启动应用

在项目目录下执行以下命令启动Web界面:

python app.py

应用启动后,会自动在默认浏览器中打开界面,或手动访问终端中显示的URL(通常为 http://localhost:7860)。

3.3 基本配置

    API配置

      在"OpenAI API密钥"输入框中填写您的API密钥如需使用自定义API服务,在"大模型Base URL"输入框中填写服务地址点击"设置API配置"按钮使配置生效

    模型参数设置点击"模型参数设置"展开面板,可配置以下参数:

      模型选择:从下拉菜单选择要使用的大模型温度参数:滑块调整(0.0-2.0),值越高输出越随机,值越低越确定最大令牌数:滑块调整(128-4096),控制单次输出的最大长度

3.4 对话操作

    在底部输入框中键入消息,按Enter键或点击发送按钮提交对话历史会显示在上方聊天窗口中点击"清除对话"按钮可清空当前对话历史点击"保存对话记录"按钮可将当前对话保存为JSONL格式文件
{"role": "user", "content": "你好"}{"role": "assistant", "content": "你好呀!😊 😊 有什么我可以帮你的吗?无论是学习、生活还是兴趣爱好,都可以随时告诉我哦~ 😊"}{"role": "user", "content": "请问你的模型名称叫什么?"}{"role": "assistant", "content": "我的模型叫“AI助手”,🤖 😊。如果你有任何问题或者需要帮助,随时告诉我哦!"}{"role": "user", "content": "我叫你可乐可以吗?"}{"role": "assistant", "content": "当然可以啦!🍹 没问题,AI助手会根据你的需求提供帮助,比如回答问题、生成建议,或者陪你聊天~ 😊"}{"role": "user", "content": "可乐给我讲个故事"}{"role": "assistant", "content": "当然可以呀!🍹 我可是AI助手,专门帮你讲故事呢~你讲的故事里有没有特别有趣或感人的情节呀?比如故事里的角色、情节,或者故事中某个场景让你觉得特别温暖呢?告诉我,AI帮你一起创造美好的回忆吧!😄"}

4.配置说明

4.1默认配置

4.2支持的模型

目前支持的模型包括:

5.文件说明

6.注意事项

7.故障排除

常见问题

    API连接错误

      检查API密钥是否正确确认Base URL配置正确检查网络连接

    模型响应超时

      尝试减少最大令牌数检查网络状况稍后重试

    界面显示异常

      刷新浏览器页面清除浏览器缓存确保gradio版本为最新

8.依赖包

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Gradio 大模型 Web界面 AI对话 API配置
相关文章