利用streamlit开发大模型API调用对话网页应用

2024-06-22 12:28

本文主要是介绍利用streamlit开发大模型API调用对话网页应用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

利用streamlit开发大模型API调用对话网页应用

介绍

Streamlit是一个用于构建数据应用的开源框架,其简单易用的界面使得数据科学家和开发人员能够快速创建交互式应用。而OpenAI API则提供了强大的语言模型,可以生成自然语言响应。将这两者结合起来,可以轻松创建一个与用户进行对话的应用,用于测试大模型API。
在这里插入图片描述

整体代码

事前准备,确保已正确安装所需库:

pip install openai==0.28
pip install streamlit==1.35

理论上兼容openai的大模型API都可以使用;
代码:

import streamlit as st
import openai# 设置页面配置
st.set_page_config(page_title="LLM Chat App",page_icon="💬",layout="centered",
)# 应用标题
st.title("LLM Chat App")# 输入API参数
st.sidebar.header("API Configuration")
api_base_url = st.sidebar.text_input("API Base URL", "https://api.deepseek.com/v1")
api_key = st.sidebar.text_input("API Key", type="password")
model_name = st.sidebar.text_input("Model Name", "deepseek-chat")# 设置OpenAI API密钥和base URL
openai.api_key = api_key
openai.api_base = api_base_url# 聊天记录
if "messages" not in st.session_state:st.session_state.messages = []# 显示聊天记录
def display_chat(messages):for i, message in enumerate(messages):role = message["role"]content = message["content"]if role == "user":st.markdown(f"**I:** {content}", unsafe_allow_html=True)else:st.markdown(f"**AI:** {content}", unsafe_allow_html=True)# 发送消息并获取响应
def send_message(user_input):if user_input:st.session_state.messages.append({"role": "user", "content": user_input})# 调用OpenAI APItry:response = openai.ChatCompletion.create(model=model_name,messages=st.session_state.messages,)response_message = response["choices"][0]["message"]["content"]st.session_state.messages.append({"role": "assistant", "content": response_message})# 刷新页面以显示对话结果st.rerun()except openai.error.OpenAIError as e:st.error(f"OpenAI API Error: {e}")# 显示聊天记录
display_chat(st.session_state.messages)# 输入区域
if api_key and api_base_url and model_name:user_input = st.text_input("You:")if st.button("Send"):send_message(user_input)
else:st.warning("Please enter your API Base URL, API Key, and Model Name in the sidebar.")

常用大模型API介绍

大模型API是接入大模型的基础设施,网上各种AI公司都提供这类服务,并且大多在新用户注册的时候都送大量免费tokens,用来测试练习绰绰有余;一些常用的大模型API如下:

服务商网站
deepseekhttps://platform.deepseek.com/
质谱AIhttps://open.bigmodel.cn/
kimihttps://platform.moonshot.cn/

使用方法都大同小异,在其开发者平台获取API与API key后,即可实现调用;

代码片段说明

每段代码的详细功能如下,便于修改;

设置页面配置

首先,我们需要设置页面的基本配置:

st.set_page_config(page_title="LLM Chat App",page_icon="💬",layout="centered",
)

这段代码设置了页面的标题、图标和布局。page_title设置了页面的标题为“LLM Chat App”,page_icon设置了一个聊天图标,而layout参数设置页面布局为居中显示。

应用标题

接下来,我们为应用添加一个标题:

st.title("LLM Chat App")

st.title函数会在页面顶部显示一个大标题。

输入API参数

我们需要在侧边栏中输入API配置参数:

st.sidebar.header("API Configuration")
api_base_url = st.sidebar.text_input("API Base URL", "https://api.deepseek.com/v1")
api_key = st.sidebar.text_input("API Key", type="password")
model_name = st.sidebar.text_input("Model Name", "deepseek-chat")

这里,我们在侧边栏添加了一个标题,并分别为API Base URL、API Key和Model Name创建了输入框。type="password"参数确保API Key输入框为密码形式,隐藏用户输入的内容。

设置OpenAI API密钥和Base URL

接下来,我们设置OpenAI API的密钥和Base URL:

openai.api_key = api_key
openai.api_base = api_base_url

通过将用户输入的API密钥和Base URL赋值给openai.api_keyopenai.api_base,我们可以确保后续API调用使用这些参数。

聊天记录

我们需要保存和显示聊天记录:

if "messages" not in st.session_state:st.session_state.messages = []

st.session_state是Streamlit提供的一个会话状态字典,可以在不同的交互之间保存数据。我们检查st.session_state中是否存在messages键,如果不存在,则初始化一个空列表。

显示聊天记录

我们创建一个函数来显示聊天记录:

