本文结构混乱,凑合看吧。
部署的方式有这么几种:

1. ollama(本地部署);
2. 官方API,需要key(有免费期,过后估计付费,且慢);
3. 原生+Docker或WSL等,官方原话Linux with Python 3.10 only. Mac and Windows are 
not supported,Windows下配置过程复杂,这里不做详述;

1. ollama部署

首先安装:
官网:https://ollama.com/
GitHub:https://github.com/ollama/ollama

直接按官网说的下载特别慢:curl -L https://ollama.com/download/ollama-linux-amd64.tgz -o ollama-linux-amd64.tgz
可以先加速下载下来,然后手动安装:sudo tar -C /usr -xzf ollama-linux-amd64.tgz
模型自动下载到~/.ollama/models

启动:ollama serve
在shell/cmd启动模型:ollama run deepseek-r1:7b
本地没有大模型的话,会自动拉取,速度较慢且下载不稳定,可以找速度较快的链接下载,然后copy到模型目录(比如E:\ollama_models)。

1.1 windows系统下安装:

可以去官网用迅雷下载(比官网直接下载更快);
默认安装到 C:\Users\XXXX\AppData\Local\Programs\Ollama(好像不能改);
默认下载大模型到 C:\Users\XXXX.ollama\models,如果C盘空间不多,建议设置环境变量OLLAMA_MODEL,指定到其它盘,注意重启ollama 后才能生效;

右键点击 此电脑——属性,在右边找到【高级系统设置】,然后会出现一个【系统属性】窗口。
在【高级】选项卡,点击【环境变量...】,这时弹出一个【环境变量】窗口;
点击【系统变量】下的[新建],然后又弹出一个窗口。
输入
变量名:OLLAMA_MODELS
变量值:E:\ollama_models

1.2 ollama 接口介绍

官方参考:https://github.com/ollama/ollama/blob/main/docs/api.md
中文参考:https://blog.csdn.net/m0_62458145/article/details/143153689

POST /api/generate	主要聊天api 1
POST /api/chat	主要聊天api 2

HEAD /api/blobs/:digest  检查某块是否存在。文件块存在返回 200 OK,不存在返回 404 Not Found
POST /api/blobs/:digest	创建一个块。从服务器的一个文件创建块。返回服务器文件路径。
GET /api/tags	列出本地模型
POST /api/show	显示模型信息
POST /api/copy  	复制模型
POST /api/create	创建模型
DELETE /api/delete  删除模型
GET /api/ps  列出正在运行的模型
GET /api/version

以下用法参考https://zhuanlan.zhihu.com/p/7736407412
对于ollama的api写法各有不同,其实就使用而言,最简单的request方法就可以奏效(注意在/api/generate 下,是没有“message”字段的)。

import requests
url = 'http://localhost:11434/api/generate'
def get_request(query):
    data = {
        "model": qwen2.5:7b,
        "prompt": query,
        "stream": False
    }
    response = requests.post(url, json=data)
    return response

但是这里没有关于生成参数的设置方式,比如,某些场景下,我们不希望模型生成随机答案。又一番百度之后,发现其实传入参数还有一个options可以设置:

    gen_option = {"temperature":0.0} #设置生成参数,取消随机性
    data = {"model": "qwen2.5:7b",
        "prompt": query,
        "options": gen_option
        "stream": False
    }
    response = requests.post(url, json=data)
    return response

参考https://gitee.com/mirrors/ollama/blob/main/docs/modelfile.md

/api/chat 和 /api/generate的区别
这两个API端点的主要区别在于它们的设计目的和处理上下文的方式:

/api/generate

用途: 这个端点主要用于生成单个文本片段。它接收输入并返回基于该输入的模型生成的文本,通常不考虑之前的消息历史或对话上下文。

功能: 它可以用于各种生成任务,如文章创作、代码生成、故事编写等,其中每次请求都是独立的,不依赖于前一次请求的结果。

/api/chat

用途: 这个端点用于支持对话式的交互。它通常需要一个消息列表作为输入,以维护对话的历史和上下文,确保模型能够理解并响应连续的对话。

功能: 它适合于创建聊天机器人、问答系统或任何需要多轮对话的应用场景。通过跟踪对话历史,模型可以提供更加连贯和情境相关的响应。

总结而言,/api/generate 更适合一次性生成任务,而 /api/chat 更适合需要持续对话和上下文记忆的任务。

上下文记忆
参考 https://blog.csdn.net/zzp_511/article/details/144949657

1.3 可视化界面与Ollama交互

open-webui
pip install open-webui
open-webui serve
可以用localhost:8080

ollama_gui(推荐,python + tk)
python -m pip install ollama_gui
python -m ollama_gui

2. 本地部署(这里指非ollama)

原生本地部署参考官方GitHub: https://github.com/deepseek-ai/DeepSeek-V3?tab=readme-ov-file
因为不直接支持Windows,在Windows下部署较复杂,这里不做详细介绍(因为我也没搞明白:D)。

参考deepseek官网文档:https://api-docs.deepseek.com/zh-cn/guides/kv_cache

DeepSeek /chat/completions API 进行多轮对话:

DeepSeek /chat/completions API 是一个“无状态” API,即服务端不记录用户请求的上下文,用户在每次请求时,需将之前所有对话历史拼接好后,传递给对话 API

下面的代码以 Python 语言,展示了如何进行上下文拼接,以实现多轮对话。

from openai import OpenAI
client = OpenAI(api_key="<DeepSeek API Key>", base_url="https://api.deepseek.com")

# Round 1
messages = [{"role": "user", "content": "What's the highest mountain in the world?"}]
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=messages
)

messages.append(response.choices[0].message)
print(f"Messages Round 1: {messages}")

# Round 2
messages.append({"role": "user", "content": "What is the second?"})
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=messages
)

messages.append(response.choices[0].message)
print(f"Messages Round 2: {messages}")

在第一轮请求时,传递给 API 的 messages 为:

[
    {"role": "user", "content": "What's the highest mountain in the world?"}
]

在第二轮请求时:

要将第一轮中模型的输出添加到 messages 末尾
将新的提问添加到 messages 末尾
最终传递给 API 的 messages 为:

[
    {"role": "user", "content": "What's the highest mountain in the world?"},
    {"role": "assistant", "content": "The highest mountain in the world is Mount Everest."},
    {"role": "user", "content": "What is the second?"}
]

3. 使用官方 DeepSeek-R1 云 API

对于可扩展的应用程序,请使用 DeepSeek 的官方 API,你可以在此处通过创建帐户并生成一个密钥来获取 DeepSeek API 密钥:

import openai
from dotenv import load_dotenv
import os

load_dotenv()
client = openai.OpenAI(
base_url="https://api.deepseek.com/v1",
api_key=os.getenv("DEEPSEEK_API_KEY")
)

response = client.chat.completions.create(
model="deepseek-reasoner",
messages=[{"role": "user", "content": "Write web scraping code with error handling"}],
max_tokens=1000 # Limit costs for long responses
)

部分转载自: https://www.cnblogs.com/medsci/p/18693305

Logo

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

更多推荐