前言:
终于有时间可以搓猫娘了,但是这只是个番外篇。
每次都是用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上了,但是没公开。