系列篇章💥

No.文章
01【DeepSeek应用实践】DeepSeek接入Word、WPS方法详解:无需代码,轻松实现智能办公助手功能
02【DeepSeek应用实践】通义灵码 + DeepSeek:AI 编程助手的实战指南
03【DeepSeek应用实践】Cline集成DeepSeek:开源AI编程助手,终端与Web开发的超强助力
04【DeepSeek开发入门】DeepSeek API 开发初体验
05【DeepSeek开发入门】DeepSeek API高级开发指南(推理与多轮对话机器人实践)
06【DeepSeek开发入门】Function Calling 函数功能应用实战指南
07【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:本地部署与API服务快速上手
08【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:Web聊天机器人部署指南
09【DeepSeek部署实战】DeepSeek-R1-Distill-Qwen-7B:基于vLLM 搭建高性能推理服务器
10【DeepSeek部署实战】基于Ollama快速部署DeepSeek-R1系列模型实战指南(Linux)
11【DeepSeek部署实战】基于Ollama+Chatbox零成本部署DeepSeek-R1系列模型攻略(Windows)
12【DeepSeek开发实战】DeepSeek-R1-Distill-Qwen与LangChain的本地大模型应用开发指南


前言

随着人工智能技术的飞速发展,大语言模型已成为推动智能化应用的关键力量。DeepSeek-R1-Distill-Qwen-7B 作为一款高性能的蒸馏模型,不仅继承了大模型的强大推理能力,还通过优化大幅降低了部署成本。本文将手把手教你如何基于该模型搭建一个支持 128K 上下文、可视化思考过程的 Streamlit 聊天机器人,为用户提供智能且交互性强的体验。无论你是 AI 初学者还是技术爱好者,都能通过本文的详细指导轻松上手!

一、环境准备

1、服务器配置

为实现 DeepSeek-R1-Distill-Qwen 模型的高效部署,推荐采用 Ubuntu 22.04 LTS 操作系统,搭配 Python 3.12 环境、CUDA 12.1 以及 PyTorch 2.3.0。同时,配备至少 24GB 显存的 NVIDIA GPU 是必不可少的,这将确保模型在推理过程中能够保持高性能与稳定性,犹如为模型的运行提供了强劲的动力引擎。

2、安装依赖包

# 升级pip并配置清华源
python -m pip install --upgrade pip
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple

# 安装核心依赖
pip install transformers==4.48.2
pip install accelerate==1.3.0
pip install modelscope==1.22.3
pip install streamlit==1.41.1

先把 pip 升级到最新版,这样能用上 pip 的新功能,安装东西更稳定。然后把 pip 下载源改成清华大学的镜像源,下载速度能快很多。接着就可以安装这几个重要的库:transformers用来加载和使用模型;accelerate能让模型训练和运行更快;modelscope帮你下载和管理模型;streamlit用来做和用户互动的界面。

二、下载模型文件

1、使用python代码下载模型

from modelscope import snapshot_download

# 注意修改为您的实际存储路径
model_dir = snapshot_download(
    'deepseek-ai/DeepSeek-R1-Distill-Qwen-7B',
    cache_dir='/root/autodl-tmp',  # 自定义路径
    revision='master'
)

这段代码用modelscope库的snapshot_download函数下载模型。deepseek-ai/DeepSeek-R1-Distill-Qwen-7B是模型在平台上的名字,cache_dir是你要把模型存到哪里,你可以自己改,revision='master’表示下最新版本。
在这里插入图片描述

下载的时候,网络要稳定,存储路径别写错,不然就下不了。代码写好后,直接执行,模型就开始下载了,下载时间要看网速。
注意:也可以直接将上面代码封装到python文件中(例如:download.py)直接执行python download.py即可。

2、使用bash命令下载模型

除了用 Python 代码,也能用命令行下载。有的大模型文件特别大,普通下载方法不行,这时候就要用git - lfs。它是专门用来处理大文件下载和传输的工具。在终端里,按顺序做这几步:

# 安装 Git LFS
curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash
sudo apt-get install git-lfs

# 克隆模型仓库
git clone https://www.modelscope.cn/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B.git

注意:下载完,一定要检查下文件是不是都完整。把你下载的文件和模型库里的清单对比一下,少了或者文件有问题,后面模型就用不了。

三、聊天机器人核心代码

核心代码实现示例,新建chat_test.py文件,该文件包含以下功能模块:

步骤 1:导入必要的库

from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
import streamlit as st
import re

步骤 2:配置 Streamlit 界面

with st.sidebar:
st.markdown("## DeepSeek-R1-Distill-Qwen-7B LLM")
    # 创建一个滑块,用于选择最大长度,范围在 0 到 8192 之间,默认值为 8192(DeepSeek-R1-Distill-Qwen-7B 支持 128K 上下文,并能生成最多 8K tokens,我们推荐设为 8192,因为思考需要输出更多的Token数)
    max_length = st.slider("max_length", 0, 8192, 8192, step=1)

