用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

  • streamlitollama 均在此环境中

  • 使用 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 开发的三大核心关卡:

  1. 环境隔离(虚拟环境 vs 系统环境)

  2. 工具链协同(PyCharm 配置 ≠ 终端行为)

  3. 系统安全策略(PowerShell 执行限制)

现在你不仅跑通了一个 Demo, 更掌握了 可复用、可迁移、可扩展的工程能力

下次再做类似项目,你会:

  • 5 秒设置执行策略(如果需要)

  • 10 秒激活虚拟环境

  • 1 行命令启动服务

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