社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

超炫酷, 不用学前端也能自己做网页!这个Python库,10分钟内复刻GPT WEB应用

小白玩转Python • 5 月前 • 153 次点击  

点击下方卡片,关注“小白玩转Python”公众号



大家好,我是海鸽。

今天,我要和大家分享如何将请求 GPT 的案例,快速“复刻”成 GPT 网页版。这不仅简单,而且对于我们这些后端开发者来说,简直是福音!

先睹为快

看看这个界面,是不是感觉很熟悉?

这就是我们今天要介绍的主角-Streamlit,此篇文章我们仅仅从复刻一个聊天机器人的角度介绍,认识一下其强大之处。

初识Streamlit

Streamlit 是一个开源的 Python 库,它允许数据科学家快速地将数据脚本转换为交互式网页应用程序。

使用 Streamlit,你可以轻松地创建和分享数据应用,而无需深入了解前端开发。它特别适合于机器学习、数据分析和数据可视化项目。

白话一下就是,Streamlit 可以让没有任何前端基础的人,使用 Python 开发 Web 应用,没有复杂的配置,没有复杂的语法,开箱即用,拎包入住。

Streamlit 的主要特性

Streamlit 作为一个用于快速构建数据应用的 Python 库,其核心特性主要包括:

  1. 快速开发:使用 Streamlit,你可以用很少的代码快速搭建起一个基本的 Web 应用。

  2. 数据可视化:Streamlit 支持多种数据可视化库,如 Matplotlib、Plotly、Bokeh 等,可以轻松地将图表和数据展示在 Web 应用中。

  3. 部署简单:Streamlit 应用可以通过 Streamlit 共享、部署到 Heroku、AWS 等云平台,或者使用 Docker 容器化部署。

  4. 易于集成:Streamlit 可以很容易地与现有的 Python 数据科学栈集成,包括 Pandas、NumPy、Scikit-learn 等。

这些特性使得 Streamlit 成为数据科学家、分析师和机器学习工程师快速展示和分享他们工作的强大工具。

Streamlit 的安装和使用过程相对简单,以下是基本步骤:

安装 Streamlit

首先,你需要确保你的计算机上安装了 Python。然后,通过 pip 安装 Streamlit。在命令行中运行以下命令:

pip install streamlit==1.36.0

创建一个 Streamlit 应用

  1. 创建 Python 脚本:创建一个新的 Python 文件,例如 app.py

  2. 创建.env配置文件免费的GPT KEY获取免费的千义通问KEY获取

OPENAI_API_KEY=sk-Y8wTnsdeG************7gw*******3LG
DASHSCOPE_API_KEY=sk-b***********192e00
  1. 编写代码:在 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()

运行 Streamlit 应用

在命令行中,确保你位于包含 app.py 的目录下,然后运行以下命令:

streamlit run app.py

这将启动一个本地服务器,并在默认的浏览器中打开你的 Streamlit 应用。你可以通过 http://localhost:8501 访问它。

🌟 结语

如果分享你的信息,对你有用!别忘了点赞在看关注

往期推荐

我用Python问GPT认不认识小范大人,它告诉我认识个der~

LangChain入门:白嫖通义千问,打造免费的Qwen大模型聊天机器人

人人都是AI大师 - Prompt工程

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/173501
 
153 次点击