1. 获取 API 密钥

要想使用DeepSeek API,必须拥有API密钥。

方法如下:

  1. 进入DeepSeekDeepSeek)平台,并免费注册(用手机号或微信账号注册)。
  2. 找到创建 API 密钥的入口,按照指引生成属于你的 API 密钥。这个密钥是调用 API 的重要凭证,务必妥善保管,不要泄露给他人。(如下图:)


 2. 安装必要的库

(1)Request模式

在 Python 环境中,你可以使用 requests 库来发送 HTTP 请求以调用 DeepSeek API。如果你的环境中还没有安装这个库,可以使用以下命令进行安装(bash):

pip install requests

(2)OpenAI SDK模式 

由于DeepSeek的访问遵循OpenAI标准,因而终端可以通过OpenAI SDK发送请求来调用DeepSeek AP。如果你的环境中还没有安装这SDK,可以使用以下命令进行安装(bash):

pip install openai

3. 调用DeepSeek API

(1)Request模式

调用DeepSeek API用以实现我们需要的AI功能,是我们使用DeepSeek API的目的。以下是一个使用 Python 和 requests 库调用 DeepSeek API 进行文本生成的简单示例:

# 导入 requests 库,用于发送 HTTP 请求
import requests
# 导入 json 库,用于处理 JSON 数据
import json

# 替换为你自己的 API 密钥!!!
API_KEY = "sk-00000000000000000000000000000000"
# DeepSeek API 的请求 URL,需根据实际情况调整
API_URL = "https://api.deepseek.com/chat/completions"

# 请求的头部信息,包含 API 密钥
headers = {
    # 使用 API 密钥进行身份验证
    "Authorization": f"Bearer {API_KEY}",
    # 指定请求的内容类型为 JSON
    "Content-Type": "application/json"
}

# 请求的数据,包含聊天消息和模型参数
data = {
  # 聊天消息列表
  "messages": [
    {
      # 系统消息,用于系统身份、环境、要求等设定。
      "content": "你是唐朝的诗人李白。",
      # 消息的角色为系统
      "role": "system"
    },
    {
      # 用户消息,用于与模型进行交互,生成对话结果。
      "content": "请做一首关于秋天的七言绝句诗。",
      # 消息的角色为用户
      "role": "user"
    }
  ],
  # 使用的模型名称
  "model": "deepseek-chat",
  # 频率惩罚参数,用于控制生成文本的多样性()
  "frequency_penalty": 0,
  # 最大生成的令牌数
  "max_tokens": 2048,
  # 存在惩罚参数,用于控制生成文本的多样性
  "presence_penalty": 0,
  # 响应格式,指定为文本
  "response_format": {
    "type": "text"
  },
  # 停止生成的条件,这里为 None
  "stop": None,
  # 是否启用流式响应,这里为 False
  "stream": False,
  # 流式响应的选项,这里为 None
  "stream_options": None,
  # 温度参数,用于控制生成文本的随机性
  "temperature": 0.7,
  # 核采样参数,用于控制生成文本的多样性
  "top_p": 1,
  # 工具列表,这里为 None
  "tools": None,
  # 工具选择策略,这里为 "none"
  "tool_choice": "none",
  # 是否返回对数概率,这里为 False
  "logprobs": False,
  # 返回的最高对数概率的数量,这里为 None
  "top_logprobs": None
}

# 发送 POST 请求到 API 端点
response = requests.post(API_URL, headers=headers, data=json.dumps(data))

# 检查响应状态码
if response.status_code == 200:
    # 将响应内容解析为 JSON 格式
    result = response.json()
    # 打印生成的聊天回复
    print(result["choices"][0]["message"]["content"])
else:
    # 打印请求失败的状态码和错误信息
    print(f"请求失败,状态码: {response.status_code},错误信息: {response.text}")

  执行结果如下(bash):

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\AAP01\test2.py 
金风玉露染秋光,
落叶纷飞舞夕阳。
稻谷飘香人欲醉,
丰收喜悦满心房。

进程已结束,退出代码为 0

(2)OpenAI SDK模式

 通过OpenAI SDK模式来调用DeepSeek API,代码如下:

