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

详解一个Python库,用于构建精美数据可视化web app,练习做个垃圾分类app 今天详解一个 Python 库 Streamlit,它可以为机器学习和数据分析构建 web app。它的优势是入门容易、纯 Python编码、开发效率高、UI精美。 上图是用 Streamlit 构建自动驾驶模型效果的 demo,左侧是模型的参数,右侧是模型的效果。通过调整左侧参数,右边的模型会实时地响应。 由此可以看出,对于交互式的数据可视化需求,完全可以考虑用 Streamlit 实现。特别是在学习、工作汇报的时候,用它的效果远好于 PPT。 因为 Streamlit 提供了很多前端交互. 阅读详情

大家好,我是海鸽。

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

🌟 结语

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

Pandas入门教程(二十二):股票数据分析实战——yfinance 获取数据、技术指标与收益率分析 把 Pandas 用在真实场景,才能体会它的价值。本文以茅台股票为例,用 yfinance 获取历史行情,完成缺失值处理与列筛选,绘制收盘价曲线,计算 SMA 移动平均线与 RSI 相对强弱指数,并通过日收益率、累计收益率和波动率完成完整的量化分析流程。 阅读详情

相关推荐

Python + Web 技术构建炫酷桌面应用

它利用 WebKit 或 Chromium 渲染引擎,将你的 HTML、CSS 和 JavaScript 代码嵌入到一个独立的窗口中,并与你的 Python 代码进行交互。Pywebview 是一个强大的工具,它可以帮助你使用熟悉的 Web 技术来构建跨平台的桌面应用程序。Pywebview 可以用来构建各种类型的桌面应用程序,例如简单的工具、数据可视化工具、游戏等等。由于 Pywebview 的跨平台特性,你可以轻松地将你的应用程序移植到不同的操作系统上。你可以使用 JavaScript 的。

wjianwei666的专栏 6085

2024年国产开源前端项目 Top 10

本文将分享国产的 Github Star 数量 Top 10 的前端开源项目,你用过哪些?在阅读本文之前,奇兵本人我已经使用过的有:Ant Design、Echarts、uni-app、Ant Design Pro、Taro,以下10个中本人已经用过5个,他们各有千秋,在不同的需求环境中使用不同的开源前端框架很重要。!!因为在未来优化决定你对整个项目结构以及规划进行的。建议大家可以都尝试使用。特别是uni-app ,我已经做了10+的APP和小程序、H5程序。

骑着牛的奇兵的博客 2357

酷炫浪漫表白页面(附代码)

此代码支持修改,本页面充满浪漫,是表白的不二之选。

Streamlit 使用

如果streamlit首次看到缓存修饰符,将会运行代码并将返回值储存在缓存中,下次运行同样的函数和输入时,将会跳过执行直接返回缓存中的值作为替换。当功能代码更新时,缓存会自动更新。Streamlit 需要更新时,会从上至下的执行程序。每次运行时界面记录+1,不同网页之间数据不相同(不同设备、同一设备不同界面都会单独计算)。这个修饰会通过重新运行或者会话共享资源。用于记录变量,从而保证每次重新运行时记录上次变量(每次与控件交互时,会重新运行脚本)。对缓存返回值的任何更改都会直接改变缓存中的对象。

飞飞君 6832

ADB命令解锁Android手机屏幕的3种实用方法(附详细步骤)

本文详细介绍了在Android手机屏幕失灵或密码遗忘时,利用ADB命令解锁屏幕的三种实用方法。包括通过ADB模拟输入事件、移除锁屏认证文件(需Root权限)以及结合恢复模式抢救数据。文章提供了详细的操作步骤与风险提示,强调提前开启USB调试的重要性,是Android用户应对紧急锁屏情况的有效技术指南。

weixin_29229055的博客 917

虚拟机ubuntu22.04.3中安装vitis2024.1注意事项

虚拟机ubuntu安装vitis2024.1

qq_52033578的博客 2492

部署streamlit网站应用(部署GPT网页为例)

2.选择对应的github刚才建立的repository。3.还要上传requirements.txt。2.上传需要运行的代码文件。

qq_44855473的博客 1077

WebVTT中的文本轨道(Text Tracks,TT)到底是什么鬼?

WebVTT,全称是The Web Video Text Tracks Format,意思是网络视频文本轨道格式。那么到底什么是文本轨道(Text Tracks)呢?这篇文章希望一探究竟。

