day08_基于Streamlit与Ollama部署简易问答机器人
·
写在前面
在经过之前的学习后,相信大家已经开发一些简单的Python程序了。本篇文章,我们将利用Python里的streamlit包开发前端页面,用Ollama作为后端服务,部署一个简单的问答机器人。综合应用一下之前学习的知识。
一、环境准备
# 通过pip安装streamlit库
pip install streamlit
二、streamlit框架入门
我们通过做一个简单的用户注册页面,了解一下streamlit框架的几个简单的用法。
import streamlit as st
# 标题——st.title()
st.title('用户注册平台')
# 分割线——st.divider()
st.divider()
# 文本输入框——st.text_input()
username = st.text_input('用户名')
password = st.text_input('密码')
# 数字输入框——st.number_input()
age = st.number_input('年龄', value=18)
# 单选框——st.radio()
gender = st.radio('性别', ('男', '女', '沃尔玛购物袋'), horizontal=True)
# 日期输入框——st.date_input()
birth = st.date_input('生日')
# 滑块效果——st.slider
height = st.slider('身高', min_value=100, max_value=300, value=175)
# 按钮——st.button()
button = st.button('确认')
if button:
# 仅做效果演示用,实际功能不写了
st.write('恭喜您,信息录入成功')
在python代码写好后,在pycharm的终端里运行命令 streamlit run 你的python脚本地址

成功后会跳转到浏览器,效果如下

三、网页问答机器人
该项目会涉及到两个python文件,一个负责调用本地部署的ollama,另一个负责前端页面的实现。
1.通过python中的ollama库便捷调用本地ollama服务部署的模型
首先通过pip install ollama安装ollama库

代码实现如下
import ollama
# 1.初始化客户端
client = ollama.Client(host='localhost:11434')
# 2.定义调用本地ollama的函数
def get_response(messages):
result = client.chat(
model='qwen2.5:0.5b', # 可以通过ollama list命令查看可用模型
messages=messages
)
return result['message']['content']
if __name__ == '__main__':
# 测试函数调用
messages = [
{
'role': 'system',
'content': '你是一个生活助手'
},
{
'role': 'user',
'content': '你是谁'
}
]
print(get_response(messages))
2.使用streamlit实现前端效果
import streamlit as st
from llm_tools import get_response # 导入自己的工具类功能
# 1.设置标题并添加分割线
st.title('聊天机器人') # 标题
st.divider() # 分割线
# 由于聊天是多轮的,需要使用到streamlit中的session_state保持状态,我们把多轮聊天的内容存储在session_state的messages中
# 2.streamlit在每次交互结束后,会重新执行代码,所以要先判断session_state中是不是已经有messages了,没有就创建
if "messages" not in st.session_state:
# AI助手的第一条信息
st.session_state["messages"] = [{'role': 'assistant', 'content': '你好,有什么可以帮到你!'}]
# 3.聊天窗口
# 每次渲染,把st.session_state['messages']里存储的所有对话都展示出来
for message in st.session_state["messages"]:
# 在聊天窗口打印文本——st.chat_message(讲话的角色).write(内容)
st.chat_message(message['role']).write(message['content'])
# 用户输入的问题
user_input = st.chat_input()
if user_input:
# 在页面上打印用户输入的问题
st.chat_message('user').write(user_input)
# 格式化为提示词
prompt = {'role': 'user', 'content': user_input}
# 把用户问的问题存入对话历史中
st.session_state['messages'].append(prompt)
# 调用我们写的工具让AI回答问题
with st.spinner('正在思考中...'):
print(st.session_state.messages)
res = get_response(st.session_state.messages)
# 在页面上打印AI的回答
st.chat_message('assistant').write(res)
# 将对话存入对话历史中
st.session_state['messages'].append({'role': 'assistant', 'content': res})
最终实现的效果如下

本篇总结
通过该项目的实践,我们可以发现,之前讲到的容器、函数、判断、循环等,其实是Python的“常识”。你没有办法去标识哪一些内容是重点,因为到了真正的开发中,这些知识的应用是十分普遍的。
在现在AI开发的时代,是降低了初级开发人员入行的门槛的,因此我们不一定需要能够完全独立敲出以上的代码。但是重点是,我们需要能够看懂并理解以上代码。
本篇文章也是在7天枯燥的理论知识学习后,再次通过一个实操项目,试图让大家维持住对AI的兴趣。毕竟我一直强调那句话——兴趣就是最好的老师。
后面还会进行一段时间的Python进阶内容讲解,以及部分Linux知识,这些都是为了AI应用的铺垫。磨刀不误砍柴工,道阻且长,各位一起努力吧!
更多推荐


所有评论(0)