# 导入 openai 库中的 OpenAI 类(使用OpenAI SDK)
from openai import OpenAI

# for backward compatibility, you can still use `https://api.deepseek.com/v1` as `base_url`.
# 创建一个 OpenAI 客户端实例,设置 API 密钥(api_key替换成你的真实的api密钥)和基础 URL
client = OpenAI(api_key="sk-000000000000000000000000", base_url="https://api.deepseek.com")

# 调用客户端的 chat.completions.create 方法,发送聊天请求
response = client.chat.completions.create(
    # 指定使用的模型为 deepseek-chat
    model="deepseek-chat",
    # 定义聊天消息列表,包含系统消息和用户消息
    messages=[
        # 系统消息,设置聊天角色为唐朝诗人李白
        {"role": "system", "content": "你是唐朝的诗人李白"},
        # 用户消息,请求生成一首关于秋天的七言绝句诗
        {"role": "user", "content": "请做一首关于秋天的七言绝句诗"},
  ],
    # 设置生成的最大令牌数为 1024
    max_tokens=1024,
    # 设置温度参数为 0.7,控制生成文本的随机性
    temperature=0.7,
    # 设置流式响应为 False,一次性返回所有生成的文本
    stream=False
)

# 打印生成的聊天回复内容
print(response.choices[0].message.content)

   执行结果如下(bash):

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\AAP01\test3.py 
秋风吹落黄金叶,  
月照寒江映孤舟。  
醉卧山林听雁过,  
梦回长安忆旧游。

进程已结束,退出代码为 0

 4、DeepSeek的模型

DeepSeek目前可提供的模型有两种,我们可以通过下面的程序列出DeepSeek提供给用户可使用的模型。

# 导入 openai 库中的 OpenAI 类
from openai import OpenAI

# 创建一个 OpenAI 客户端实例,设置 API 密钥和基础 URL
client = OpenAI(api_key="sk-123231ee8c3847cd8a21485fb0ee6ef8", base_url="https://api.deepseek.com")

# 调用客户端的 models.list 方法,获取所有可用的模型列表
models = client.models.list()

# 打印模型列表
print(models)

执行结果如下:

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\AAP01\test4.py 
SyncPage[Model](data=[Model(id='deepseek-chat', created=None, object='model', owned_by='deepseek'), Model(id='deepseek-reasoner', created=None, object='model', owned_by='deepseek')], object='list')

进程已结束,退出代码为 0

可以看到,有两个模型(Model),它们的id分别是'deepseek-chat'、'deepseek-reasoner'。这说明DeepSeek可以提供给用户两个可用模型,如下:

  • deepseek-chat
  • deepseek-reasoner

5、DeepSeek API的具体应用

(1)对话补全

所谓“对话补全”,就是你说了“上句”,由DeepSeek补全“下句”。在具体应用中,你提出“问题(上句)”,由DeepSeek给出“答案(下句)”。

示例代码:

import httpx
from openai import OpenAI

# 创建一个 OpenAI 客户端对象,用于调用 DeepSeek API
# api_key 参数是你的 API 密钥,用于身份验证。要将真实的密钥替换到代码处
# base_url 参数是 DeepSeek API 的基础 URL
client = OpenAI(api_key="sk-00000000000000000000000000", base_url="https://api.deepseek.com")

try:
    # 调用 DeepSeek API 进行聊天交互
    response = client.chat.completions.create(
        # 指定使用的模型为 deepseek-chat
        model="deepseek-chat",
        # 定义聊天消息列表,包含系统消息和用户消息
        messages=[
            # 系统消息,设置聊天机器人的角色为善于计算的人
            {"role": "system", "content": "你是一个善于计算的人"},
            # 用户消息,询问 12+13 的结果
            {"role": "user", "content": "12+13的结果"},
      ],
        max_tokens=100,
        temperature=0.7,
        stream=False

    )
    # 打印 API 返回的消息内容
    print(response.choices[0].message.content)
except httpx.HTTPStatusError as exc:
    # 捕获 HTTP 状态错误并打印错误信息
    print(f"HTTP Exception for {exc.request.url} - {exc.status_code} - {exc.response.text}")
