前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小白也能轻松搞定:用几行代码实现强大的问答机器人!

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

作者头像
一个程序猿的异常
发布2023-12-12 18:14:19
8230
发布2023-12-12 18:14:19
举报
文章被收录于专栏:一个程序猿的异常

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

前面的文章我们对 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

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

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 一个程序猿的异常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 打造自己的可视化专属机器人
  • streamlit 简介
    • 安装
    • 聊天机器人
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档