自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何在本地部署 DeepSeek 并提供接口用于開發(fā)AI對(duì)話應(yīng)用?

人工智能
本篇文章將介紹如何在你本地的電腦上部署一個(gè) DeepSeek 模型,并提供接口供你調(diào)用,以便后續(xù)基于它開發(fā)一些 AI 對(duì)話應(yīng)用。

最近,DeepSeek 異?;鸨胺Q國(guó)產(chǎn) AI 之光,并且它還是免費(fèi)開源的。只需打開 DeepSeek 對(duì)話界面,就能免費(fèi)與其對(duì)話,讓它解決你的問(wèn)題,關(guān)鍵是它的回答質(zhì)量非常高。當(dāng)然,本篇文章并不是介紹如何使用 DeepSeek 進(jìn)行對(duì)話的,因?yàn)檫@太簡(jiǎn)單了,連我 5 歲的兒子都會(huì)用。本篇文章將介紹如何在你本地的電腦上部署一個(gè) DeepSeek 模型,并提供接口供你調(diào)用,以便后續(xù)基于它開發(fā)一些 AI 對(duì)話應(yīng)用。

了解 huggingface

  • 什么是 huggingface?

Hugging Face 是一個(gè)專注于自然語(yǔ)言處理(NLP)的開源社區(qū),它提供了一個(gè)強(qiáng)大的平臺(tái),用于研究和開發(fā)各種 NLP 模型和工具。也就是說(shuō),我們需要的 DeepSeek 模型可以從 Hugging Face 下載。它的官網(wǎng)是 huggingface.co/[1]。國(guó)內(nèi)用戶使用它可能需要一些“魔法”,但不用擔(dān)心,它在國(guó)內(nèi)有一些鏡像地址,你可以通過(guò)這些鏡像地址來(lái)下載模型。比如 hf-mirror.com/[2],點(diǎn)進(jìn)去之后直接搜索我們需要的模型即可。根據(jù)你的電腦配置,可以選擇不同的模型。這里我選用 DeepSeek 提供的最簡(jiǎn)單的 1.5B(15 億個(gè)參數(shù))的模型 DeepSeek-R1-Distill-Qwen-1.5B,大約 3GB 左右。

image.png當(dāng)然,這里我們不需要直接在網(wǎng)站上下載,后面可以直接在代碼中加載模型。

準(zhǔn)備工作

  • 安裝 python 環(huán)境

這里我使用的是 python 3.10,你可以根據(jù)自己的電腦配置來(lái)選擇合適的版本。官網(wǎng)是 www.python.org/downloads/[3]根據(jù)提示安裝即可

  • 安裝依賴
pip install torch transformers flask

其中 torch 是 PyTorch 的核心庫(kù),PyTorch 是一個(gè)開源的機(jī)器學(xué)習(xí)庫(kù),用于構(gòu)建和訓(xùn)練神經(jīng)網(wǎng)絡(luò)。transformers 是一個(gè)用于自然語(yǔ)言處理(NLP)任務(wù)的庫(kù),它提供了許多預(yù)訓(xùn)練的模型和工具。flask 是一個(gè)輕量級(jí)的 Web 應(yīng)用框架,用于構(gòu)建 Web 應(yīng)用。

編寫代碼

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)

# 設(shè)置 pad_token_id
if tokenizer.pad_token isNone:
    tokenizer.pad_token = tokenizer.eos_token
model.config.pad_token_id = tokenizer.pad_token_id

