利用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

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

Java MQTT实战应用

《JavaMQTT实战应用》本文详解MQTT协议,涵盖其发布/订阅机制、低功耗高效特性、三种服务质量等级(QoS0/1/2),以及客户端、代理、主题的核心概念,最后提供Linux部署教程、Sprin... 目录一、MQTT协议二、MQTT优点三、三种服务质量等级四、客户端、代理、主题1. 客户端(Clien

Java中调用数据库存储过程的示例代码

《Java中调用数据库存储过程的示例代码》本文介绍Java通过JDBC调用数据库存储过程的方法,涵盖参数类型、执行步骤及数据库差异,需注意异常处理与资源管理,以优化性能并实现复杂业务逻辑,感兴趣的朋友... 目录一、存储过程概述二、Java调用存储过程的基本javascript步骤三、Java调用存储过程示

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

SpringBoot开发中十大常见陷阱深度解析与避坑指南

《SpringBoot开发中十大常见陷阱深度解析与避坑指南》在SpringBoot的开发过程中,即使是经验丰富的开发者也难免会遇到各种棘手的问题,本文将针对SpringBoot开发中十大常见的“坑... 目录引言一、配置总出错?是不是同时用了.properties和.yml?二、换个位置配置就失效?搞清楚加

python如何调用java的jar包

《python如何调用java的jar包》这篇文章主要为大家详细介绍了python如何调用java的jar包,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录一、安装包二、使用步骤三、代码演示四、自己写一个jar包五、打包步骤六、方法补充一、安装包pip3 install

Python中对FFmpeg封装开发库FFmpy详解

《Python中对FFmpeg封装开发库FFmpy详解》:本文主要介绍Python中对FFmpeg封装开发库FFmpy,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、FFmpy简介与安装1.1 FFmpy概述1.2 安装方法二、FFmpy核心类与方法2.1 FF

基于Python开发Windows屏幕控制工具

《基于Python开发Windows屏幕控制工具》在数字化办公时代,屏幕管理已成为提升工作效率和保护眼睛健康的重要环节,本文将分享一个基于Python和PySide6开发的Windows屏幕控制工具,... 目录概述功能亮点界面展示实现步骤详解1. 环境准备2. 亮度控制模块3. 息屏功能实现4. 息屏时间