AI大模型应用开发萌新的总结——从重启电脑关闭环境后到运行streamlit run .py之前到底要干些什么
AI大模型应用开发萌新的总结——从重启电脑关闭环境后到运行streamlit run .py之前到底要干些什么
先明确Linux虚拟环境的核心作用:隔离不同项目的Python依赖包与解释器版本,避免全局环境中依赖冲突、版本混乱,同时防止项目依赖污染系统全局环境,让项目部署、迁移和多项目并行开发更高效可控。但实际使用中,高频问题频发,以下直击各核心痛点及本质,不冗余、不绕弯
但是,在黑马程序员的AI课程里面并没有讲解虚拟环境安装,让某些环境恶劣的电脑真的没招了。就像这样:这个报错是因为WSL 的 Ubuntu 系统开启了「外部环境管理」保护机制,它不允许你直接在全局 Python 环境里用 pip 安装包,目的是避免破坏系统自带的 Python 依赖。
解决方案:安装虚拟环境,我搜索了一下,这也贴合企业级开发的绝对需要。

当然,ollama和streamlit建议一起安装在虚拟环境里面 直接问豆包帮你在WSL里面创建虚拟环境,然后后面重启电脑后,有一系列的步骤之后让你重新开启streamlit run .py
步骤如下:1.关机后检查ollama是否运行
sudo systemctl status ollama
(若运行则直接打开虚拟环境,依次运行如下指令 )
#1. 激活虚拟环境
source ~/venvs/streamlit_ollama_venv/bin/activate
#2. 切换到项目代码目录(必须替换为你自己的真实代码路径)
cd /home/xnh/py_code/learn_ai
#3. 运行 Streamlit 项目(替换为你的真实脚本文件名,比如 itheima_chatbox.py)
streamlit run itheima_chatbox.py
2.若没有运行ollama则先开启虚拟环境
# 1. 激活虚拟环境
source ~/venvs/streamlit_ollama_venv/bin/activate
然后再开启ollama和streamlit,可能需要多开一个终端
1.先激活已经创建过的虚拟环境
2.cd到路径再启动ollama serve
注意下面两张图的开启虚拟环境的路径有问题。不是开启全局。
配套示意图文字说明(适配博客配图)
如果需要给这部分配图片,图片可以分两栏对比:
-
(不推荐):
标题:全局路径(易混乱)
路径:~/venvs/streamlit_ollama_venv
备注:多项目时分不清环境归属,删除项目留冗余 -
(推荐):
标题:项目内路径(工程化)
路径:/home/xnh/py_code/learn_ai/venv
备注:环境随项目走,无冗余,符合企业规范
你直接把这段Markdown粘贴到博客对应位置,就能把这个关键优化讲清楚,既保留你的核心思路,又提升内容的实用性~

3.这时候如果下面不跳转就再开一个终端
然后再来一遍激活虚拟环境再cd,然后直接streamlit run .py

然后光标点着那两个http网址,按住ctrl,再单击鼠标,直接就进入了浏览器,打开了你的streamlit页面

当然,跟着黑马敲的聊天机器人也有可能会敲错导致运行不了,这里附上我的python代码
import ollama
import streamlit as st
# 1. 修正ollama客户端端口(Ollama默认是11434,不是8080)
client = ollama.Client(host="http://localhost:11434")
# 2. 初始化消息记录(变量名统一为messages,避免单复数混淆)
if "messages" not in st.session_state:
st.session_state["messages"] = []
# 页面标题与分割线
st.title("黑马智聊机器人")
st.divider()
# 3. 渲染历史对话(单独循环,避免重复渲染)
for message in st.session_state["messages"]:
with st.chat_message(message["role"]):
st.markdown(message["content"])
# 用户输入问题
prompt = st.chat_input("请输入您的问题")
if prompt:
# 4. 添加用户消息到历史记录
st.session_state["messages"].append({"role": "user", "content": prompt})
# 渲染当前用户消息
with st.chat_message("user"):
st.markdown(prompt)
# 5. AI思考与回复(注意缩进,只在用户输入后执行)
with st.spinner("AI思考中..."):
# 修正参数名:是messages,不是message
response = client.chat(
model="deepseek-r1:1.5b",
messages=st.session_state["messages"] # 传递完整对话历史,实现多轮上下文
)
# 添加AI回复到历史记录
st.session_state["messages"].append({"role": "assistant", "content": response["message"]["content"]})
# 渲染AI回复
with st.chat_message("assistant"):
st.markdown(response["message"]["content"])









