《160分钟踩坑实录:Streamlit + Ollama 聊天机器人环境配置全解析》
本文介绍了如何使用Python+Streamlit+Ollama搭建本地智能聊天机器人。主要内容包括:1) 核心代码实现,通过Ollama客户端调用本地部署的deepseek-r1:1.5b模型;2) 详细解决了开发过程中遇到的三大问题:虚拟环境激活、PowerShell脚本执行策略和包路径问题;3) 提供标准化操作流程,包括首次设置执行策略、激活虚拟环境和启动服务等步骤。该方案实现了基于本地私有
用Python写一个智能聊天机器人的小Demo,用ollama本地私有化部署这个聊天机器人
✅ 目标
运行一个 Streamlit + Ollama 聊天 Demo:
python
#我的智能聊天机器人
#技术:Streamlit、Ollama
#导入streamlit包
import streamlit as st
#导入ollama
import ollama
#ollama获取客户端
client = ollama.Client(host="http://localhost:11434")
print(client.list())
print(client.ps())
count = 1
#初次渲染,count、message不存在就初始化
if 'count' not in st.session_state:
st.session_state.count = 1
if 'message' not in st.session_state:
st.session_state.message = []
st.title("Dabria的智能聊天机器人")
st.divider()
# 统一渲染所有历史消息
for message in st.session_state.message:
st.chat_message(message['role']).markdown(message['content'])
#处理最新一轮对话
question = st.chat_input("请输入您的问题:")
if question:#如果用户问的问题不为空
# 1、把用户回答记录到历史对话中去
st.session_state.message.append({'role':'user','content':question})
# 2、显示用户消息
st.chat_message("user").markdown(question)
# 3、模拟AI的思考
with st.spinner("AI思考中"):
response = client.chat(
model='deepseek-r1:1.5b',
messages=[{"role": "user", "content": question}]
)
ai_content = response['message']['content']
#4、从response中取出message中的content,把AI的回答记录到历史对话中去
st.session_state.message.append({'role':'assistant','content':ai_content})
# 5、显示AI回复
st.chat_message("assistant").markdown(ai_content)
st.session_state.count += 1
代码写完后,先启动Ollama。
✅ 是否启动了Ollama,快速自查清单:
| 操作 | 预期结果 | 说明 |
|---|---|---|
| 点击开始菜单 → Ollama | 系统托盘出现小羊图标 | ✅ 服务已启动 |
运行 ollama list |
显示模型列表 | ✅ 通信正常 |
运行 ollama run xxx |
进入聊天模式 | ✅ ollama模型可用 |
直接运行 streamlit run ... |
聊天界面正常响应 | ✅ 全链路打通 |
✅ Demo最终期望能实现的结果
-
浏览器成功打开
http://localhost:8501 -
用户能通过 Ollama 服务与指定本地模型(如
deepseek-r1:1.5b)实现正常对话 -
所有依赖正确加载
🔍 全过程真实障碍与解决(按时间线)
❌ 阶段 1:首次在 PowerShell 运行 → 报错找不到 ollama
powershell
streamlit run D:\PythonProject\day1\kuangye\my_streamlit_ollama.py
报错:
text
ModuleNotFoundError: No module named 'ollama' File "D:\develop\Python\Lib\site-packages\..."
🔑 问题本质:终端运行时未激活虚拟环境,导致使用了错误的 Python 解释器和包路径。
分析:
-
我创建一个新的Python项目,勾选了 “New environment using Virtualenv”(默认通常勾选✅),是给这个项目创建了一个虚拟环境(.venv)。当这个项目需要在终端运行(eg:powerShell里运行时一样)时,需要先去激活虚拟环境。命令格式:D:\xxx\项目名venv\Scripts\Activate.ps1
-
在未激活虚拟环境的情况下,直接运行了 streamlit run ...,而此时系统 PATH 中的 streamlit 来自全局 Python 环境,导致启动的 Python 解释器也是全局的,从而找不到只安装在 .venv 中的 ollama 包
🔍 阶段 2:通过 PyCharm 确认包已安装
打开:
text
File → Settings → Python Interpreter ← 注意:没有 "Project" 一级,这是正常的!
看到:
-
解释器路径:
D:\PythonProject\day1\.venv\Scripts\python.exe -
包列表:✅
ollama、✅streamlit
✅ 结论:包安装无误,环境配置正确
🛠️ 阶段 3:尝试在 PowerShell 激活虚拟环境 → 遭遇新错误!
执行:
powershell
D:\PythonProject\day1\.venv\Scripts\Activate.ps1
报错:
text
无法加载文件 ... 因为在此系统上禁止运行脚本。 有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170
🔑 问题本质:
-
Windows PowerShell 默认 禁止运行本地 .ps1 脚本(安全策略)
-
即使文件存在,也无法执行
✅ 阶段 4:解决 PowerShell 执行策略限制(关键一步!)
执行了新的命令:
powershell
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
系统提示(没有这个更改执行策略的提示也是对的,直接跳过,执行下一步):
text
是否要更改执行策略? [Y] 是 ...
你输入 Y 并回车 → 策略更新成功
💡 说明:
RemoteSigned:允许运行本地脚本 + 已签名的远程脚本
-Scope CurrentUser:仅影响当前用户,安全且无需管理员权限此操作只需执行一次,永久生效
✅ 阶段 5:再次激活虚拟环境 → 成功!
powershell
D:\PythonProject\day1\.venv\Scripts\Activate.ps1
提示符变为:
powershell
(.venv) PS D:\PythonProject\day1\kuangye>
✅ 表示:虚拟环境已激活,后续命令将使用 .venv 中的 Python 和包
✅ 阶段 6:启动应用 → 成功运行!
powershell
streamlit run my_streamlit_ollama.py
输出:
text
You can now view your Streamlit app in your browser. Local URL: http://localhost:8501
✅ 成功原因:
-
当前环境是
.venv -
streamlit和ollama均在此环境中 -
使用
streamlit runXXX,启动了 Web 服务
🧠 核心认知升级(完整版)
表格
| 问题 | 真相 | 正确做法 |
|---|---|---|
| 终端找不到 ollama | 用的是系统 Python,不是 .venv |
必须先激活 .venv |
| PyCharm 能跑,终端不能跑 | IDE 与终端环境隔离 | 终端需手动激活相同环境 |
| Activate.ps1 无法运行 | PowerShell 默认禁止脚本 | 首次运行前执行: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser |
| Settings 里没有 Project → Python Interpreter | 项目未完全初始化 | 直接找 Python Interpreter,它可能在根级 |
✅ 未来标准操作流程(完整四步)
powershell
# 1. 进入项目目录 cd D:\PythonProject\day1\kuangye # 2. 【仅首次需要】允许脚本运行 Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser # 3. 【每次都需要】激活虚拟环境 D:\PythonProject\day1\.venv\Scripts\Activate.ps1 # 4. 启动应用 streamlit run my_streamlit_ollama.py
✅ 只要看到
(.venv)前缀,就说明一切就绪!
❤️ 总结
这个Demo跨越了 Python 开发的三大核心关卡:
-
环境隔离(虚拟环境 vs 系统环境)
-
工具链协同(PyCharm 配置 ≠ 终端行为)
-
系统安全策略(PowerShell 执行限制)
现在你不仅跑通了一个 Demo, 更掌握了 可复用、可迁移、可扩展的工程能力。
下次再做类似项目,你会:
-
5 秒设置执行策略(如果需要)
-
10 秒激活虚拟环境
-
1 行命令启动服务
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐
所有评论(0)