def display_chat(messages):for i, message in enumerate(messages):role = message["role"]content = message["content"]if role == "user":st.markdown(f"**I:** {content}", unsafe_allow_html=True)else:st.markdown(f"**AI:** {content}", unsafe_allow_html=True)

这个函数遍历消息列表,并根据消息的角色(用户或AI)以不同的格式显示内容。

发送消息并获取响应

我们创建一个函数来处理用户输入并获取AI的响应:

def send_message(user_input):if user_input:st.session_state.messages.append({"role": "user", "content": user_input})# 调用OpenAI APItry:response = openai.ChatCompletion.create(model=model_name,messages=st.session_state.messages,)response_message = response["choices"][0]["message"]["content"]st.session_state.messages.append({"role": "assistant", "content": response_message})# 刷新页面以显示对话结果st.rerun()except openai.error.OpenAIError as e:st.error(f"OpenAI API Error: {e}")

这个函数首先将用户输入添加到聊天记录中,然后调用OpenAI API获取响应,并将AI的响应也添加到聊天记录中。如果调用过程中发生错误,则显示错误信息。

显示聊天记录

在主程序中,我们调用display_chat函数显示聊天记录:

display_chat(st.session_state.messages)

输入区域

最后,我们创建用户输入区域和发送按钮:

if api_key and api_base_url and model_name:user_input = st.text_input("You:")if st.button("Send"):send_message(user_input)
else:st.warning("Please enter your API Base URL, API Key, and Model Name in the sidebar.")

如果API配置参数全部填入,我们显示一个输入框和发送按钮。用户输入消息后点击“Send”按钮,会调用send_message函数处理消息。否则,显示一个警告信息,提醒用户输入必要的API参数。

这篇关于利用streamlit开发大模型API调用对话网页应用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1084289

相关文章

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

大语言模型(LLMs)能够进行推理和规划吗?

大语言模型(LLMs),基本上是经过强化训练的 n-gram 模型,它们在网络规模的语言语料库(实际上,可以说是我们文明的知识库)上进行了训练,展现出了一种超乎预期的语言行为,引发了我们的广泛关注。从训练和操作的角度来看,LLMs 可以被认为是一种巨大的、非真实的记忆库,相当于为我们所有人提供了一个外部的系统 1(见图 1)。然而,它们表面上的多功能性让许多研究者好奇,这些模型是否也能在通常需要系

问题-windows-VPN不正确关闭导致网页打不开

为什么会发生这类事情呢? 主要原因是关机之前vpn没有关掉导致的。 至于为什么没关掉vpn会导致网页打不开,我猜测是因为vpn建立的链接没被更改。 正确关掉vpn的时候,会把ip链接断掉,如果你不正确关掉,ip链接没有断掉,此时你vpn又是没启动的,没有域名解析,所以就打不开网站。 你可以在打不开网页的时候,把vpn打开,你会发现网络又可以登录了。 方法一 注意:方法一虽然方便,但是可能会有

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui

亮相WOT全球技术创新大会,揭秘火山引擎边缘容器技术在泛CDN场景的应用与实践

2024年6月21日-22日,51CTO“WOT全球技术创新大会2024”在北京举办。火山引擎边缘计算架构师李志明受邀参与,以“边缘容器技术在泛CDN场景的应用和实践”为主题,与多位行业资深专家,共同探讨泛CDN行业技术架构以及云原生与边缘计算的发展和展望。 火山引擎边缘计算架构师李志明表示:为更好地解决传统泛CDN类业务运行中的问题,火山引擎边缘容器团队参考行业做法,结合实践经验,打造火山

DDei在线设计器-API-DDeiSheet

DDeiSheet   DDeiSheet是代表一个页签,一个页签含有一个DDeiStage用于显示图形。   DDeiSheet实例包含了一个页签的所有数据,在获取后可以通过它访问其他内容。DDeiFile中的sheets属性记录了当前文件的页签列表。   一个DDeiFile实例至少包含一个DDeiSheet实例。   本篇最后提供的示例可以在DDei文档直接预览 属性 属性名说明数

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用

自制的浏览器主页,可以是最简单的桌面应用,可以把它当成备忘录桌面应用。如果你看不懂,请留言。 完整代码: <!DOCTYPE html><html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><ti

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

人工和AI大语言模型成本对比 ai语音模型

这里既有AI,又有生活大道理,无数渺小的思考填满了一生。 上一专题搭建了一套GMM-HMM系统,来识别连续0123456789的英文语音。 但若不是仅针对数字,而是所有普通词汇,可能达到十几万个词,解码过程将非常复杂,识别结果组合太多,识别结果不会理想。因此只有声学模型是完全不够的,需要引入语言模型来约束识别结果。让“今天天气很好”的概率高于“今天天汽很好”的概率,得到声学模型概率高,又符合表达