码农1479的博客 1985

神奇的streamlit (哇 原来深度学习还可以这样玩)

你是否还是为不懂深度学习而烦恼,你是否不知道不同的深度学习参数有什么区别,你是否还是思考什么优化器比较好,你是否不太知道激活函数和损失函数的选择which better,你是否还在思考要去哪里找代码并且去在编译器上跑出一个好丑的结果,那就快看Streamlit,他可能让本身你不懂机器学习的同学也能测试出很好的结果哦,体验深度学习的魅力。

风信子的猫Redamancy的快乐星球 9438

redhawk-sc(seascape)学习日志2

design view是主view,是所有seascape view中最root的部分,一个design view可以驱动多种类型分析比如静态IR drop,动态IR drop以及EM.这些分析可以在不同的PVT和翻转率下.Design view是一个必须的view对于redhawk中的任何类型分析来说。seascape view相当于一个容器,用于保存各种和设计相关的数据,类似于逻辑信息、物理信息等等,每个view都有其对应的输入件和依赖,这些view都是redhawk用于各种类型的分析所需。

qq_39493558的博客 3497

GD32F4系列Keil工程模板搭建全攻略(手把手教学版)

本文提供了一份详细的GD32F4系列Keil工程模板搭建指南。从软件安装、固件库获取、目录规划,到Keil工程创建、文件添加、关键配置(如编译器选项、头文件路径、时钟设置),再到代码定制与常见问题排查,手把手教你构建一个标准化、模块化的开发基础。文章重点介绍了如何利用官方固件库和代码模板,快速建立稳定高效的开发环境,适用于GD32F407等Cortex-M4内核芯片的入门与项目开发。

weixin_29159995的博客 427

送给曾经有黑客梦的前端工程师小伙伴

我们常常会在一些好莱坞电影大片里看到超级黑客高手,在电脑前轻松“黑”进别人的安全系统的场景。那纯熟自如地输入一大堆复杂的代码,不一下子就入侵/破解完成,是不是很羡慕?其实咱们也可以像电影、游戏里面的黑客一样敲代码,今天就介绍一个传说中的装逼神器 HackerTyper 给你吧!它是一个专门为装 B 而制作的神奇好玩的网页,打开之后只要随便按键盘,你就可以屌到爆地写代码当黑客,逼格立即高达上好不好?!

Web全栈笔记 3692

Vensim系统动力学建模实战:从理论到仿真优化【案例详解】

本文详细介绍了Vensim在系统动力学建模中的实战应用,从基础理论到仿真优化全面解析。通过人口增长、供应链库存优化等典型案例,展示如何利用Vensim构建动态模型并进行参数优化,帮助读者掌握系统动力学建模的核心技术与实践技巧。

weixin_29231725的博客 475

python老司机带你玩玩炫酷的3D渲染,酷毙了!

自从学会了turtle模块后,画了不少简笔画。像小猪佩奇、哆啦A梦等等,但是这些依然不能让身边人感受到python的强大,依然是每次装逼必被打脸。就像你用turtle画了这个 别人拿出了这个 怎么办?面对函数库如此丰富的python,一库不行,我们还有另一库。那就是pyray库。 pyray库介绍 pyray库创建于2018年1月,虽然目前渲染3D场景的最佳工具仍然是POV ray...

qq_42238397的博客 1万+

剪映专业版关键帧完全教程:从原理到实战的动画必修课

关键帧是视频动画的核心原理。视频由连续静止画面(帧)构成,关键帧记录素材属性变化的起始与结束状态,中间过渡帧由软件自动计算生成。剪映专业版中,视频、音频、文本、贴纸等素材均支持关键帧动画,可调节位置、缩放、旋转、不透明度、音量等参数。操作为:在起始位置点击参数旁菱形按钮添加关键帧,移动播放头后调整参数,系统自动生成第二个关键帧。多属性可独立控制并叠加,实现放大同时淡出等复合效果。通过设定变化起点与终点,关键帧能让静止元素产生移动、缩放、淡入淡出等丰富动态,是视频剪辑从基础拼接进阶创意表达的核心技能。掌握关键

深耕计算机专业知识与技术。 2083

CTK Plugin Framework插件框架学习1--Qt编译CTK

【代码】Qt编译CTK。