# 创建一个标题
st.title("💬 DeepSeek R1 聊天机器人")

步骤 3:定义模型路径和文本分割函数

# 定义模型路径
mode_name_or_path = '/root/autodl-tmp/deepseek-ai/DeepSeek-R1-Distill-Qwen-7B'

# 文本分割函数
def split_text(text):
    pattern = re.compile(r'<think>(.*?)</think>(.*)', re.DOTALL) # 定义正则表达式模式
    match = pattern.search(text) # 匹配 <think>思考过程</think>回答
  
    if match: # 如果匹配到思考过程
        think_content = match.group(1).strip() # 获取思考过程
        answer_content = match.group(2).strip() # 获取回答
    else:
        think_content = "" # 如果没有匹配到思考过程,则设置为空字符串
        answer_content = text.strip() # 直接返回回答
  
    return think_content, answer_content

步骤 4:加载模型和 tokenizer

@st.cache_resource
def get_model():
    # 从预训练的模型中获取 tokenizer
    tokenizer = AutoTokenizer.from_pretrained(mode_name_or_path, trust_remote_code=True)
    tokenizer.pad_token = tokenizer.eos_token
    # 从预训练的模型中获取模型,并设置模型参数
    model = AutoModelForCausalLM.from_pretrained(mode_name_or_path, torch_dtype=torch.bfloat16,  device_map="auto")

    return tokenizer, model

# 加载 Qwen2.5 的 model 和 tokenizer
tokenizer, model = get_model()

步骤 5:初始化对话历史并显示历史消息

# 如果 session_state 中没有 "messages",则创建一个包含默认消息的列表
if "messages" not in st.session_state:
    st.session_state["messages"] = [{"role": "assistant", "content": "有什么可以帮您的?"}]

# 遍历 session_state 中的所有消息,并显示在聊天界面上
for msg in st.session_state.messages:
    st.chat_message(msg["role"]).write(msg["content"])

步骤 6:处理用户输入并生成响应


# 如果用户在聊天输入框中输入了内容,则执行以下操作
if prompt := st.chat_input():

    # 在聊天界面上显示用户的输入
    st.chat_message("user").write(prompt)

    # 将用户输入添加到 session_state 中的 messages 列表中
    st.session_state.messages.append({"role": "user", "content": prompt})

    # 将对话输入模型,获得返回
    input_ids = tokenizer.apply_chat_template(st.session_state.messages,tokenize=False,add_generation_prompt=True)
    model_inputs = tokenizer([input_ids], return_tensors="pt").to('cuda')
    generated_ids = model.generate(model_inputs.input_ids,max_new_tokens=max_length)
    generated_ids = [
        output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
    ]
    response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
    think_content, answer_content = split_text(response) # 调用split_text函数,分割思考过程和回答
    # 将模型的输出添加到 session_state 中的 messages 列表中
    st.session_state.messages.append({"role": "assistant", "content": response})
    # 在聊天界面上显示模型的输出
    with st.expander("模型思考过程"):
        st.write(think_content) # 展示模型思考过程
    st.chat_message("assistant").write(answer_content) # 输出模型回答
# print(st.session_state) # 打印 session_state 调试 

完整代码:将上述步骤合并后,即可得到完整的代码。每个步骤都有详细的注释,方便理解和调试。

四、服务部署启动

streamlit run chat_test.py --server.address 127.0.0.1 --server.port 6006

–server.address 127.0.0.1指定服务的地址为本地回环地址,
–server.port 6006指定服务的端口为 6006。
在这里插入图片描述

访问http://localhost:6006/即可体验:
在这里插入图片描述

五、对话聊天测试

在浏览器中访问http://localhost:6006/,即可打开聊天机器人的界面,与机器人进行交互。界面中展示了对话的输入框和输出区域,用户可以在输入框中输入问题,聊天机器人将在输出区域返回回答。

第一轮对话测试

提示词你是谁?
模型回复

您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。 </think>
您好!我是由中国的深度求索(DeepSeek)公司开发的智能助手DeepSeek-R1。如您有任何任何问题,我会尽我所能为您提供帮助。

第二轮对话测试

提示词请帮忙写一首小学四年级水平的现代诗
模型回复

