AI大模型学习分享基础篇最后一天
Streamlit+Ollama 本地部署 Qwen 大模型智能聊天机器人完整实战教程
文章简介
本文完整讲解基于 Python Streamlit 前端 + Ollama 本地通义千问 Qwen 大模型搭建私有化聊天机器人项目,全程本地运行无需云端接口,保障对话数据隐私,支持多轮对话持久保存、流式等待提示、完整异常捕获,零基础可跟着实操复现全部功能,包含环境安装、Streamlit 页面开发、Ollama 模型调用、前后端整合完整源码。
项目技术栈:Python + Streamlit + Ollama + Qwen 通义千问本地大模型 适用系统:Windows / MacOS / Linux
一、项目整体概述
1.1 项目背景
市面上绝大多数 AI 聊天工具依赖第三方云端 API,存在两大痛点:
- 用户对话数据上传云端,存在隐私泄露风险;
- 网络波动、服务器限流会造成对话延迟、调用失败。
本地私有化聊天机器人使用 Ollama 在本机加载大模型,搭配 Streamlit 快速搭建 Web 交互页面,所有对话数据仅保存在本地,无网络依赖也可运行,支持自定义模型、定制对话逻辑。
1.2 整体技术架构
- 后端模型层:Ollama + Qwen 系列大模型(qwen2:0.5b /qwen2.5:7b),负责自然语言理解与回复生成;
- 前端交互层:Streamlit Python Web 框架,快速搭建聊天界面,实现多轮对话展示、用户输入交互;
- 数据存储:Streamlit SessionState 会话缓存,页面刷新不丢失历史对话记录。
1.3 开发前置环境准备
需要提前安装三类工具:
- Ollama 客户端,并提前拉取本地 Qwen 大模型;
- Python 解释器 + PyCharm 开发工具;
- Python 第三方库:
streamlit、ollama。
二、环境一键安装教程
2.1 Python 依赖库安装命令
打开 CMD / 终端执行镜像加速安装命令,避免下载缓慢:
# 安装streamlit(清华源)
pip install streamlit -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装ollama调用库(阿里云镜像)
pip install ollama -i https://mirrors.aliyun.com/pypi/simple/
2.2 常见踩坑:PyCharm 路径含空格启动报错
如果 PyCharm 或项目路径存在空格,直接运行streamlit run xxx.py会识别失败,两种解决方案:
- 终端先 cd 进入项目根目录,再执行启动命令;
- 文件路径使用单引号包裹完整路径:
streamlit run 'C:\soft\PyCharm 2023\workspace\chatbot.py'
三、Streamlit 核心知识点讲解
3.1 Streamlit 框架优势
- 零前端基础:纯 Python 代码写网页,无需 HTML/CSS/JS;
- 热重载:修改代码自动刷新页面,不用重启服务;
- 内置丰富组件:标题、输入框、聊天框、按钮、加载动画开箱即用;
- SessionState 会话缓存:解决页面刷新数据丢失问题,实现多轮对话。
3.2 高频常用组件汇总
| 组件 | 功能说明 |
|---|---|
| st.title() | 页面大标题 |
| st.divider() | 分割横线 |
| st.chat_message (角色) | 对话气泡,role 分为 user/assistant |
| st.chat_input() | 底部对话输入框 |
| st.spinner() | 加载等待动画(AI 思考中提示) |
| st.session_state | 会话全局缓存,存储对话历史 |
3.3 入门案例:用户注册页面 Demo
基础表单交互示例,快速熟悉输入框、选择器、滑块等控件:
import streamlit as st
from datetime import date
# 设置页面标题
st.title("用户注册平台")
st.divider()
# 各类输入控件
username = st.text_input(label='请输入用户名:', max_chars=50)
password = st.text_input(label='请输入密码:', type='password', max_chars=50)
age = st.number_input(label='年龄', min_value=0, max_value=200, step=1)
gender = st.selectbox(label='性别', options=['请选择...', '男', '女'])
st.radio(label='是否已婚', options=['是', '否'], horizontal=True)
birthdate = st.date_input(label='出生日期', min_value=date(1900, 1, 1))
height = st.slider(label='身高', min_value=40.0, max_value=300.0, value=175.0)
# 提交按钮
submit_button = st.button(label='注册')
if submit_button:
st.success(f"注册成功")
print(f"用户名:{username},年龄:{age},性别:{gender}")
四、Ollama 本地大模型调用(后端核心)
4.1 Ollama 基础调用代码
通过ollama.Client连接本地 11434 端口服务,发起对话请求获取模型返回文本:
import ollama
# 连接本地ollama服务
client = ollama.Client(host='http://127.0.0.1:11434')
# 请求大模型对话
response = client.chat(
model='qwen2.5:7b',
messages=[{'role': 'user', 'content': '给我讲一个程序员笑话'}]
)
# 打印模型回复
print(response.message.content)
4.2 封装后端工具类(解耦前后端)
新建文件itcast_assistant_backend.py,封装模型调用函数,增加异常捕获,模型异常统一返回友好提示:
# itcast_assistant_backend.py
import ollama
def chat_message_response(request_content, host='http://127.0.0.1:11434', model='qwen2.5:7b', role='user'):
response_content = ''
try:
# 创建ollama客户端
ollama_client = ollama.Client(host)
# 请求大模型
result = ollama_client.chat(
model=model,
messages=[{"role": role, "content": request_content}]
)
response_content = result.message.content
except Exception as e:
print("模型调用异常:", e)
response_content = '对不起,程序异常,请检查Ollama服务是否启动或模型是否拉取完成'
finally:
return response_content
# 本地测试入口
if __name__ == '__main__':
res = chat_message_response("人工智能未来发展方向?")
print(res)
五、完整聊天机器人前端页面代码
新建itcast_assistant_front.py,整合 Streamlit 页面 + 后端模型工具类,实现多轮对话持久保存:
# itcast_assistant_front.py
import streamlit as st
# 导入后端模型调用函数
from itcast_assistant_backend import chat_message_response
# 页面基础配置
st.title('本地私有化智聊机器人')
st.divider()
# 初始化会话缓存,存储全部对话历史
if 'messages' not in st.session_state:
st.session_state['messages'] = []
# 机器人初始欢迎语
st.session_state['messages'].append({
'role': 'assistant',
'content': '你好,我是本地部署的AI聊天机器人,有什么可以帮您?'
})
# 循环渲染所有历史对话
for message_dict in st.session_state['messages']:
st.chat_message(message_dict['role']).write(message_dict['content'])
# 底部对话输入框
prompt = st.chat_input('请输入你的问题...')
if prompt:
# 1. 将用户提问存入会话缓存
st.session_state['messages'].append({'role': 'user', 'content': prompt})
# 2. 加载动画,提示AI正在思考
with st.spinner("AI正在思考中,请稍等..."):
# 调用本地Qwen大模型获取回答
assistant_content = chat_message_response(prompt, model='qwen2.5:7b')
# 3. 机器人回答存入会话缓存
st.session_state['messages'].append({'role': 'assistant', 'content': assistant_content})
# 页面自动刷新渲染最新对话
六、项目启动与运行步骤
- 打开 Ollama 软件,确保后台服务正常运行,提前执行
ollama pull qwen2.5:7b拉取模型; - PyCharm 打开项目,终端执行启动命令:
streamlit run itcast_assistant_front.py
- 自动弹出浏览器页面,即可和本地大模型进行多轮对话,刷新页面历史对话不会消失;
- 异常排查:
- 提示连接失败:检查 Ollama 是否打开、端口 11434 是否占用;
- 模型不存在:执行
ollama list确认模型已下载; - 库导入报错:重新执行 pip 安装 streamlit 和 ollama。
七、项目核心知识点总结
-
文件操作基础回顾 open 文件三种模式 r/w/a,with 语句自动释放资源;try-except-finally 捕获文件读写异常;read/readline/readlines 三种读取方式区别。
-
Streamlit 核心原理 每次交互完整重跑全部代码,依靠
st.session_state全局字典缓存对话数据,实现多轮对话不丢失;st.chat_message区分用户 / 机器人对话气泡。 -
Ollama 本地大模型核心 本地端口 11434 提供 API 服务,Python ollama 库封装请求;封装工具类实现前后端解耦,统一异常处理,提升程序健壮性。
-
项目优势 完全本地运行、数据不上传外网、无调用费用、可自由切换不同尺寸 Qwen 大模型、快速迭代 Web 交互页面。
八、拓展优化方向(可自行二次开发)
- 增加侧边栏模型切换选择框,支持一键切换 qwen2:0.5b、qwen2.5:7b 等模型;
- 实现对话记录导出 TXT 文件功能;
- 增加流式输出打字机效果,替代一次性返回完整回答;
- 增加上下文记忆优化,把完整历史 messages 传入 ollama.chat 实现连贯对话;
- 自定义页面 CSS 美化聊天界面、修改主题配色。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)