如何在Streamlit中实现双列聊天框,用双模型同时生成做基准测试?
Streamlit双模型基准测试演示应用
这里直接给你可运行的实现代码,包含双列聊天机器人布局、多进程并行生成响应的功能,用模拟模型演示,你可以替换成真实的模型调用逻辑:
import streamlit as st import multiprocessing import time # 模拟模型响应函数,替换成你的真实模型调用 def model_a_response(question): time.sleep(2) # 模拟模型推理耗时 return f"模型A回答:{question} - 这是A的基准测试结果" def model_b_response(question): time.sleep(3) # 模拟不同的推理耗时 return f"模型B回答:{question} - 这是B的基准测试结果" # 初始化会话状态,保存聊天历史 if "chat_history_a" not in st.session_state: st.session_state.chat_history_a = [] if "chat_history_b" not in st.session_state: st.session_state.chat_history_b = [] # 页面标题 st.title("双模型基准测试演示") # 输入框放在顶部 user_input = st.text_input("输入你的问题:", key="user_query") if st.button("发送") and user_input: # 添加用户问题到聊天历史 st.session_state.chat_history_a.append({"role": "user", "content": user_input}) st.session_state.chat_history_b.append({"role": "user", "content": user_input}) # 使用多进程并行调用两个模型 with multiprocessing.Pool(processes=2) as pool: result_a, result_b = pool.map(lambda func: func(user_input), [model_a_response, model_b_response]) # 添加模型响应到聊天历史 st.session_state.chat_history_a.append({"role": "assistant", "content": result_a}) st.session_state.chat_history_b.append({"role": "assistant", "content": result_b}) # 双列布局展示聊天机器人 col1, col2 = st.columns(2) with col1: st.subheader("模型A") for message in st.session_state.chat_history_a: if message["role"] == "user": st.markdown(f"**你:** {message['content']}") else: st.markdown(f"**模型A:** {message['content']}") with col2: st.subheader("模型B") for message in st.session_state.chat_history_b: if message["role"] == "user": st.markdown(f"**你:** {message['content']}") else: st.markdown(f"**模型B:** {message['content']}")
代码说明
- 会话状态管理:用
st.session_state保存两个模型的聊天历史,避免页面重渲染时丢失数据 - 多进程并行:通过
multiprocessing.Pool实现两个模型同时运行,减少总等待时间,可根据真实模型的资源占用调整进程数 - 双列布局:使用
st.columns(2)创建左右两列,分别展示两个模型的聊天窗口 - 模拟模型:
model_a_response和model_b_response是模拟函数,可替换成调用OpenAI API、本地LLM等真实逻辑 - 输入与发送:顶部的输入框和发送按钮触发模型调用,同时更新两个聊天历史
注意事项
- 如果模型调用涉及GPU,多进程可能会有资源冲突,此时可改用线程(
threading)或者串行调用 - Streamlit多进程使用需避免全局变量问题,确保模型初始化在进程内完成
- 可使用
st.chat_message组件(Streamlit 1.24+支持)优化聊天消息的展示样式
内容的提问来源于stack exchange,提问作者panda
相关产品推荐
相关产品推荐

