如何让用户在运行中的公开Streamlit应用中输入自有API密钥?
实现让用户输入自有API密钥的Streamlit应用方案
下面提供几种可行的实现方式,各有适用场景:
方法1:应用内直接添加密钥输入组件(无需用户克隆部署)
这是最便捷的方案,用户不用自己部署,直接访问你公开的Streamlit应用就能用,密钥仅在当前会话临时生效,不会被存储。
- 用Streamlit的密码输入框和文件上传组件收集密钥:
import streamlit as st import openai from google.cloud import texttospeech # 收集OpenAI API密钥 openai_key = st.text_input("请输入你的OpenAI API密钥", type="password") # 收集Google TTS的服务账号密钥(Google TTS需要JSON格式的服务账号文件) google_tts_key_file = st.file_uploader("上传你的Google TTS服务账号JSON文件", type="json") # 验证密钥存在后初始化服务 if openai_key and google_tts_key_file: openai.api_key = openai_key # 从上传的文件初始化Google TTS客户端 tts_client = texttospeech.TextToSpeechClient.from_service_account_file(google_tts_key_file.name) # 这里写你的核心应用逻辑,比如文本生成、语音合成等 st.success("密钥验证通过,可以使用功能啦!")
- 注意:一定要在应用里明确提醒用户,不要在公共设备上输入密钥,且你的应用代码绝对不能做密钥的持久化操作(比如存数据库、写入本地文件)。
方法2:让用户克隆仓库后自行部署(你当前的方案)
这个方案适合有一定技术基础、对密钥安全性要求较高的用户,密钥完全由用户自己掌控:
- 把应用代码上传到GitHub仓库,同时准备一个示例配置文件(比如
secrets.toml.example):
# secrets.toml.example OPENAI_API_KEY = "替换成你的OpenAI密钥" GOOGLE_TTS_KEY_PATH = "替换成你的Google TTS服务账号JSON文件路径"
- 在应用代码里读取Streamlit的secrets配置:
import streamlit as st import openai from google.cloud import texttospeech # 从secrets读取密钥 openai_key = st.secrets["OPENAI_API_KEY"] google_tts_key_path = st.secrets["GOOGLE_TTS_KEY_PATH"] # 初始化服务 openai.api_key = openai_key tts_client = texttospeech.TextToSpeechClient.from_service_account_file(google_tts_key_path)
- 写清楚部署文档,告诉用户:
- 克隆仓库到本地
- 复制
secrets.toml.example为.streamlit/secrets.toml并填入自己的密钥 - 安装依赖后启动应用,或者用Streamlit Cloud、Heroku等平台部署时配置对应secrets
方法3:通过环境变量传入密钥(适合本地运行或自定义云部署)
如果用户不想用Streamlit的secrets,也可以让他们通过环境变量传递密钥:
- 应用代码里读取环境变量:
import os import openai from google.cloud import texttospeech # 从环境变量获取密钥 openai_key = os.getenv("OPENAI_API_KEY") google_tts_key_path = os.getenv("GOOGLE_TTS_KEY_PATH") # 初始化服务 if openai_key and google_tts_key_path: openai.api_key = openai_key tts_client = texttospeech.TextToSpeechClient.from_service_account_file(google_tts_key_path)
- 用户本地运行时,终端设置环境变量再启动应用:
# Linux/macOS export OPENAI_API_KEY="你的OpenAI密钥" export GOOGLE_TTS_KEY_PATH="你的Google TTS密钥文件路径" streamlit run app.py # Windows(PowerShell) $env:OPENAI_API_KEY="你的OpenAI密钥" $env:GOOGLE_TTS_KEY_PATH="你的Google TTS密钥文件路径" streamlit run app.py
- 部署到云平台时,直接在平台的环境变量配置面板填入密钥即可。
内容的提问来源于stack exchange,提问作者shakedzy
相关产品推荐
相关产品推荐

