私有化聊天机器人开发
本文介绍了基于Ollama部署本地私有化模型deepseek-r1并结合Python+Streamlit开发对话机器人的完整流程。主要内容包括:1)Ollama的安装与deepseek-r1:7b模型的部署;2)使用Python连接Ollama API实现基础对话功能;3)通过Streamlit构建包含历史记录、角色区分和加载动画的交互界面。文章提供了详细的代码示例和实现步骤,为初学者提供了大模型
本文主要介绍基于Ollama部署本地私有化模型deepseek-r1,并结合python+streamlit开发一个简单的用于对话的聊天机器人,以熟悉大模型开发入门。觉得本文对您有帮助的话,麻烦点赞收藏支持下,感谢。
注:本文介绍时,环境为Windows11,python3.12
1 Ollama部署本地私有化模型deepseek-r1
1.1 Ollama下载安装
官网:Ollama
点击下载按钮,跳转到下载页面

选择对应系统版本,点击按钮开始下载,下载速度一般比较慢,需要借助科技

下载完成后,点击运行,点击安装

安装完成运行命令行进行检测,会输出安装的版本
ollama -v

1.2 部署deepseek-r1模型
回到Ollama官网:Ollama,点击模型,跳转对应页面

此处列举了许多可用的大模型,本文以deepseek-r1:7b版本为例(具体可结合自身电脑配置)

搜索deepseek,找到r1模型

页面列举了部署命令和模型的版本,根据自身电脑配置,配置较低可以选择1.5b版本,一般建议7b和8b版本


运行命令开始部署
ollama run deepseek-r1:7b
由于我之前已经完成了下载,所以此处直接进入问答界面,第一次部署会有个下载过程,比较慢,也需要科技

开始简单的问答尝试,模型回复正常

2 python+streamlit开发私人聊天机器人
1.1 python环境搭建
可以参考我的另一篇文章:Python开发环境搭建(2026.02.26更新)_python:3.10-slim下载-CSDN博客
里面详细描述了python开发环境的搭建流程
1.2 streamlit开发简单界面
创建一个应用工程,导入需要的包,如果提示没有,可以使用Alt+Enter触发快速修复,选择安装
import streamlit as st
import ollama as oa

1.2.1 模型api接入
该步骤需要启动ollama,双击图标启动即可。
1、首先进行简单的尝试,写死对话内容并打印输出
import ollama as oa
# 接入模型api,创建本地客户端连接,默认端口11434
client = oa.Client(host="http://127.0.0.1:11434")
# 模型名称
model = "deepseek-r1:7b"
# 模型调用
resp = client.chat(model=model, messages=[{"role": "user", "content": "你好"}])
# 打印模型返回结果
print(resp["message"]["content"])

2、保持程序持续运行,并获取用户输入内容
import ollama as oa
# 接入模型api,创建本地客户端连接,默认端口11434
client = oa.Client(host="http://127.0.0.1:11434")
# 模型名称
model = "deepseek-r1:7b"
# # 模型调用
# resp = client.chat(model=model, messages=[{"role": "user", "content": "你好"}])
#
# # 打印模型返回结果
# print(resp["message"]["content"])
# 通过循环保持聊天
while True:
text = input("> ")
if text == "exit":
break
else:
resp = client.chat(model=model, messages=[{"role": "user", "content": text}])
print(resp["message"]["content"])

1.2.2 streamlit使用
1、界面图形
通过标题,输入输出框等创建简单的对话页面
import streamlit as st
# 输出分割线
st.divider()
# 输出标题
st.title("聊天机器人")
model = "deepseek-r1:7b"
# 输出内容
st.write(f"模型:{model}")
st.divider()
# 创建输入框
message = st.chat_input("请输入")
# 创建聊天框,此处进行逻辑判断,如果用户输入了内容,则将内容输出到聊天框中,
if message:
st.chat_message("user").write(message)
在python内运行会提示错误,按照提示,我们进入命令行中运行

复制刚才的提示,进入命令行中粘贴运行

会自动弹出页面,或者点击跳转,这就是我们编写的基础聊天页面,下方输入 你好,页面也会弹出 你好。

这里需要说明一下聊天框的参数,选中参数,按ctrl+p,提示参数枚举列表,该参数用来控制不同的角色,展示的图标不同,可以自行尝试下。

