用Streamlit快速搭建ChatBot
如果你是一个开发人员,或者一个计算机专业的老师或学生,有时候你需要验证或者展示某个技术或者应用场景。比如,我们想要验证一些某个大模型的对话交互能力,或者基于这个大模型开发一个Agent。此时我们可以通过调用大模型的API或者通过ollama这样的工具在命令行中和它交互。
但是,有的时候我们要跟直观的展示或者验证,这是就离不开搭建一个前端UI。
你能想到什么?Vue、React、Angular等等这些前端技术,然后搭建一个UI界面吗?当然可以,但是还是有点麻烦,且不说假设你是一个后端开发人员,掌握这个前端技术需要一点时间。即便是你本来就是一个全站工程师,啥都会,但是也许你只是临时验证或者演示一下你的技术,这个前端用完就会被抛弃掉。再辛辛苦苦搭建一个前端展示页面就显得有点得不偿失了。
那如果你懂python开发,有没有一种技术可以满足下面的要求:
- 极低的开发门槛:几行Python代码就能创建一个包含各种组件的网页前端
- 部署打包简单:一行命令就可以本地启动,也可以快速部署到主流的云服务器上托管
- 支持热重载:修改代码后页面自动刷新,无需重启服务器
- 内置丰富的UI组件:主流的滑块、按钮、表格、表单等等组件都支持
- 强大的数据可视化展示支撑:完美支持pandas、matplotlib、seaborn、Plotly、scikit-learn等这些数据分析和展示功能。
答案是streamlit。今天通过一个简单的例子展示Streamlit提供的强大的原型开发能力,几行代码搭建出一个AI ChatBot。
安装依赖
可以通过pip conda等安装streamlit,但是我建议使用uv,如果你不熟悉uv,可以参考我之前写的这篇文章:强大的Python包和项目管理工具 uv快速入门 - 知乎。
现在假设我们创建好了uv项目,接下来执行下面的命令安装依赖
1 | uv add streamlit |
uv会分析依赖,然后安装streamlit。
ChatBot开发
需求描述
我们的需求很简单:以网页的形式显示一个聊天对话框,页面包含三个部分:
- 标题:ChatBot
- 消息显示区域:用于显示用户的提问和Bot的回答
- 聊天输入窗口:用于用户输入和发送提问
整个逻辑是:
- 用户输入聊天内容
- 聊天内容被后端的大模型(这里使用智谱AI)接收,然后返回问题
- 前端接收到返回的文本内容后,显示在消息区域。
代码实现
为了完成上面的需求,我们需要安装两个依赖:
- streamlit: 用于快是实现前端窗口布局
- zhipuai: 用于调用智谱AI的大模型能量。
因此,我们首先在uv项目的依赖中添加如下:
1 | dependencies = [ |
然后执行下面的uv安装命令来安装依赖
1 | uv sync |
接下来编写主程序main.py实现上述需求:
1 | # main.py |
代码说明:
- client = ZhipuAI(api_key=”YOUR_API_KEY”) 这里创建了智谱AI的对象,用于链接后端的大模型,这里记得输入你的API KEY
- st.session_state.messages :是一个streamlit的消息显示组件,它支持流式输出
- st.chat_input:是一个消息输入组件
- st.markdown(prompt): 将我们的输入内容转化为markdown形式,这样更有利于LLM理解
运行测试
执行下面的命令求可以启动streamlit服务,同时它会打开浏览器并定位到 http://localhost:8501 网址。
最终的显示效果如下:
可以看到,我们只需要几行Python代码就可以快速的实现一个聊天机器人。这对于技术验证和演示甚至是产品的快速原型设计都非常的高效。
详细的streamlit 使用参考可以查看其官网的文档:Tutorials - Streamlit Docs