贝勒里恩的博客 7429

Python+Agent入门笔记(二):列表推导式、模块和异常,这些写 Agent 前得会

接上一篇《Python+Agent入门笔记(一)》。基础语法跑通之后,这篇聊几块日常写脚本绕不开的东西。还是按 JS/Go 开发者的视角写,尽量记录我实际卡过的地方。

qq_41241612的博客 425

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

微调数据集构建:清洗、标注、格式转换完整流程

摘要解决微调数据直接抓取导致的噪声污染、模式崩溃与Token错位问题。适用于需为大模型SFT阶段构建高质量训练集的数据与算法工程师。读完可获得包含启发式清洗、MinHash去重及ChatML格式对齐的完整可运行数据流水线。关键词数据清洗、MinHash去重、数据标注、ChatML、SFT数据集、数据配比背景与问题大模型微调效果的上限由数据质量决定,直接使用未经处理的原始语料极易引发模型复读、幻觉与指令遵循能力退化。

2402_85729970的博客 468

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

详解Python条件语句

在 Python 中,if...else 是一种条件语句,可以根据给定的条件执行不同的操作。这个语句通常用于控制程序的流程。

2601_96798737的博客 204

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Python3 协程:异步编程的核心机制与实战

协程是解决I/O密集型任务等待瓶颈的高效机制,相比线程更轻量、无锁开销。从yield到async/await的演进,使异步编程语义清晰、易于理解。通过async/await可实现并发执行多个任务(如gather、create_task),显著提升网络请求、爬虫等场景性能。关键在于使用异步库(如aiohttp)替代同步库,避免阻塞事件循环。合理控制超时与并发数,才能发挥协程最大优势。

Lxn2zh的博客 157

python如何控制浏览器

Python 可以通过 Selenium、Playwright 等工具实现浏览器自动化,从打开网页到执行复杂交互操作均可脚本化完成。Selenium生态成熟

2601_96797912的博客 73

torch.compile 差异仅 1e-6,边界样本预测为何翻转

torch.compile 加速后输出与 eager 不一致,部分预测翻转。逐层对比与 graph break 分析定位到动态分支翻转根因。容差回归仅适用于无分支翻转场景,零容忍场景应禁用编译。

昨日种种,皆成今我。今日种种,皆成新我。 157

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 263

Python 100讲课程导航:第08篇《Python input 与类型转换:构建可靠的交互程序》

本文详解Python中input()的返回类型为字符串,强调必须通过int()、float()等函数进行类型转换。重点讲解了输入验证的重要性,结合try-except处理ValueError等异常,实现可靠的交互程序。通过购物预算计算器实战,演示如何防范非法输入、处理边界值,并推荐使用Decimal避免浮点精度问题,提升程序健壮性。

铭渊老黄 130

【Python】国家中小学智慧教育平台电子教材批量下载与 PDF 合成实战

成果:两本语文电子课本(一年级上册 118 页 / 23MB、三年级上册 130 页 / 30.3MB),合计 248 页、约 54MB,单本下载加合成 40~60 秒,PDF 页数校验全部通过。经验教训SPA 站点的数据接口优先从 bundle 里挖,比抓页面稳得多;资源链接要按 private/public 分组看待,只取平台公开部分;页数、目录名这类“可推断”的信息,永远用实际响应验证一次;受限环境里“能不能跑浏览器”要在方案定稿前确认。后续计划:这版 PDF 是图片版,没有文字层;

木头大左的博客 114

魔塔社区微调训练Qwen2-1.5B-Instruct模型并烧录到‌RK3568开发板教程

本文基于Ubuntu 22.04 + CUDA 13.0.3环境,使用LLaMA-Factory框架对Qwen2-1.5B-Instruct模型进行LoRA微调,训练儿童故事生成专用模型。通过配置qwen模板、制作alpaca格式数据集、执行sft训练并合并LoRA权重,最终将模型转换为GGUF格式,并量化为Q4_K_M以适配RK3568嵌入式平台。全程支持国产镜像加速下载与显存优化,实现高效轻量化部署。

浅清秋慕夏的博客 182
上一篇: 【丝滑的LangChain】我用python问gpt认不认识小范大人,它告诉我认识个der~
下一篇: 12种增强Python代码的函数式编程技术
海哥python
博客等级 码龄9年 1487粉丝 74原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海哥python

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值