小白也能轻松搞定:用几行代码实现强大的问答机器人!

2023-12-12 18:14:19 浏览数 (2)

打造自己的可视化专属机器人

前面的文章我们对 openai 的 API 接口进行了深度剖析,点击直达:

通过命令行操作毕竟是不友好的,今天我们打造一个可视化的网页聊天机器人。

界面相当简单,一个标题、描述,一个对话框足矣。

streamlit 简介

Streamlit 是一个开源的 Python 库,用于快速创建和分享数据应用程序。其主要特点和优势包括:

  1. 简单性: Streamlit 的设计理念是简洁性。只需几行 Python 代码,就可以创建一个交互式的数据应用程序。
  2. 快速迭代: Streamlit 支持实时代码更新,使得开发者可以即时看到代码更改的效果,极大地加速了开发过程。
  3. 无需前端知识: 使用 Streamlit,开发者无需掌握 HTML、CSS 或 JavaScript 等前端技术,就可以创建美观、交互式的Web应用程序。
  4. 丰富的组件库: Streamlit 提供了多种内置组件,如文本框、图表、地图等,以及与其他流行Python库(如 Pandas, Matplotlib)的良好集成。
  5. 部署便捷: Streamlit 应用程序可以轻松部署到各种平台,如 Streamlit Sharing、Heroku 或 AWS。
  6. 社区和扩展: Streamlit 拥有一个活跃的开发者社区,并提供了扩展库(如 Streamlit Components),允许开发者创建或使用自定义组件。

总的来说,Streamlit 是一个强大且易于使用的工具,非常适合数据科学家和工程师快速构建和共享数据驱动的应用程序。

安装

我们使用 pip 安装最新版本的 streamlit

代码语言:javascript复制
pip install streamlit

验证安装: 安装完成后,可以通过运行以下命令来验证 Streamlit 是否正确安装:

代码语言:javascript复制
streamlit hello
  1. 这个命令会启动 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 执行下面的命令来查看效果

代码语言:javascript复制
streamlit run myBot.py

命令执行完成后会自动打开浏览器,界面如下

在下面的对话框尽情的提问吧。

如果上面的内容对你有帮助,点个赞支持下吧~

0 人点赞