打造自己的可视化专属机器人
前面的文章我们对 openai 的 API 接口进行了深度剖析,点击直达:
通过命令行操作毕竟是不友好的,今天我们打造一个可视化的网页聊天机器人。
界面相当简单,一个标题、描述,一个对话框足矣。
streamlit 简介
Streamlit 是一个开源的 Python 库,用于快速创建和分享数据应用程序。其主要特点和优势包括:
- 简单性: Streamlit 的设计理念是简洁性。只需几行 Python 代码,就可以创建一个交互式的数据应用程序。
- 快速迭代: Streamlit 支持实时代码更新,使得开发者可以即时看到代码更改的效果,极大地加速了开发过程。
- 无需前端知识: 使用 Streamlit,开发者无需掌握 HTML、CSS 或 JavaScript 等前端技术,就可以创建美观、交互式的Web应用程序。
- 丰富的组件库: Streamlit 提供了多种内置组件,如文本框、图表、地图等,以及与其他流行Python库(如 Pandas, Matplotlib)的良好集成。
- 部署便捷: Streamlit 应用程序可以轻松部署到各种平台,如 Streamlit Sharing、Heroku 或 AWS。
- 社区和扩展: Streamlit 拥有一个活跃的开发者社区,并提供了扩展库(如 Streamlit Components),允许开发者创建或使用自定义组件。
总的来说,Streamlit 是一个强大且易于使用的工具,非常适合数据科学家和工程师快速构建和共享数据驱动的应用程序。
安装
我们使用 pip
安装最新版本的 streamlit
pip install streamlit
验证安装: 安装完成后,可以通过运行以下命令来验证 Streamlit 是否正确安装:
代码语言:javascript复制streamlit hello
- 这个命令会启动 Streamlit 并打开一个预设的“Hello World”应用程序在你的浏览器中。
聊天机器人
不到80行代码即可轻松实现自己的聊天机器人,太酷了!
代码语言:javascript复制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
命令执行完成后会自动打开浏览器,界面如下
在下面的对话框尽情的提问吧。
如果上面的内容对你有帮助,点个赞支持下吧~