except Exception as e:
    # 捕获其他异常并打印错误信息
    print(f"An error occurred: {e}")

执行结果(bash):

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\AAP01\test4.py 
12 + 13 的结果是 25。

进程已结束,退出代码为 0

可以看到对话的上句是“12+13的结果”,补全的下句是“12 + 13 的结果是 25”。实现了有问有答的应用。

具体在实际应用中,我们的问题会复杂得多,如下代码:

import httpx
from openai import OpenAI

# 创建一个 OpenAI 客户端对象,用于调用 DeepSeek API
# api_key 参数是你的 API 密钥,用于身份验证(要替换成真实的密钥)
# base_url 参数是 DeepSeek API 的基础 URL
client = OpenAI(api_key="sk-00000000000000000000000000000", base_url="https://api.deepseek.com")

try:
    # 调用 DeepSeek API 进行聊天交互
    response = client.chat.completions.create(
        # 指定使用的模型为 deepseek-chat
        model="deepseek-chat",
        # 定义聊天消息列表,包含系统消息和用户消息
        messages=[
            # 系统消息,设置聊天机器人的角色为善于计算的人
            {"role": "system", "content": "你是一个善于计算的人"},
            # 用户消息,询问鸡兔同笼的结果
            {"role": "user", "content": "在一个笼子里关着鸡和兔,从上面数有 8 个头,从下面数有 26 只脚,请问笼子里鸡和兔各有多少只?"},
      ],
        max_tokens=1024,
        temperature=0.7,
        stream=False

    )
    # 打印 API 返回的消息内容
    print(response.choices[0].message.content)
except httpx.HTTPStatusError as exc:
    # 捕获 HTTP 状态错误并打印错误信息
    print(f"HTTP Exception for {exc.request.url} - {exc.status_code} - {exc.response.text}")
except Exception as e:
    # 捕获其他异常并打印错误信息
    print(f"An error occurred: {e}")

其执行结果如下(bash):

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\AAP01\test4.py 
设鸡有 \( x \) 只,兔有 \( y \) 只。

根据题意,可以列出以下两个方程:

\[
\begin{cases}
x + y = 8 \quad \text{(头的总数)} \\
2x + 4y = 26 \quad \text{(脚的总数)}
\end{cases}
\]

解这个方程组:

1. 从第一个方程中解出 \( x \):
\[
x = 8 - y
\]

2. 将 \( x = 8 - y \) 代入第二个方程:
\[
2(8 - y) + 4y = 26
\]
\[
16 - 2y + 4y = 26
\]
\[
16 + 2y = 26
\]
\[
2y = 10
\]
\[
y = 5
\]

3. 将 \( y = 5 \) 代入 \( x = 8 - y \):
\[
x = 8 - 5 = 3
\]

所以,笼子里有 \( 3 \) 只鸡和 \( 5 \) 只兔。

进程已结束,退出代码为 0

 可以看得出来,对话补全绝不仅是针对简单的问题,也可以是非常复杂的问题。

(2)FIM 补全(中间填充补全)

中间填充补全的作用是:用户给出“头部”和“尾部”信息,由AI系统补全“中间”确实的部分。在实际应用中,体现为用户秒数要求的“头”和“尾”,有AI替用户完成中间的工作量。

示例代码:

import httpx
from openai import OpenAI

# 创建一个 OpenAI 客户端对象,用于调用 DeepSeek API
# api_key 参数是你的 API 密钥,用于身份验证(要替换成真实的密钥)
# base_url 参数是 DeepSeek API FIM的URL
client = OpenAI(api_key="sk-00000000000000000000000000000000000", base_url="https://api.deepseek.com/beta")

try:
    # 调用 DeepSeek API 进行聊天交互
    response = client.completions.create(
        # 指定使用的模型为 deepseek-chat
        model="deepseek-chat",
        # 设置提示信息,定义一个名为 max 的函数,该函数接受三个参数 a, b, c
        prompt="def max(a,b,c):",
        # 设置最后的信息,函数体中返回一个名为 result 的变量
        suffix="    return result",
        # 设置生成的最大令牌数为 128
        max_tokens=128
    )
    # 打印 API 返回的消息内容
    print(response.choices[0].text)
