You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:12:40