一个基于Gradio构建的大模型多轮对话Web界面,支持API密钥配置、模型参数调整和对话记录管理功能。
1.功能特点
- 灵活的API配置:支持设置API密钥和自定义Base URL多模型选择:内置多种大模型选项,包括ernie系列模型参数可调:可调整温度参数和最大令牌数,控制输出效果对话管理:支持查看、清除和保存对话历史用户友好界面:直观的Web操作界面,无需编程知识即可使用
2.安装说明
2.1 前提条件
- Python 3.8+环境有效的API密钥(根据使用的模型提供商获取)
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默认配置
- 默认模型:ernie-4.5-0.3b默认温度:0.7默认最大令牌数:1024默认Base URL:aistudio.baidu.com/llm/lmapi/v…
4.2支持的模型
目前支持的模型包括:
- ernie-4.5-0.3bernie-4.0-8k-latesternie-4.5-turbo-vl-preview
5.文件说明
- app.py:应用程序主文件,包含所有功能实现聊天记录文件:以
chat_history_YYYYMMDD_HHMMSS.jsonl
格式命名,保存在项目根目录6.注意事项
- API密钥属于敏感信息,请妥善保管,不要分享给他人对话记录文件保存在本地,请注意定期备份重要记录不同模型对参数支持可能有所差异,如遇问题可尝试调整参数或更换模型网络连接不稳定可能导致对话失败,请确保网络通畅
7.故障排除
常见问题
API连接错误
- 检查API密钥是否正确确认Base URL配置正确检查网络连接
模型响应超时
- 尝试减少最大令牌数检查网络状况稍后重试
界面显示异常
- 刷新浏览器页面清除浏览器缓存确保gradio版本为最新
8.依赖包
- gradio:构建Web界面openai:与大模型API交互json:处理对话记录的JSONL格式datetime:生成时间戳用于保存文件