一个基于Gradio构建的大模型多轮对话Web界面,支持API密钥配置、模型参数调整和对话记录管理功能。
1.功能特点
- 灵活的API配置:支持设置API密钥和自定义Base URL
- 多模型选择:内置多种大模型选项,包括ernie系列模型
- 参数可调:可调整温度参数和最大令牌数,控制输出效果
- 对话管理:支持查看、清除和保存对话历史
- 用户友好界面:直观的Web操作界面,无需编程知识即可使用
2.安装说明
2.1 前提条件
- Python 3.8+环境
- 有效的API密钥(根据使用的模型提供商获取)
2.2安装步骤
-
克隆或下载本项目到本地
-
安装依赖包
bash
pip install gradio openai
3.使用方法
3.1 代码实现
python
import gradio as gr
import openai
import json
from datetime import datetime
from openai import OpenAI
# 设置OpenAI API密钥和Base URL
def 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界面:
bash
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格式文件
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.3b
- ernie-4.0-8k-latest
- ernie-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:生成时间戳用于保存文件