今天,我要和大家分享如何将请求 GPT 的案例,快速“复刻”成 GPT 网页版。这不仅简单,而且对于我们这些后端开发者来说,简直是福音!
看看这个界面,是不是感觉很熟悉?
这就是我们今天要介绍的主角-Streamlit,此篇文章我们仅仅从复刻一个聊天机器人的角度介绍,认识一下其强大之处。
Streamlit 是一个开源的 Python 库,它允许数据科学家快速地将数据脚本转换为交互式网页应用程序。
使用 Streamlit,你可以轻松地创建和分享数据应用,而无需深入了解前端开发。它特别适合于机器学习、数据分析和数据可视化项目。
白话一下就是,Streamlit 可以让没有任何前端基础的人,使用 Python 开发 Web 应用,没有复杂的配置,没有复杂的语法,开箱即用,拎包入住。
Streamlit 作为一个用于快速构建数据应用的 Python 库,其核心特性主要包括:
快速开发:使用 Streamlit,你可以用很少的代码快速搭建起一个基本的 Web 应用。
数据可视化:Streamlit 支持多种数据可视化库,如 Matplotlib、Plotly、Bokeh 等,可以轻松地将图表和数据展示在 Web 应用中。
部署简单:Streamlit 应用可以通过 Streamlit 共享、部署到 Heroku、AWS 等云平台,或者使用 Docker 容器化部署。
易于集成:Streamlit 可以很容易地与现有的 Python 数据科学栈集成,包括 Pandas、NumPy、Scikit-learn 等。
这些特性使得 Streamlit 成为数据科学家、分析师和机器学习工程师快速展示和分享他们工作的强大工具。
Streamlit 的安装和使用过程相对简单,以下是基本步骤:
首先,你需要确保你的计算机上安装了 Python。然后,通过 pip 安装 Streamlit。在命令行中运行以下命令:
`pip install streamlit==1.36.0 `
创建 Python 脚本:创建一个新的 Python 文件,例如 app.py
。
创建.env
配置文件:免费的GPT KEY获取、免费的千义通问KEY获取
`OPENAI_API_KEY=sk-Y8wTnsdeG************7gw*******3LG DASHSCOPE_API_KEY=sk-b***********192e00 `
app.py
中编写你的 Streamlit 应用代码。以下是一个简单的示例:`# !usr/bin/env python # -*- coding:utf-8 _*- # __author__:lianhaifeng # 导入 Streamlit 库 import streamlit as st from gpt_bot_stream import stream_invoke from qw_bot import xiao_hei_zi # 使用 Streamlit 的 API 来创建应用 st.title('10分钟编写大模型应用') st.caption('利用大模型和Streamlit复刻一个闽南菜助手应用') with st.sidebar: option = st.selectbox( '选择大模型引擎', ('GPT-3.5', 'GPT-4', "qwen-turbo", "qwen-max") ) model_mapping = { 'GPT-3.5': 'gpt-3.5-turbo', 'GPT-4': 'gpt-4', 'qwen-turbo': 'qwen-turbo', 'qwen-max': 'qwen-max', } def set_model(model_option: str): """根据用户选择设置模型参数""" return model_mapping.get(model_option, "gpt-3.5-turbo") # 根据选项设置会话状态中的OpenAI模型参数 st.session_state["openai_model"] = set_model(option) # 检查会话状态中是否已有消息列表,如果没有,则初始化为空列表 if "messages" not in st.session_state: st.session_state.messages = [] # 遍历会话状态中的消息列表 for message in st.session_state.messages: # 使用与消息角色对应的聊天消息区域 with st.chat_message(message["role"]): # 在聊天消息区域显示消息内容 st.markdown(message["content"]) # 初始化一个聊天输入框,鼓励用户输入消息并@特定的助手 prompt = st.chat_input("随时@你想要的[海哥Python]+ 使用闽南菜助手!") # 如果用户输入了消息 if prompt: # 将用户消息添加到会话状态中的消息列表 st.session_state.messages.append({"role": "user", "content": prompt}) # 显示用户消息 with st.chat_message("user"): st.markdown(prompt) # 检查是否启用了特定的OpenAI模型 if st.session_state["openai_model"] in ["gpt-3.5-turbo", "gpt-4", "qwen-turbo", "qwen-max"]: # 显示助手正在思考的消息 with st.chat_message("assistant"): with st.spinner("Thinking..."): # 准备向后端服务请求的数据 request_inputs = { "messages": st.session_state.messages, "model_name": st.session_state["openai_model"] } print(request_inputs) # 调用后端服务,获取助手的回复 if request_inputs["model_name"] in ["qwen-turbo", "qwen-max"]: stream_invoke = xiao_hei_zi response = st.write_stream(stream_invoke(**request_inputs)) # 显示助手的回复 st.markdown(response) # 将助手的回复添加到消息列表 st.session_state.messages.append({"role": "assistant", "content": response}) `
导入的 GPT 大模型请求(gpt_bot_stream.py
):
`#! -*-conding=: UTF-8 -*- from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from dotenv import load_dotenv, find_dotenv # 导入dotenv库,用于加载环境变量 _ = load_dotenv(find_dotenv()) # 加载.env文件中的环境变量 output_parser = StrOutputParser() def stream_invoke(messages, model_name: str = "gpt-3.5-turbo"): llm = ChatOpenAI(temperature=0.9, streaming=True, base_url="https://api.chatanywhere.com.cn/v1", model_name=model_name) prompt = ChatPromptTemplate.from_messages([ ("system", "你是世界级的大厨,精通闽南菜,请根据提供的信息,回答问题。"), ("user", "{input}") ]) prompt_llm = prompt | llm | output_parser return prompt_llm.stream(messages) if __name__ == '__main__': for response in stream_invoke(messages="介绍一下泉州海蛎煎?详细些!"): print(response) `
导入的千问大模型请求(qw_bot.py
):
`#! -*-conding=: UTF-8 -*- from dotenv import find_dotenv, load_dotenv from langchain_community.llms import Tongyi from langchain_core.runnables import RunnableSequence from langchain.prompts import PromptTemplate load_dotenv(find_dotenv()) def xiao_hei_zi(messages: str = '介绍一下泉州海蛎煎?详细些!', model_name: str = "qwen-turbo"): llm = "" match model_name: case "qwen-turbo": llm = Tongyi(temperature=1, model_name=model_name) case "qwen-max": llm = Tongyi(temperature=1, model_name=model_name) if not llm: llm = Tongyi(temperature=1, model_name=model_name) print(llm.model_name) template = ''' 你是世界级的大厨,精通闽南菜,请根据提供的信息,回答问题,详细些!。问题:{question} ''' prompt = PromptTemplate( template=template, input_variables=["question"] ) chain = RunnableSequence(prompt | llm) res = chain.stream({"question": messages}) print(res) return res if __name__ == '__main__': xiao_hei_zi() `
在命令行中,确保你位于包含 app.py
的目录下,然后运行以下命令:
`streamlit run app.py `
这将启动一个本地服务器,并在默认的浏览器中打开你的 Streamlit 应用。你可以通过 http://localhost:8501
访问它。
更多每日开发小技巧
尽在****未闻 Code Telegram Channel !
END
未闻 Code·知识星球开放啦!
一对一答疑爬虫相关问题
职业生涯咨询
面试经验分享
每周直播分享
......
未闻 Code·知识星球期待与你相见~
一二线大厂在职员工
十多年码龄的编程老鸟
国内外高校在读学生
中小学刚刚入门的新人
在“未闻 Code技术交流群”等你来!
入群方式:添加微信“mekingname”,备注“粉丝群”(谢绝广告党,非诚勿扰!)