本文主要介绍基于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)

总结

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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