嗯,用户让我帮忙写一首小学四年级水平的现代诗。首先,我得想一下,四年级的学生通常年龄在9-10岁左右,他们的语言理解能力和表达能力有限。所以,诗歌需要简单明了,用词要生动,容易引起他们的共鸣。
接下来,我要考虑现代诗的特点。现代诗通常比较自由,不拘泥于传统的押韵和格律,强调意象和情感的表达。所以,我需要选择一些孩子们熟悉的自然元素,比如小草、蝴蝶、风、雨,这些都能让他们联想到自然的美好和变化。
然后,我得确定诗的主题。考虑到孩子们的生活,可能选择校园里的场景,比如上学、课间活动,这样更容易引起他们的兴趣。同时,要传达积极的情感,比如希望、成长,这样孩子们读起来会感到温暖和激励。
再者,结构方面,现代诗通常比较短,每行不要太长,用词要简洁。我可以分成几个小节,每节描述一个场景或情感。例如,第一节描述阳光和小草,第二节描述蝴蝶和风,第三节描述雨和泥土,第四节描述希望和树苗。
最后,我要确保每句诗都能传达出清晰的情感和画面感,同时避免过于复杂的词汇。这样,孩子们读起来不会觉得困难,反而会感到亲切和有趣。此外,使用一些拟声词,比如“沙沙”、“嗡嗡”,可以增加诗歌的生动性。
总的来说,这首诗需要结合简单、生动和积极的主题,使用孩子们熟悉的意象,结构清晰,语言简洁,这样才能达到预期的效果。 </think>
《小草的希望》
阳光照 我在草地上 数着 沙沙的脚印
蝴蝶 在风里 嗡嗡 我听见 泥土里 藏着 一个小秘密
雨 打湿了 我的肩膀 泥土 在风里 轻轻 摇晃
树苗伸 出 一根细长的手指 等待 属于它的 希望

第三轮对话测试

提示词一个篮子里有5个苹果,你拿走了3个,篮子里还剩几个苹果?
模型回复

好,我现在要解决的问题是:一个篮子里有5个苹果,你拿走了3个,篮子里还剩几个苹果?
首先,我需要理解问题。问题描述了一个篮子中有5个苹果,然后拿走了3个,问剩下的苹果数量。
接下来,我应该进行计算。总共有5个苹果,拿走了3个,那么剩下的苹果数应该是5减去3,也就是2个。
为了确保计算的正确性,我可以使用减法的基本原理来验证。减法是数学中的基本运算,表示从一个数量中减去另一个数量。在这个问题中,5个苹果减去3个苹果,结果应该是2个苹果。
另外,我也可以通过实际操作来验证。如果我有一个装有5个苹果的篮子,我拿出3个苹果,剩下的苹果数就是5减去3,等于2个。
因此,经过计算和验证,篮子里还剩下2个苹果。 </think>
一个篮子里有5个苹果,你拿走了3个,篮子里还剩2个苹果。

六、功能亮点

1、支持 8192 tokens 超长上下文:能够理解和处理用户输入的长文本内容,为用户提供更加准确和全面的回答,适用于各种复杂的对话场景。
2、可视化模型思考过程:通过split_text函数对模型输出进行解析,将模型的思考过程直观地展示给用户,增强了用户对模型推理的理解和信任。
3、响应内容实时流式输出:在聊天机器人处理用户请求时,响应内容将实时流式输出,让用户能够更快地看到回答的部分内容,提高交互体验。

七、注意事项

1、确保显存容量≥16GB:DeepSeek-R1-Distill-Qwen-7B 模型在运行过程中需要占用一定的显存,为了保证模型能够正常运行,避免出现显存不足的错误,建议确保显存容量≥16GB。
2、首次运行需下载约 15GB 模型文件:由于模型文件较大,首次运行时需要下载约 15GB 的模型文件,这可能需要一定的时间,具体时间取决于网络速度。请确保在下载过程中有稳定的网络连接。
3、远程部署需配置 SSH 隧道端口转发:如果需要将聊天机器人部署到远程服务器上,需要配置 SSH 隧道端口转发,以便在本地浏览器中能够访问远程服务器上的服务。配置过程需要一定的网络知识和操作经验,可参考相关的 SSH 和端口转发教程。

总结

通过以上步骤,你已经成功搭建了基于 DeepSeek-R1-Distill-Qwen-7B 大模型的 Streamlit 聊天机器人。在实际使用过程中,你可以根据自己的需求对代码进行进一步优化和扩展,例如添加更多的功能模块、优化界面设计等。如果你在部署过程中遇到任何问题,可参考本文的步骤和注意事项,也可以查阅相关文档或寻求社区的帮助。希望你能在这个项目中充分发挥自己的创造力,探索大语言模型在聊天机器人领域的更多应用可能。

在这里插入图片描述

🎯🔖更多专栏系列文章:AI大模型提示工程完全指南AI大模型探索之路(零基础入门)AI大模型预训练微调进阶AI大模型开源精选实践AI大模型RAG应用探索实践🔥🔥🔥 其他专栏可以查看博客主页📑

😎 作者介绍:我是寻道AI小兵,资深程序老猿,从业10年+、互联网系统架构师,目前专注于AIGC的探索。
📖 技术交流:欢迎关注【小兵的AI视界】公众号或扫描下方👇二维码,加入技术交流群,开启编程探索之旅。
💘精心准备📚500本编程经典书籍、💎AI专业教程,以及高效AI工具。等你加入,与我们一同成长,共铸辉煌未来。
如果文章内容对您有所触动,别忘了点赞、⭐关注,收藏!加入我,让我们携手同行AI的探索之旅,一起开启智能时代的大门!

Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