写在前面在经过之前的学习后相信大家已经开发一些简单的Python程序了。本篇文章我们将利用Python里的streamlit包开发前端页面用Ollama作为后端服务部署一个简单的问答机器人。综合应用一下之前学习的知识。一、环境准备python 3.10.9 往期文章链接ollama 往期文章链接streamlit# 通过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(年龄, value18) # 单选框——st.radio() gender st.radio(性别, (男, 女, 沃尔玛购物袋), horizontalTrue) # 日期输入框——st.date_input() birth st.date_input(生日) # 滑块效果——st.slider height st.slider(身高, min_value100, max_value300, value175) # 按钮——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(hostlocalhost:11434) # 2.定义调用本地ollama的函数 def get_response(messages): result client.chat( modelqwen2.5:0.5b, # 可以通过ollama list命令查看可用模型 messagesmessages ) 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应用的铺垫。磨刀不误砍柴工道阻且长各位一起努力吧
day08_基于Streamlit与Ollama部署简易问答机器人
写在前面在经过之前的学习后相信大家已经开发一些简单的Python程序了。本篇文章我们将利用Python里的streamlit包开发前端页面用Ollama作为后端服务部署一个简单的问答机器人。综合应用一下之前学习的知识。一、环境准备python 3.10.9 往期文章链接ollama 往期文章链接streamlit# 通过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(年龄, value18) # 单选框——st.radio() gender st.radio(性别, (男, 女, 沃尔玛购物袋), horizontalTrue) # 日期输入框——st.date_input() birth st.date_input(生日) # 滑块效果——st.slider height st.slider(身高, min_value100, max_value300, value175) # 按钮——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(hostlocalhost:11434) # 2.定义调用本地ollama的函数 def get_response(messages): result client.chat( modelqwen2.5:0.5b, # 可以通过ollama list命令查看可用模型 messagesmessages ) 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应用的铺垫。磨刀不误砍柴工道阻且长各位一起努力吧