最近,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 左右。
当然,这里我们不需要直接在网站上下载,后面可以直接在代码中加载模型。
准备工作
- 安装 python 环境
这里我使用的是 python 3.10,你可以根据自己的电脑配置来选择合适的版本。官网是 www.python.org/downloads/[3]根据提示安装即可
- 安装依赖
pip install torch transformers flask
其中 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)
如果你不会 python,直接复制这段代码到文本文件中,然后将文件修改保存为app.py即可。
运行应用
打开app.py所在终端,输入以下命令可以直接运行应用:
复制python app.py
如果你无法访问 huggingface,可以修改下环境变量使用镜像地址:
- windows 修改方法
cmd
复制set HF_ENDPOINT=https://hf-mirror.com
powershell
复制set HF_ENDPOINT=https://hf-mirror.com
- linux 修改方法
export HF_ENDPOINT=https://hf-mirror.com
- mac 修改方法
export HF_ENDPOINT="https://hf-mirror.com"
修改完成之后再次运行app.py,等待模型下载完毕之后就可以使用了。
image.png
调用接口http://172.16.10.157:5000/generate传入相关参数即可,这里我们只传入一个提问 prompt 参数,其他参数都用默认值。
测试接口
我们需要使用 postman 或者其他工具来测试接口,这里我使用的是 apifox。调用接口并传入prompt问题,等待一会就会返回一个生成的文本。
当然这里因为我们电脑配置有限,只能使用 deepseek 提供的最简单的 1.5b 的模型作为演示。参数量越大,生成的文本质量肯定就越好,同时需要的电脑配置就越高。
后续调用
接口部署完成之后,后续我们可以根据需要在工程项目中调用接口,来实现一些 AI 对话应用。同时可以根据每个用户的 id 来保存用户的历史对话,以便后续根据用户的历史对话来生成更好的回答。下篇文章将介绍如何使用 nodejs 来调用这个接口,并实现一个 AI 对话应用,欢迎点赞收藏加关注
标注
[1] https://huggingface.co
[2] https://hf-mirror.com/
[3] https://www.python.org/downloads