except httpx.HTTPStatusError as exc:
    # 捕获 HTTP 状态错误并打印错误信息
    print(f"HTTP Exception for {exc.request.url} - {exc.status_code} - {exc.response.text}")
except Exception as e:
    # 捕获其他异常并打印错误信息
    print(f"An error occurred: {e}")

该代码演示了给定开始的“头”信息和最后的“尾”信息,由AI补全信息的例子。例子给出了头尾信息如下:

        def max(a,b,c):

        ... ... ...

        return result

省略号(... ... ...)部分是AI要去补齐的部分。

代码解释:

  1.  尽管模式都是“deepseek-chat”,但为了区别于“对话补全”,base_url则有所不同,base_url="https://api.deepseek.com/beta"
  2. 通过prompt指定“头”信息,通过“suffix”指定“尾”信息。系统则补全中间部分。

代码运行结果如下(bash):

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\test5.py 

    if a>b and a>c:
        result=a
    elif b>a and b>c:
        result=b
    else:
        result=c


进程已结束,退出代码为 0

可以看到,按照最终结果要补上“中间部分”的信息,补齐完整后的完整代码应该为 :

def max(a,b,c):
    if a>b and a>c:
        result=a
    elif b>a and b>c:
        result=b
    else:
        result=c
return result

中间填充补全往往应用于文案、作文等场景,如下示例代码:

import httpx
from openai import OpenAI

# 创建一个 OpenAI 客户端对象,用于调用 DeepSeek API
# api_key 参数是你的 API 密钥,用于身份验证
# base_url 参数是 DeepSeek API 的基础 URL
client = OpenAI(api_key="sk-00000000000000000000000000", base_url="https://api.deepseek.com/beta")

try:
    # 调用 DeepSeek API 进行聊天交互
    response = client.completions.create(
        # 指定使用的模型为 deepseek-chat
        model="deepseek-chat",
        # 设置提示信息,说明事情的开头
        prompt="小明早上起床后,发现起晚了",
        # 设置最后的信息,说明事情的结尾
        suffix="他只能眼看着那班错过的飞机毫无顾忌的飞走了。",
        # 设置生成的最大令牌数为 1024
        max_tokens=1024
    )
    # 打印 API 返回的消息内容
    print(response.choices[0].text)
except httpx.HTTPStatusError as exc:
    # 捕获 HTTP 状态错误并打印错误信息
    print(f"HTTP Exception for {exc.request.url} - {exc.status_code} - {exc.response.text}")
except Exception as e:
    # 捕获其他异常并打印错误信息
    print(f"An error occurred: {e}")

代码说明:

 以上代码要让AI补全如下信息(省略号是要交给AI补全的部分):

小明早上起床后,发现起晚了 ... ... ... 他只能眼看着那班错过的飞机毫无顾忌的飞走了。

程序运行结果如下:

C:\Users\gyfin\.conda\envs\pa001\python.exe D:\pyproject\pa001\test5.py 
,他急忙穿好衣服,冲出门去赶飞机。他一路狂奔,终于赶到了机场,却发现飞机已经起飞了。小明站在机场大厅,看着那架飞机在天空中渐行渐远,心中充满了无奈和懊悔。

进程已结束,退出代码为 0

 AI对缺失的中间部分进行了补齐,如果按照给定的补齐信息,那么整段文字应该是如下这段文字:

小明早上起床后,发现起晚了,他急忙穿好衣服,冲出门去赶飞机。他一路狂奔,终于赶到了机场,却发现飞机已经起飞了。小明站在机场大厅,看着那架飞机在天空中渐行渐远,心中充满了无奈和懊悔。 他只能眼看着那班错过的飞机毫无顾忌的飞走了。

 

6、DeepSeek API

DeepSeek提供了强大的API,开发人员可以通过Deepseek API | DeepSeek API Docs去了解和查询具体的使用方法。


Logo

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

更多推荐