AI猫娘番外篇 | 使用streamlit建立一个对话界面

前言:

        终于有时间可以搓猫娘了,但是这只是个番外篇。

        每次都是用python进行输入输出,感觉没有对话的感觉(本来也没做记忆),所以,建立一个简单的对话界面是很有必要的。

        最终选用了streamlit是因为操作简单,画面精美,并不是我不会前端。。

步骤:

第一步:

        建立一个主页面,承担对话的功能。新建项目后建立一个Homepage的py文件作为主页面。

        现在来想一想,除了基本的对话界面,我们需要一个地方来输入我们的API_KEY,所以在根目录新建一个文件夹叫pages,并新建一个py文件API_Setting放进去。(这是streamlit官方给的识别,是简单建立分页的办法,也可以使用st.page来建立)。

第二步:

        进入API_Setting界面,输入以下内容。

import streamlit as st

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

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

st.set_page_config(page_title="API Settings", layout="wide")

st.title("API Settings")

openai_api_key = st.text_input("OPENAI API Key", value=st.session_state["OPENAI_API_KEY"], max_chars=None, key=None, type='password')

saved_openai = st.button("save",key="openai_api_save")

if saved_openai:
    st.session_state["OPENAI_API_KEY"] = openai_api_key

ark_api_key = st.text_input("ARK API Key", value=st.session_state["ARK_API_KEY"], max_chars=None, key=None, type='password')

saved_ark = st.button("save",key="ark_api_save")

if saved_ark:
    st.session_state["ARK_API_KEY"] = ark_api_key

        第一部分是导入必要的包,然后是一些初始化。

        其中st.session_state是页面缓存,也就是说,用st建站的通用信息都是存在缓存里的,而这里就建立一个叫ARK_API_KEY的key,用来存储你的apikey。

        再接着就是标题和输入框了,意思大致是点击按钮就可以存储你输入的apikey。

        (可以参考streamlit的官方文档)

 

第三步:

        输入以下内容到homepage.py,内容来自streamlit的官方文档教程。

from openai import OpenAI
import streamlit as st

st.title("DEEPSEEK R1")

client = OpenAI(
    api_key=st.session_state["ARK_API_KEY"],
    base_url = "你的模型地址",
)

if "ark_model" not in st.session_state:
    st.session_state["ark_model"] = "你的模型"

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

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

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

if st.session_state["ARK_API_KEY"]=="":
    st.warning("Please Input The API_KEY in Page API_Setting")

for message in st.session_state.messages:
    with st.chat_message(message["role"]):
        st.markdown(message["content"])

if prompt := st.chat_input("What is up?"):
    st.session_state.messages.append({"role": "user", "content": prompt})
    with st.chat_message("user"):
        st.markdown(prompt)

    with st.chat_message("assistant"):
        stream = client.chat.completions.create(
            model=st.session_state["ark_model"],
            messages=[
                {"role": m["role"], "content": m["content"]}
                for m in st.session_state.messages
            ],
            stream=True,
        )
        response = st.write_stream(stream)
    st.session_state.messages.append({"role": "assistant", "content": response})

         和前几弹的内容基本相似,就不再赘述,其中stream=true是启动流式输入。

(调用模型自带记忆)

后记:

        比较简短的内容,希望能完善其内容,已经把demo放到github上了,但是没公开。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值