基于 Streamlit 与腾讯云混元快速搭建 LLM 聊天应用
在人工智能飞速发展的今天,构建一个高效且富有创意的 LLM(Large Language Model,大型语言模型)聊天应用已成为许多开发者的需求。本教程将重点放在如何快速上手,利用 Streamlit 这一强大的工具,以最快速度搭建起一个具备流式打字机效果的聊天应用。对于不熟悉前端代码的开发者来说,Streamlit 无疑是一个福音,它允许我们专注于业务逻辑而非复杂的 UI 交互。
环境准备
在开始开发之前,请确保你已经配置好了必要的开发环境。以下是你需要准备的一系列环境和工具:
- Python 环境:建议安装 Python 3.9 或更高版本。
- 腾讯云 API 服务:从腾讯云控制台开通混元 API 服务,并获取
SecretID和SecretKey。 - 依赖包安装:
pip install --upgrade tencentcloud-sdk-python pip install streamlit
如果你对 Streamlit 还不太熟悉,安装完成后,可以通过执行以下命令启动入门实例进行体验:
streamlit hello
官方文档提供了详尽的指南、教程和 API 参考,建议在实际开发前阅读以加深理解。
核心流程解析
1. 凭证管理安全规范
为了保护密钥安全,强烈建议将密钥设置在环境变量中或者配置文件中,而不是硬编码到代码中。硬编码密钥随代码泄露而暴露存在严重安全隐患。
import os
from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
# 推荐方式:从环境变量读取
cred = credential.Credential(
os.environ.get("TENCENTCLOUD_SECRET_ID"),
os.environ.get("TENCENTCLOUD_SECRET_KEY")
)
2. Streamlit 基础架构
Streamlit 的核心在于状态管理。我们需要使用 st.session_state 来存储聊天记录,以便在页面刷新后保持上下文。
- 初始化历史消息:检查 session state 中是否存在 messages 键,若不存在则初始化为空列表。
- 显示历史消息:遍历 messages 列表,使用
st.chat_message渲染对话气泡。 - 接收用户输入:使用
st.chat_input监听用户输入。
3. 腾讯云混元 API 集成
腾讯混元大模型提供了丰富的接口,本示例主要使用 ChatStdRequest 进行标准对话。请求体需要包含消息历史,响应则是流式的。
完整代码实现
经过整合与优化,以下是最终可运行的版本代码。该代码实现了完整的聊天界面、历史记录保存以及流式输出功能。
import json
import os
streamlit st
time
tencentcloud.common credential
tencentcloud.common.profile.client_profile ClientProfile
tencentcloud.hunyuan.v20230901 hunyuan_client, models
st.set_page_config(page_title=, page_icon=)
st.title()
os.environ:
st.warning()
st.stop()
os.environ:
st.warning()
st.stop()
cred = credential.Credential(
os.environ.get(),
os.environ.get()
)
cpf = ClientProfile()
cpf.httpProfile.pre_conn_pool_size =
client = hunyuan_client.HunyuanClient(cred, , cpf)
req = models.ChatStdRequest()
():
req.Messages = []
m st.session_state.messages:
msg = models.Message()
msg.Role = m[]
msg.Content = m[]
req.Messages.append(msg)
:
resp = client.ChatStd(req)
(resp, ) resp.Choices:
choice resp.Choices:
choice.Delta.Content +
TencentCloudSDKException err:
st.session_state:
st.session_state.messages = []
message st.session_state.messages:
st.chat_message(message[]):
st.markdown(message[])
prompt := st.chat_input():
st.session_state.messages.append({: , : prompt})
st.chat_message():
st.markdown(prompt)
st.chat_message():
response = st.write_stream(response_generator())
st.session_state.messages.append({: , : response})


