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

news2024/11/8 18:33:32

大家好,我是海鸽。

今天,我要和大家分享如何将请求 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 访问它。

🌟 结语

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1861619.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

更适合敏感口腔的护理牙刷

最近在用一款清九野小红盾舒敏牙刷,感觉它很适合牙龈敏感的人,让刷牙体验有了显著的提升。这款牙刷的柔软刷毛和精细设计让我的刷牙过程变得轻松愉快。它的内外圈双重植毛技术,在清洁牙齿的同时,还能深入牙缝,温和地去…

js实现数据加密,jwt加密方式

一个简单的数据加密 const crypto require("crypto");// 普通的数据加密 function sign(msg,key){ // 原始信息,密钥 String// "sha256" :加密的算法,key :密钥,msg :要加密的信息,"hex" :转成16…

攻击者开始使用 XLL 文件进行攻击

近期,研究人员发现使用恶意 Microsoft Excel 加载项(XLL)文件发起攻击的行动有所增加,这项技术的 MITRE ATT&CK 技术项编号为 T1137.006。 这些加载项都是为了使用户能够利用高性能函数,为 Excel 工作表提供 API …

【Mac】XnViewMP for Mac(图片浏览查看器)及同类型软件介绍

软件介绍 XnViewMP 是一款多功能、跨平台的图像查看和管理软件,适用于 macOS、Windows 和 Linux 系统。它是经典 XnView 软件的增强版本,更加现代化且功能更强大。XnViewMP 支持数百种图像格式,并提供多种图像处理工具,使其成为摄…

基于Java微信小程序自驾游拼团设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动顺利开展

6月21日,省教育评估院在四川邮电职业技术学院组织开展全省高等职业学校大数据技术专业建设暨专业质量监测研讨活动。省教育评估院副院长赖长春,四川邮电职业技术学院党委副书记、校长冯远洪,四川邮电职业技术学院党委委员、副校长程德杰等出席…

集群分布式储存

硬件: 存储柜 软件 : software define storage 分布式存储 是一种独特的系统架构由一组能够通过网络连通,为了完成共同任务而协调任务的计算机节点组成分布式是为了使用廉价的普通的计算机完成复杂的计算和存储任务目的就是利用更多的机…

Sam Altman:从少儿奇才到OpenAI掌舵人

自2022年底发布了ChatGPT以来,OpenAI及其首席执行官Sam Altman迅速成为科技界的焦点人物。Altman的崛起并非偶然,而是长期以来不断追求权力和创新的结果。本文将回顾Altman的成长历程,探索他如何一步步走向OpenAI的顶峰。 童年与教育背景 S…

JavaWeb系列十九: jQuery的DOM操作 上

查找节点, 修改属性 查找属性节点: 查找到所需要的元素之后, 可以调用jQuery对象的attr()方法用来 设置/返回 它的各种属性值 设置属性值 $(“img”).attr(“width”, “300”);返回属性值 $(“img”).attr(“width”); 创建节点 创建节点: 使用jQuery的工厂函数$(): $(html标…

WPS复制后转置粘贴

1. WPS复制后转置粘贴 复制-》右键-》顶部第一行-》粘贴行列转置,如下图: 2. Excel office365 本地版 2. Excel office365 在线版

Linux下执行C++程序

编译 一步到位的编译: g cpp文件 # 此时默认生成一个a.out的可执行程序 g cpp文件 -o 可执行程序名称 # 此时可以自定义可执行程序的名称 分步编译: # 1.预处理(Pre_processing) # 功能:将源程序头文件展开、删除注释、宏替换 g -E cpp文件…

Redis 7.x 系列【6】数据类型之字符串(String)

有道无术,术尚可求,有术无道,止于术。 本系列Redis 版本 7.2.5 源码地址:https://gitee.com/pearl-organization/study-redis-demo 文章目录 1. 前言2. 常用命令2.1 SET2.2 GET2.3 MSET2.4 MGET2.5 GETSET2.6 STRLEN2.7 SETEX2.8…

0625_ARM2

练习: 汇编实现1-100累加,结果保存在r0 .text .global _start start:mov r0,#0mov r1,#1b loop loop:add r0,r0,r1add r1,r1,#1cmp r1,#101bne loop .end思维导图:

EPLAN页属性批量修改

在使用EPLAN软件时,项目数据量大的时候,需要修改页属性,每一页单独修改会很繁琐,这里介绍如何批量修改页属性: 在EPLAN里点击“工具----从外部编辑属性------导出数据” 这里按图示可定义保存位置,和输出方…

感谢5年前的自己

感谢CSDN提醒,惊讶发现在CSDN上写作已经5年了,感叹时光如梭,感谢CSDN提供了这个技术交流分享平台,让我可以在这个平台上搜索到许多疑难问题的解决方案,也让自己在分享中不断加深问题解决方法的理解 初衷 写作初衷大概…

2024年软考架构设计师终于PASS啦

文章目录 系统架构设计师是什么考试要求考试科目个人心得综合知识上午案例下午论文 系统架构设计师是什么 系统架构设计师,属于计算机技术与软件(高级)专业技术资格。考试合格人员能够根据系统需求规格说明书,结合应用领域和技术…

数据增强 data augmentation(在PyTorch中,data_transforms通常用于数据集处理,并且经常用于数据增强)

数据增强是一种在训练深度学习模型时,通过对输入数据进行变换和修改的方法,以增加训练数据集的大小和多样性,从而提高模型的泛化能力和性能。 PS: PyTorch中,data_transforms具体使用代码可以查看这篇文章: pytor…

QT学习积累——float 接收 两个 int类型的值相除的结果,即 float f = int(1)/ int(2)= 0

目录 引出除法的一个坑 总结自定义信号和槽1.自定义信号2.自定义槽3.建立连接4.进行触发 自定义信号重载带参数的按钮触发信号触发信号拓展 lambda表达式返回值mutable修饰案例 引出 QT学习积累——float 接收 两个 int类型的值相除的结果,即 float f int&#xf…

网络安全事件研判

研判(入侵检测) 研判我理解为人工层面对入侵检测事件进行再分析,即借助已有的设备告警根据经验判断是否为真实攻击 研判工作要充分利用已有安全设备(需要提前了解客户的网络拓扑以及部署设备情况),分析其近…