27、使用Streamlit构建和部署类ChatGPT应用

使用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应用
    1. 打开终端或命令提示符。
    2. 使用 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)。第二个问题直接引用第一个问题的答案,但未明确提及该人物,这要求应用能够:
    1. 为第一个问题提供正确答案(Tim Cook)。
    2. 理解第二个问题中的“this person”指的是Tim Cook。
    3. 回忆起Tim Cook的前任是Steve Jobs。
    4. 识别出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
  1. 设置姓名 :运行以下命令,将“Your Name”替换为实际姓名:
git config --global user.name "Your Name"
  1. 验证设置 :可以通过运行以下命令检查设置:
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
  1. 重命名.env.txt为.env(如有需要)
ren .env.txt .env
  1. 更新.gitignore文件 :确保 .gitignore 文件包含以下内容:
.env
*.pyc
__pycache__/
  1. 从其他文件中移除API密钥 :打开“LangChainUI.py”文件,将硬编码的API密钥替换为:
import os
from dotenv import load_dotenv
load_dotenv()
openai_api_key = os.getenv("OPENAI_API_KEY")
  1. 提交这些更改
git add .gitignore
git add LangChainUI.py "LangChainUI - Copy.py"
git commit -m "Remove API keys and update .gitignore"
  1. 强制推送更改
git push -u origin main --force
  1. 清理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 装饰器来缓存函数的返回值。
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应用程序。在开发过程中,不断学习和实践,积累经验,相信你一定能够取得更好的成果。祝你在技术的道路上越走越远!

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器的建模与仿真展开,重点介绍了基于Matlab的飞行器动力学模型构建与控制系统设计方法。通过对四轴飞行器非线性运动方程的推导,建立其在三维空间中的姿态与位置动态模型,并采用数值仿真手段实现飞行器在复杂环境下的行为模拟。文中详细阐述了系统状态方程的构建、控制输入设计以及仿真参数设置,并结合具体代码实现展示了如何对飞行器进行稳定控制与轨迹跟踪。此外,文章还提到了多种优化与控制策略的应用背景,如模型预测控制、PID控制等,突出了Matlab工具在无人机系统仿真中的强大功能。; 适合人群:具备一定自动控制理论基础Matlab编程能力的高校学生、科研人员及从事无人机系统开发的工程师;尤其适合从事飞行器建模、控制算法研究及相关领域研究的专业人士。; 使用场景及目标:①用于四轴飞行器非线性动力学建模的教学与科研实践;②为无人机控制系统设计(如姿态控制、轨迹跟踪)提供仿真验证平台;③支持高级控制算法(如MPC、LQR、PID)的研究与对比分析; 阅读建议:建议读者结合文中提到的Matlab代码与仿真模型,动手实践飞行器建模与控制流程,重点关注动力学方程的实现与控制器参数调优,同时可拓展至多自由度或复杂环境下的飞行仿真研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值