1.2.3 合并完善对话逻辑
将输出接入模型api,并生成聊天框,由于streamlit本身就是循环执行的,因此我们无需while进行控制了。
import ollama as oa
import streamlit as st
# 接入模型api,创建本地客户端连接,默认端口11434
client = oa.Client(host="http://127.0.0.1:11434")
# 模型名称
model = "deepseek-r1:7b"
# 输出分割线
st.divider()
# 输出标题
st.title("聊天机器人")
# 输出内容
st.write(f"模型:{model}")
st.divider()
# 创建输入框
message = st.chat_input("请输入")
# 创建聊天框,此处进行逻辑判断,如果用户输入了内容,则将内容输出到聊天框中,
if message:
st.chat_message("user").write(message)
resp = client.chat(model=model, messages=[{"role": "user", "content": message}])
st.chat_message("assistant").write(resp["message"]["content"])

1.2.4 添加历史聊天记录
我们需要对历史对话记录进行,用于界面展示回顾,这里用到了streamlit里面的session_state,可以简单理解为是由streamlit托管的一个容器,只要streamlit保持运行,就可以往里面持久记录数据。
import ollama as oa
import streamlit as st
# 接入模型api,创建本地客户端连接,默认端口11434
client = oa.Client(host="http://127.0.0.1:11434")
# 模型名称
model = "deepseek-r1:7b"
# 输出分割线
st.divider()
# 输出标题
st.title("聊天机器人")
# 输出内容
st.write(f"模型:{model}")
st.divider()
# 展示历史记录
if "messages" not in st.session_state:
st.session_state["messages"] = []
else:
for message in st.session_state.messages:
# 根据对应角色进行展示
if message["role"] == "user":
st.chat_message("user").write(message["content"])
else:
st.chat_message("assistant").write(message["content"])
# 创建输入框
message = st.chat_input("请输入")
# 创建聊天框,此处进行逻辑判断,如果用户输入了内容,则将内容输出到聊天框中,
if message:
# 记录提问,包含用户角色和内容,组装成一个字典
st.session_state["messages"].append({"role": "user", "content": message})
st.chat_message("user").write(message)
# 使用完整的对话历史调用 API
resp = client.chat(model=model, messages=st.session_state.messages)
# 获取助手回复
assistant_content = resp.message.content
# 记录回复,包含助手角色和内容,组装成一个字典
st.session_state["messages"].append({"role": "assistant", "content": assistant_content})
st.chat_message("assistant").write(assistant_content)

1.2.5 添加过场动画
因为模型思考需要一段时间,因此还没回复完成前,最好添加一个过场动画,以提示用户模型在思考中,只需要一行简单命令即可
import ollama as oa
import streamlit as st
# 接入模型api,创建本地客户端连接,默认端口11434
client = oa.Client(host="http://127.0.0.1:11434")
# 模型名称
model = "deepseek-r1:7b"
# 输出分割线
st.divider()
# 输出标题
st.title("聊天机器人")
# 输出内容
st.write(f"模型:{model}")
st.divider()
# 展示历史记录
if "messages" not in st.session_state:
st.session_state["messages"] = []
else:
for message in st.session_state.messages:
# 根据对应角色进行展示
if message["role"] == "user":
st.chat_message("user").write(message["content"])
else:
st.chat_message("assistant").write(message["content"])
# 创建输入框
message = st.chat_input("请输入")
# 创建聊天框,此处进行逻辑判断,如果用户输入了内容,则将内容输出到聊天框中,
if message:
# 记录提问,包含用户角色和内容,组装成一个字典
st.session_state["messages"].append({"role": "user", "content": message})
st.chat_message("user").write(message)
with st.spinner("思考中..."):
# 使用完整的对话历史调用 API
resp = client.chat(model=model, messages=st.session_state.messages)
# 获取助手回复
assistant_content = resp.message.content
# 记录回复,包含助手角色和内容,组装成一个字典
st.session_state["messages"].append({"role": "assistant", "content": assistant_content})
st.chat_message("assistant").write(assistant_content)


总结
以上就是基于本地部署的大模型,通过简单的前端页面,开发一个私有化的聊天机器人的全部内容,为后续的模型开发进行一个入门的指引,觉得内容有用的话,麻烦点赞收藏支持下,再次感谢。
更多推荐


所有评论(0)