如何在本地部署 DeepSeek 并提供接口用于开发AI对话应用?

愤怒的蜗牛

如何在本地部署 DeepSeek 并提供接口用于开发AI对话应用?

最近,DeepSeek 异常火爆,堪称国产 AI 之光,并且它还是免费开源的。只需打开 DeepSeek 对话界面,就能免费与其对话,让它解决你的问题,关键是它的回答质量非常高。当然,本篇文章并不是介绍如何使用 DeepSeek 进行对话的,因为这太简单了,连我 5 岁的儿子都会用。本篇文章将介绍如何在你本地的电脑上部署一个 DeepSeek 模型,并提供接口供你调用,以便后续基于它开发一些 AI 对话应用。

了解 huggingface

  • 什么是 huggingface?

Hugging Face 是一个专注于自然语言处理(NLP)的开源社区,它提供了一个强大的平台,用于研究和开发各种 NLP 模型和工具。也就是说,我们需要的 DeepSeek 模型可以从 Hugging Face 下载。它的官网是 huggingface.co/[1]。国内用户使用它可能需要一些“魔法”,但不用担心,它在国内有一些镜像地址,你可以通过这些镜像地址来下载模型。比如 hf-mirror.com/[2],点进去之后直接搜索我们需要的模型即可。根据你的电脑配置,可以选择不同的模型。这里我选用 DeepSeek 提供的最简单的 1.5B(15 亿个参数)的模型 DeepSeek-R1-Distill-Qwen-1.5B,大约 3GB 左右。

image.png当然,这里我们不需要直接在网站上下载,后面可以直接在代码中加载模型。

准备工作

  • 安装 python 环境

这里我使用的是 python 3.10,你可以根据自己的电脑配置来选择合适的版本。官网是 www.python.org/downloads/[3]根据提示安装即可

  • 安装依赖

pip install torch transformers flask1.

其中 torch 是 PyTorch 的核心库,PyTorch 是一个开源的机器学习库,用于构建和训练神经网络。transformers 是一个用于自然语言处理(NLP)任务的库,它提供了许多预训练的模型和工具。flask 是一个轻量级的 Web 应用框架,用于构建 Web 应用。

编写代码

from flask import Flask, request, jsonify
from transformers import AutoModelForCausalLM, AutoTokenizer
import torch

app = Flask(__name__)

# 加载模型和分词器
MODEL_NAME = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B"
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
model = AutoModelForCausalLM.from_pretrained(MODEL_NAME)

# 设置 pad_token_id
if tokenizer.pad_token isNone:
    tokenizer.pad_token = tokenizer.eos_token
model.config.pad_token_id = tokenizer.pad_token_id

# 设置设备
device = torch.device("cuda"if torch.cuda.is_available() else"cpu")
model.to(device)

def generate_text(prompt, max_length=100, top_p=0.95, temperature=0.7):
    """
    根据输入的提示(prompt)生成文本。

    参数:
        prompt (str): 输入的文本提示,用于引导模型生成后续内容。
        max_length (int): 生成文本的最大长度(包括输入提示)。
        top_p (float): 核采样(Nucleus Sampling)的概率阈值,控制生成文本的多样性。
        temperature (float): 温度参数,控制生成文本的随机性。

    返回:
        str: 生成的文本。
    """
    # 使用分词器将输入文本(prompt)转换为模型所需的输入格式。
    # return_tensors="pt" 表示返回 PyTorch 张量格式。
    # padding=True 和 truncatinotallow=True 确保输入长度一致且不超过模型的最大长度。
    inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncatinotallow=True).to(device)

    # 调用模型的 generate 方法生成文本。
    # inputs.input_ids 是输入文本的编码,attention_mask 是注意力掩码,用于指示哪些位置是有效的输入。
    outputs = model.generate(
        inputs.input_ids,  # 输入文本的编码
        attention_mask=inputs.attention_mask,  # 注意力掩码
        max_length=max_length,  # 生成文本的最大长度
        num_return_sequences=1,  # 返回的序列数量(这里只生成一个序列)
        no_repeat_ngram_size=2,  # 避免重复的 n-gram 大小(防止重复生成相同的短语)
        do_sample=True,  # 是否使用采样(而不是贪婪解码)
        top_p=top_p,  # 核采样概率阈值
        temperature=temperature,  # 温度参数,控制随机性
        pad_token_id=tokenizer.pad_token_id,  # 填充标记的 ID
    )

    # 将生成的编码(outputs)解码为可读的文本。
    # skip_special_tokens=True 表示跳过特殊标记(如 [CLS]、[SEP] 等)。
    generated_text = tokenizer.decode(outputs[0], skip_special_tokens=True)

    # 返回生成的文本。
    return generated_text

# API 路由
@app.route("/generate", methods=["POST"])
def generate():
    data = request.json
    prompt = data.get("prompt", "")
    max_length = data.get("max_length", 100)
    top_p = data.get("top_p", 0.95)
    temperature = data.get("temperature", 0.7)

    ifnot prompt:
        return jsonify({"error": "Prompt is required"}), 400

    try:
        generated_text = generate_text(prompt, max_length, top_p, temperature)
        return jsonify({"generated_text": generated_text})
    except Exception as e:
        return jsonify({"error": str(e)}), 500

# 启动应用
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.69.70.71.72.73.74.75.76.77.78.79.80.

如果你不会 python,直接复制这段代码到文本文件中,然后将文件修改保存为app.py即可。

运行应用

打开app.py所在终端,输入以下命令可以直接运行应用:

python app.py1.

如果你无法访问 huggingface,可以修改下环境变量使用镜像地址:

  • windows 修改方法

cmd

set HF_ENDPOINT=https://hf-mirror.com1.

powershell

set HF_ENDPOINT=https://hf-mirror.com1.
  • linux 修改方法

export HF_ENDPOINT=https://hf-mirror.com1.
  • mac 修改方法

export HF_ENDPOINT="https://hf-mirror.com"1.

修改完成之后再次运行app.py,等待模型下载完毕之后就可以使用了。

image.pngimage.png

调用接口http://172.16.10.157:5000/generate传入相关参数即可,这里我们只传入一个提问 prompt 参数,其他参数都用默认值。

测试接口

我们需要使用 postman 或者其他工具来测试接口,这里我使用的是 apifox。调用接口并传入prompt问题,等待一会就会返回一个生成的文本。 image.png

当然这里因为我们电脑配置有限,只能使用 deepseek 提供的最简单的 1.5b 的模型作为演示。参数量越大,生成的文本质量肯定就越好,同时需要的电脑配置就越高。

后续调用

接口部署完成之后,后续我们可以根据需要在工程项目中调用接口,来实现一些 AI 对话应用。同时可以根据每个用户的 id 来保存用户的历史对话,以便后续根据用户的历史对话来生成更好的回答。下篇文章将介绍如何使用 nodejs 来调用这个接口,并实现一个 AI 对话应用,欢迎点赞收藏加关注

标注

[1] https://huggingface.co

[2] https://hf-mirror.com/

[3] https://www.python.org/downloads


您需要 登录账户 后才能发表评论

发表评论

快捷回复: 表情:
AddoilApplauseBadlaughBombCoffeeFabulousFacepalmFecesFrownHeyhaInsidiousKeepFightingNoProbPigHeadShockedSinistersmileSlapSocialSweatTolaughWatermelonWittyWowYeahYellowdog
评论列表 (暂无评论,14人围观)

还没有评论,来说两句吧...

目录[+]

取消
微信二维码
微信二维码
支付宝二维码