使用Streamlit构建和部署类ChatGPT应用
在当今的技术领域,开发一个类ChatGPT的应用程序是许多开发者的目标。本文将详细介绍如何使用Streamlit和LangChain这两个强大的工具,构建并部署一个具有用户友好界面的类ChatGPT应用。
1. 开发环境搭建
在开始构建应用之前,需要先搭建好开发环境。以下是具体步骤:
-
安装Streamlit库
:在终端或命令提示符中运行以下命令来安装Streamlit:
pip install streamlit
如果尚未安装pip,可能会看到错误消息。若已安装Streamlit,则可跳过此步骤。
-
安装Python
:若桌面环境中未安装Python,可能会遇到错误。可以通过以下步骤解决:
1. 检查Python是否已安装:打开新的命令提示符窗口,输入
python --version
并按回车键。若Python安装正确,将显示版本号;若未安装,则需先安装Python,可从Microsoft Store安装。
2. 安装pip:若已安装Python但缺少pip,可从官方pip网站(https://bootstrap.pypa.io/get-pip.py)下载get-pip.py脚本,保存到计算机的某个位置,如
C:\Users\abc\get-pip.py
。然后在命令提示符中导航到保存该文件的目录,运行命令安装pip。
3. 将Python和pip添加到系统的PATH环境变量中:打开开始菜单,搜索“Environment Variables”,点击“Edit the system environment variables”,在系统属性窗口中点击“Environment Variables”按钮,在“System variables”下找到“Path”变量并点击“Edit”,点击“New”并添加Python安装目录的路径(通常为
C:\Python39
或类似路径),再次点击“New”并添加Python安装目录下Scripts目录的路径(通常为
C:\Python39\Scripts
),点击“OK”保存更改。
4. 验证安装:打开新的命令提示符窗口,输入
pip --version
并按回车键。若pip安装并可访问,将显示版本号。
-
安装所需依赖项
:在运行代码之前,必须确保安装了所需的依赖项(streamlit、openai、langchain、pinecone),可以使用pip进行安装:
pip install streamlit openai langchain pinecone-client langchain_community
若仍遇到问题,确保安装了所需依赖项的最新版本,可以使用以下命令进行更新:
pip install --upgrade langchain langchain_openai langchain_community openai streamlit pinecone-client
此外,确保安装了兼容版本的Python(Python 3.7或更高版本)。
2. 构建Streamlit LangChain UI应用
开发环境搭建完成后,就可以开始构建实际的Streamlit LangChain UI应用了。
-
Streamlit应用的组件
:典型的Streamlit应用由
app.py
文件组成,这是一个Python脚本,包含构建Streamlit应用的代码,定义了应用的结构、布局和功能。在本文中,
app.py
文件名为
LangChainUI.py
,它是主要的入口点,在其中导入必要的库,定义用户界面组件,并指定应用的逻辑和交互。要运行此Streamlit应用,在终端或命令提示符中使用
streamlit run LangChainUI.py
命令。
-
构建应用的步骤
:
1. 导入必要的库:
import os
import streamlit as st
from langchain.chains import LLMChain
from langchain.prompts import ChatPromptTemplate, HumanMessagePromptTemplate
from langchain.chat_models import ChatOpenAI
2. 设置API密钥:
os.environ["OPENAI_API_KEY"] = "your_openai_api_key_here"
3. 设置Streamlit UI:
st.title("ChatGPT-like Q&A App")
user_query = st.text_input("Enter your question:")
4. 初始化聊天历史:
if 'chat_history' not in st.session_state:
st.session_state['chat_history'] = []
5. 显示聊天历史:
for chat in st.session_state['chat_history']:
st.write(f"Q: {chat['question']}")
st.write(f"A: {chat['answer']}")
st.write("---")
6. 处理用户输入:
if user_query and st.button("Submit"):
7. 创建并使用语言模型:
llm = ChatOpenAI(temperature=0.7, model_name='gpt-3.5-turbo')
prompt = ChatPromptTemplate.from_messages([
HumanMessagePromptTemplate.from_template("{query}")
])
chain = LLMChain(llm=llm, prompt=prompt)
response = chain.run(query=user_query)
8. 更新并显示响应:
st.session_state['chat_history'].append({"question": user_query, "answer": response})
st.write("Answer:")
st.write(response)
9. 备用消息:
else:
st.write("Please enter a question and click Submit.")
3. 运行和测试应用
-
运行Streamlit应用
:
- 打开终端或命令提示符。
-
使用
cd命令导航到LangChainUI.py文件所在的目录,例如:
cd /path/to/your/app/directory
3. 进入正确目录后,运行以下命令:
streamlit run LangChainUI.py
4. 此命令将启动Streamlit服务器并运行`LangChainUI.py`文件。Streamlit将提供一个URL(通常为http://localhost:8501),可以在Web浏览器中打开该URL以查看和与Streamlit应用进行交互。
-
在Web浏览器中查看应用
:运行
streamlit run LangChainUI.py命令后,Streamlit将在命令提示符中显示应用正在运行的消息,并提供一个URL,将其复制并粘贴到首选的Web浏览器中,或直接点击该URL即可查看和与应用进行交互。 -
与Streamlit应用进行交互
:应用在Web浏览器中加载后,可以根据
LangChainUI.py文件中定义的组件和功能与应用进行交互。Streamlit会在对LangChainUI.py文件进行更改时实时更新应用,便于快速迭代和开发。 -
停止Streamlit服务器
:若需要停止Streamlit服务器并退出应用,回到运行
streamlit run LangChainUI.py命令的命令提示符窗口,按Ctrl+C中断服务器并终止Streamlit应用。 -
测试应用
:可以通过提问来测试应用。例如,问第一个问题“Who is the CEO of Apple Inc.?”,答案很明确(截至2024年,Tim Cook是苹果公司的CEO)。第二个问题直接引用第一个问题的答案,但未明确提及该人物,这要求应用能够:
- 为第一个问题提供正确答案(Tim Cook)。
- 理解第二个问题中的“this person”指的是Tim Cook。
- 回忆起Tim Cook的前任是Steve Jobs。
-
识别出iPhone是Steve Jobs推出的革命性产品。
若应用的记忆功能正常,对第二个问题的正确响应将表明应用在两个问题之间保持了上下文,并能关联两个问题的信息以提供连贯的答案。
以下是构建和运行应用的流程图:
graph TD;
A[搭建开发环境] --> B[安装Streamlit库];
A --> C[安装Python];
A --> D[安装所需依赖项];
B --> E[检查是否已安装];
E -- 未安装 --> F[安装Streamlit];
C --> G[检查Python是否安装];
G -- 未安装 --> H[从Microsoft Store安装Python];
G -- 已安装 --> I[检查pip是否安装];
I -- 未安装 --> J[下载get-pip.py脚本并安装pip];
I -- 已安装 --> K[添加Python和pip到PATH];
K --> L[验证安装];
D --> M[安装依赖项];
M --> N[更新依赖项];
A --> O[构建Streamlit LangChain UI应用];
O --> P[导入必要的库];
P --> Q[设置API密钥];
Q --> R[设置Streamlit UI];
R --> S[初始化聊天历史];
S --> T[显示聊天历史];
T --> U[处理用户输入];
U --> V[创建并使用语言模型];
V --> W[更新并显示响应];
W --> X[显示备用消息];
O --> Y[运行和测试应用];
Y --> Z[运行Streamlit应用];
Z --> AA[在Web浏览器中查看应用];
AA --> AB[与应用进行交互];
AB --> AC[停止Streamlit服务器];
Y --> AD[测试应用];
4. 部署LangChain应用
4.1 安装Git
在部署LangChain应用之前,需要确保系统上安装了Git,具体步骤如下:
1.
安装Git
:
- 访问官方Git网站(https://git-scm.com/download/win)。
- 下载Windows安装程序。
- 运行安装程序并按照安装向导进行操作,除非有特定偏好,否则使用默认设置。
2.
将Git添加到PATH
:安装后,Git通常会自动添加到系统的PATH中。若未添加,可以手动添加:
- 右键单击“此电脑”或“我的电脑”,选择“属性”。
- 点击“高级系统设置”。
- 点击“环境变量”。
- 在“系统变量”下找到并选择“Path”变量,点击“编辑”。
- 点击“新建”并添加Git安装目录的路径,通常为
C:\Program Files\Git\cmd
。
- 点击“确定”关闭所有对话框。
3.
重启命令提示符
:安装Git或修改PATH后,需要关闭并重新打开命令提示符,使更改生效。
4.
验证安装
:打开新的命令提示符窗口,输入
git --version
,若一切设置正确,将显示安装的Git版本。
5.
尝试初始化Git仓库
:现在应该能够在项目目录中无错误地运行
git init
命令。
4.2 设置Git身份信息
Git使用身份信息将提交与作者关联起来,需要设置Git配置,包括姓名和电子邮件地址:
1.
设置电子邮件地址
:运行以下命令,将“your.email@example.com”替换为实际的电子邮件地址:
git config --global user.email your.email@example.com
- 设置姓名 :运行以下命令,将“Your Name”替换为实际姓名:
git config --global user.name "Your Name"
- 验证设置 :可以通过运行以下命令检查设置:
git config --list
此命令将显示所有Git配置,包括刚刚设置的电子邮件和姓名。
4.
再次尝试提交
:设置电子邮件和姓名后,再次尝试提交命令:
git commit -m "Initial commit for Streamlit Q&A app"
重要提示:
-
--global
标志为计算机上的所有Git仓库设置此配置。若想为不同项目使用不同设置,可以省略
--global
并在特定仓库中运行这些命令。
- 若计划将提交推送到GitHub,请确保使用与GitHub账户关联的电子邮件地址。
- 若担心隐私问题,GitHub提供了保持电子邮件地址私密的选项,可以在Git配置中使用GitHub提供的no-reply电子邮件地址。
4.3 设置OpenAI密钥为环境变量
为了安全地存储敏感信息(如API密钥),应该为本地开发设置环境变量,以下是详细的设置方法:
-
Windows系统
:
-
临时设置(仅当前会话有效)
:打开命令提示符,输入
set OPENAI_API_KEY=your_api_key_here
。
-
永久设置
:在开始菜单中搜索“环境变量”,点击“编辑系统环境变量”,点击“环境变量”,在“用户变量”下点击“新建”,变量名设置为
OPENAI_API_KEY
,变量值设置为
your_api_key_here
,点击“确定”保存。
-
macOS/Linux系统
:
-
临时设置(仅当前会话有效)
:打开终端,输入
export OPENAI_API_KEY=your_api_key_here
。
-
永久设置
:打开shell配置文件(如
~/.bash_profile
、
~/.zshrc
),添加
export OPENAI_API_KEY=your_api_key_here
这一行,保存文件并重启终端,或运行
source ~/.bash_profile
(或相关文件)。
-
使用.env文件
:
1. 在项目目录中创建一个名为
.env
的文件。
2. 在文件中添加以下行:
OPENAI_API_KEY=your_api_key_here
3. 安装`python-dotenv`包:
pip install python-dotenv
4. 在Python代码中加载环境变量:
from dotenv import load_dotenv
import os
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
- 在代码中访问环境变量 :设置环境变量后,可以在Python代码中如下访问:
import os
openai_api_key = os.getenv("OPENAI_API_KEY")
-
使用环境变量的好处
:
- 安全性 :API密钥不会硬编码在源代码中。
- 灵活性 :无需修改代码即可轻松更改。
- 可移植性 :适用于不同的环境(开发、测试、生产)。
-
最佳实践
:
-
永远不要将
.env文件提交到版本控制。 -
将
.env添加到.gitignore文件中。 -
为其他开发者提供带有占位符值的
.env.example文件。
-
永远不要将
4.4 解决仓库中的敏感信息问题
若发现仓库中仍存在敏感信息问题,可以按照以下步骤解决:
1.
创建.env文件
:创建一个名为
.env.txt
的文件,但实际应该是
.env
(无
.txt
扩展名)。
2.
从Git跟踪中移除.env文件
:
git rm --cached .env.txt
git rm --cached .env
- 重命名.env.txt为.env(如有需要) :
ren .env.txt .env
-
更新.gitignore文件
:确保
.gitignore文件包含以下内容:
.env
*.pyc
__pycache__/
- 从其他文件中移除API密钥 :打开“LangChainUI.py”文件,将硬编码的API密钥替换为:
import os
from dotenv import load_dotenv
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
- 提交这些更改 :
git add .gitignore
git add LangChainUI.py "LangChainUI - Copy.py"
git commit -m "Remove API keys and update .gitignore"
- 强制推送更改 :
git push -u origin main --force
- 清理Git历史 :若API密钥仍存在于Git历史中,可能需要清理:
git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env.txt .env LangChainUI.py 'LangChainUI - Copy.py'" --prune-empty --tag-name-filter cat -- --all
以下是部署应用的步骤总结表格:
| 步骤 | 操作 |
| ---- | ---- |
| 安装Git | 从官方网站下载安装程序,安装并添加到PATH,验证安装 |
| 设置Git身份信息 | 设置电子邮件和姓名,验证设置并尝试提交 |
| 设置OpenAI密钥为环境变量 | 根据不同系统设置临时或永久环境变量,使用.env文件管理 |
| 解决仓库中的敏感信息问题 | 移除.env文件的跟踪,更新.gitignore,移除其他文件中的API密钥,提交更改并清理Git历史 |
通过以上步骤,你可以成功构建、运行、测试和部署一个类ChatGPT的应用程序,同时确保敏感信息的安全。希望这些内容对你有所帮助,祝你开发顺利!
使用Streamlit构建和部署类ChatGPT应用
5. 常见问题及解决方案
在开发和部署过程中,可能会遇到一些常见问题,下面为你详细介绍这些问题及相应的解决方案。
| 问题类型 | 问题描述 | 解决方案 |
|---|---|---|
| 安装问题 |
运行
pip install streamlit
时提示未安装pip
|
先检查Python是否安装,若未安装则从Microsoft Store安装Python;若Python已安装但pip缺失,从官方pip网站下载
get-pip.py
脚本并安装pip,然后将Python和pip添加到系统的PATH环境变量中
|
| 代码问题 | 代码出现缩进错误 | 确保代码块的缩进在整个代码中保持一致,Python中通常每个缩进级别为4个空格 |
| 敏感信息问题 | 仓库中存在敏感信息(如API密钥) |
创建
.env
文件,从Git跟踪中移除该文件,更新
.gitignore
文件,将硬编码的API密钥替换为从环境变量获取,提交更改并清理Git历史
|
| 依赖问题 | 运行代码时提示缺少依赖项 |
使用
pip install streamlit openai langchain pinecone-client langchain_community
安装所需依赖项,若需要更新依赖项,使用
pip install --upgrade langchain langchain_openai langchain_community openai streamlit pinecone-client
|
6. 优化建议
为了让应用程序更加稳定、高效和安全,以下是一些优化建议:
-
性能优化
-
缓存机制
:对于一些频繁使用的结果,可以使用缓存机制,避免重复计算。例如,在Streamlit中可以使用
st.cache装饰器来缓存函数的返回值。
-
缓存机制
:对于一些频繁使用的结果,可以使用缓存机制,避免重复计算。例如,在Streamlit中可以使用
import streamlit as st
@st.cache
def expensive_function():
# 模拟耗时操作
import time
time.sleep(5)
return "Result"
result = expensive_function()
st.write(result)
- **异步处理**:对于一些耗时的操作,如网络请求或复杂计算,可以使用异步编程来提高应用的响应速度。在Python中可以使用`asyncio`库来实现异步处理。
-
安全优化
- 输入验证 :对用户输入进行严格的验证,防止恶意输入导致的安全问题。例如,在处理用户查询时,可以使用正则表达式或其他验证方法来确保输入的合法性。
import re
user_query = st.text_input("Enter your question:")
if user_query:
if re.match(r'^[a-zA-Z0-9\s]+$', user_query):
# 输入合法,继续处理
pass
else:
st.write("Invalid input. Please enter only alphanumeric characters and spaces.")
- **更新依赖库**:及时更新使用的依赖库,以获取最新的安全补丁和功能改进。
-
用户体验优化
- 界面设计 :优化应用的界面设计,使其更加美观、易用。可以使用Streamlit提供的各种组件和布局选项来创建一个吸引人的用户界面。
- 错误提示 :提供清晰、友好的错误提示信息,让用户能够轻松理解问题并采取相应的措施。
以下是优化应用的流程图:
graph TD;
A[性能优化] --> B[使用缓存机制];
A --> C[异步处理];
D[安全优化] --> E[输入验证];
D --> F[更新依赖库];
G[用户体验优化] --> H[界面设计];
G --> I[错误提示];
7. 总结与展望
通过本文的介绍,我们详细了解了如何使用Streamlit和LangChain构建、运行、测试和部署一个类ChatGPT的应用程序。整个过程包括搭建开发环境、构建Streamlit LangChain UI应用、运行和测试应用以及部署应用等步骤,同时还介绍了如何解决常见问题和进行优化。
在未来,随着人工智能技术的不断发展,类ChatGPT应用将会有更广泛的应用场景。例如,可以将其应用于智能客服、智能写作、智能问答等领域,为用户提供更加智能、便捷的服务。同时,我们也可以进一步探索如何结合其他技术,如机器学习、深度学习等,来提升应用的性能和功能。
希望本文能够为你提供有价值的参考,帮助你成功开发出优秀的类ChatGPT应用程序。在开发过程中,不断学习和实践,积累经验,相信你一定能够取得更好的成果。祝你在技术的道路上越走越远!
超级会员免费看
290

被折叠的 条评论
为什么被折叠?



