Streamlit 快速搭建私人大模型交互界面

1. 安装依赖

pip3 install streamlit openai

2.代码

import streamlit as st
from openai import OpenAI

# ================= 1. 配置本地大模型参数 =================
LOCAL_API_BASE = "http://192.168.1.10:8000/v1" 
LOCAL_MODEL_NAME = "Qwen/Qwen3-VL-30B-A3B-Instruct" 
API_KEY = "None" 

os.environ["NO_PROXY"] = "192.168.1.10"

# 设置网页标题和图标
st.set_page_config(page_title="私人本地 ChatGPT", page_icon="🤖")
st.title("🤖 我的私人本地大模型")

# 初始化 OpenAI 客户端
client = OpenAI(base_url=LOCAL_API_BASE, api_key=API_KEY)

# ================= 2. 初始化聊天历史记录 =================
if "messages" not in st.session_state:
    st.session_state.messages = [
        {"role": "assistant", "content": "你好!我是你的私人 AI 助手,有什么我可以帮你的吗?"}
    ]

# ================= 3. 渲染历史对话界面 =================
for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

# ================= 4. 处理用户输入与模型响应 =================
if user_input := st.chat_input("输入你的问题..."):
    # 1. 将用户输入存入历史记录并显示在前端
    st.session_state.messages.append({"role": "user", "content": user_input})
    with st.chat_message("user"):
        st.markdown(user_input)

    # 2. 调用本地大模型并以流式(Stream)响应
    with st.chat_message("assistant"):
        response_placeholder = st.empty()
        full_response = ""
        
        try:
            stream = client.chat.completions.create(
                model=LOCAL_MODEL_NAME,
                messages=[
                    {"role": m["role"], "content": m["content"]}
                    for m in st.session_state.messages
                ],
                stream=True,
            )
            
            # 动态接收文本块并刷新前端
            for chunk in stream:
                if chunk.choices[0].delta.content is not None:
                    full_response += chunk.choices[0].delta.content
                    response_placeholder.markdown(full_response + "▌")
            
            # 流式结束后,渲染最终的干净文本
            response_placeholder.markdown(full_response)
            
            # 3. 将模型的回答完整存入历史记录
            st.session_state.messages.append({"role": "assistant", "content": full_response})
            
        except Exception as e:
            st.error(f"连接本地模型服务失败,请检查服务是否开启。错误信息: {e}")

更多推荐