# 設(shè)置設(shè)備
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):
    """
    根據(jù)輸入的提示(prompt)生成文本。

    參數(shù):
        prompt (str): 輸入的文本提示,用于引導(dǎo)模型生成后續(xù)內(nèi)容。
        max_length (int): 生成文本的最大長(zhǎng)度(包括輸入提示)。
        top_p (float): 核采樣(Nucleus Sampling)的概率閾值,控制生成文本的多樣性。
        temperature (float): 溫度參數(shù),控制生成文本的隨機(jī)性。

    返回:
        str: 生成的文本。
    """
    # 使用分詞器將輸入文本(prompt)轉(zhuǎn)換為模型所需的輸入格式。
    # return_tensors="pt" 表示返回 PyTorch 張量格式。
    # padding=True 和 truncatinotallow=True 確保輸入長(zhǎng)度一致且不超過(guò)模型的最大長(zhǎng)度。
    inputs = tokenizer(prompt, return_tensors="pt", padding=True, truncatinotallow=True).to(device)

    # 調(diào)用模型的 generate 方法生成文本。
    # inputs.input_ids 是輸入文本的編碼,attention_mask 是注意力掩碼,用于指示哪些位置是有效的輸入。
    outputs = model.generate(
        inputs.input_ids,  # 輸入文本的編碼
        attention_mask=inputs.attention_mask,  # 注意力掩碼
        max_length=max_length,  # 生成文本的最大長(zhǎng)度
        num_return_sequences=1,  # 返回的序列數(shù)量(這里只生成一個(gè)序列)
        no_repeat_ngram_size=2,  # 避免重復(fù)的 n-gram 大?。ǚ乐怪貜?fù)生成相同的短語(yǔ))
        do_sample=True,  # 是否使用采樣(而不是貪婪解碼)
        top_p=top_p,  # 核采樣概率閾值
        temperature=temperature,  # 溫度參數(shù),控制隨機(jī)性
        pad_token_id=tokenizer.pad_token_id,  # 填充標(biāo)記的 ID
    )

    # 將生成的編碼(outputs)解碼為可讀的文本。
    # skip_special_tokens=True 表示跳過(guò)特殊標(biāo)記(如 [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

# 啟動(dòng)應(yīng)用
if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000)

如果你不會(huì) python,直接復(fù)制這段代碼到文本文件中,然后將文件修改保存為app.py即可。

運(yùn)行應(yīng)用

打開app.py所在終端,輸入以下命令可以直接運(yùn)行應(yīng)用:

python app.py

如果你無(wú)法訪問(wèn) huggingface,可以修改下環(huán)境變量使用鏡像地址:

  • 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"

修改完成之后再次運(yùn)行app.py,等待模型下載完畢之后就可以使用了。

image.pngimage.png

調(diào)用接口http://172.16.10.157:5000/generate傳入相關(guān)參數(shù)即可,這里我們只傳入一個(gè)提問(wèn) prompt 參數(shù),其他參數(shù)都用默認(rèn)值。

測(cè)試接口

我們需要使用 postman 或者其他工具來(lái)測(cè)試接口,這里我使用的是 apifox。調(diào)用接口并傳入prompt問(wèn)題,等待一會(huì)就會(huì)返回一個(gè)生成的文本。 image.png

當(dāng)然這里因?yàn)槲覀冸娔X配置有限,只能使用 deepseek 提供的最簡(jiǎn)單的 1.5b 的模型作為演示。參數(shù)量越大,生成的文本質(zhì)量肯定就越好,同時(shí)需要的電腦配置就越高。

后續(xù)調(diào)用

接口部署完成之后,后續(xù)我們可以根據(jù)需要在工程項(xiàng)目中調(diào)用接口,來(lái)實(shí)現(xiàn)一些 AI 對(duì)話應(yīng)用。同時(shí)可以根據(jù)每個(gè)用戶的 id 來(lái)保存用戶的歷史對(duì)話,以便后續(xù)根據(jù)用戶的歷史對(duì)話來(lái)生成更好的回答。下篇文章將介紹如何使用 nodejs 來(lái)調(diào)用這個(gè)接口,并實(shí)現(xiàn)一個(gè) AI 對(duì)話應(yīng)用,歡迎點(diǎn)贊收藏加關(guān)注

標(biāo)注

[1] https://huggingface.co

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

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

責(zé)任編輯:龐桂玉 來(lái)源: web前端進(jìn)階
相關(guān)推薦

2025-02-08 11:07:35

2025-03-28 08:14:18

2024-03-19 15:09:07

2025-03-03 02:00:00

DeepSeekAIToken

2025-02-28 07:11:20

2025-04-14 00:22:00

2025-02-12 08:21:55

OllamaChatboxDeepSeek

2025-02-11 00:00:25

2025-02-06 08:06:05

2010-08-19 10:15:57

Chrome 7

2025-02-14 09:10:47

2025-02-13 08:30:11

2025-03-10 00:00:00

2025-02-18 00:04:00

DeepSeek模型ChatGPT

2025-03-12 08:01:29

2025-02-12 11:59:15

DeepSeekAI語(yǔ)言模型

2015-10-10 15:56:22

OpenShiftNodeJS部署PaaS

2025-02-24 00:00:09

2025-02-10 11:11:47

2025-02-11 12:15:57

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)