前面的文章我们对 openai 的 API 接口进行了深度剖析,点击直达:
通过命令行操作毕竟是不友好的,今天我们打造一个可视化的网页聊天机器人。
界面相当简单,一个标题、描述,一个对话框足矣。
Streamlit 是一个开源的 Python 库,用于快速创建和分享数据应用程序。其主要特点和优势包括:
总的来说,Streamlit 是一个强大且易于使用的工具,非常适合数据科学家和工程师快速构建和共享数据驱动的应用程序。
我们使用 pip
安装最新版本的 streamlit
pip install streamlit
验证安装: 安装完成后,可以通过运行以下命令来验证 Streamlit 是否正确安装:
streamlit hello
不到80行代码即可轻松实现自己的聊天机器人,太酷了!
from openai import OpenAI
import streamlit as st
# 将下面的 API 密钥替换为您的 API 密钥
api_key = "sk-XXX"
model = "gpt-4-1106-preview"
client = OpenAI(
api_key=api_key,
# 可替换为自己的代理域名
# base_url="https://api.gptmini.ai/v1"
)
def display_existing_messages():
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"])
def add_user_message_to_session(prompt):
if prompt:
st.session_state["messages"].append({"role": "user", "content": prompt})
with st.chat_message("user"):
st.markdown(prompt)
def generate_assistant_response(query):
# add_user_message_to_session 显示消息的时候做了处理,所以这里不需要再次添加最新提问
print('history-->')
history = st.session_state["messages"]
print(history)
with st.chat_message("assistant"):
message_placeholder = st.empty()
full_response = ""
for response in client.chat.completions.create(
model=model,
temperature=0,
messages=history,
stream=True,
):
try:
full_response += response.choices[0].delta.content
except Exception as e:
print("")
message_placeholder.markdown(full_response + "▌")
message_placeholder.markdown(full_response)
st.session_state["messages"].append(
{"role": "assistant", "content": full_response}
)
return full_response
def hide_streamlit_header_footer():
hide_st_style = """
<style>
#MainMenu {visibility: hidden;}
footer {visibility: hidden;}
header {visibility: hidden;}
#root > div:nth-child(1) > div > div > div > div > section > div {padding-top: 0rem;}
</style>
"""
st.markdown(hide_st_style, unsafe_allow_html=True)
def main():
st.title("问答机器人")
st.write(
"我的第一个专属机器人,它可以回答你的问题,也可以和你聊天。"
)
hide_streamlit_header_footer()
display_existing_messages()
query = st.chat_input("你可以问我任何你想问的问题")
if query:
print(query)
add_user_message_to_session(query)
response = generate_assistant_response(query)
print(response)
if __name__ == "__main__":
main()
将上面的代码保存为 myBot.py
执行下面的命令来查看效果
streamlit run myBot.py
命令执行完成后会自动打开浏览器,界面如下
在下面的对话框尽情的提问吧。
如果上面的内容对你有帮助,点个赞支持下吧~