DeepSeek的API调用 | 结合DeepSeek API文档 | Python环境 | 对话补全(二)

学习DeepSeek的API调用

  • [1、API 文档学习](#1、API 文档学习)
    • [1.1 对话补全](#1.1 对话补全)
      • [1.1.1 用户提供的参数](#1.1.1 用户提供的参数)
      • [1.1.2 模型生成内容的参数](#1.1.2 模型生成内容的参数)
      • [1.1.3 三种不同风格的python代码](#1.1.3 三种不同风格的python代码)
    • [1.2 总结](#1.2 总结)

1、API 文档学习

1.1 对话补全

  根据输入的上下文,来让模型补全对话内容。

  例子:

python 复制代码
from openai import OpenAI
client = OpenAI(api_key="sk-123456", base_url="https://api.deepseek.com")

response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
  ],
    max_tokens=1024,
    temperature=0.7,
    stream=False
)
print(response.choices[0].message.content)

1.1.1 用户提供的参数

  跟上一篇文章提到的代码只差一些参数配置,下面来讲一下 client.chat.completions.create() 的参数。

  • 只有 model 和 messages 为必须的,其他参数可以不填。

  • model :deepseek-chat 或 deepseek-reasoner 调用 v3 或 R1 模型。
  • messages :system 、user 、assistant,上篇文章已经讲解。

  • max_tokens :1 ~ 8192,默认为 4096,限制一次请求中模型生成 completion 的最大 token 数。

输入 token 和输出 token 的总长度受模型的上下文长度的限制。例如模型支持 4096 tokens ,输入占用了 3000 tokens ,则输出最多设置:max_tokens = 1096。

  • temperature:采样温度, 0 ~ 2 。更高的值,如 0.8,会使输出更随机,而更低的值,如 0.2,会使其更加集中和确定。

官方建议更改这个值或者更改 top_p ,但是不建议同时对两者进行修改。

  • stream:false为非流式输出,上一篇文章介绍过。

  • frequency_penalty: -2.0 ~ 2.0 。如果该值为正,那么新 token 会根据其在已有文本中的出现频率受到相应的惩罚,降低模型重复相同内容的可能性。
  • presence_penalty: -2.0 ~ 2.0 。如果该值为正,那么新 token 会根据其是否已在已有文本中出现受到相应的惩罚,从而增加模型谈论新主题的可能性。
  • response_format:指定模型必须输出的格式。

设置为 { "type": "json_object" } 以启用 JSON 模式,该模式保证模型生成的消息是有效的 JSON。

  • stop:一个字符串或最多包含 16 个字符串的列表,在遇到这些词时,API 将停止生成更多的 token。
  • top_p:作为调节采样温度的替代方案,模型会考虑前 top_p 概率的 token 的结果。所以 0.1 就意味着只有包括在最高 10% 概率中的 token 会被考虑。
  • logprobs:是否返回所输出 token 的对数概率。如果为 true,则在 message 的 content 中返回每个输出 token 的对数概率。
  • top_logprob:一个介于 0 到 20 之间的整数 N,指定每个输出位置返回输出概率 top N 的 token,且返回这些 token 的对数概率。指定此参数时,logprobs 必须为 true。
  • tools:模型可能会调用的 tool 的列表。目前,仅支持 function 作为工具。使用此参数来提供以 JSON 作为输入参数的 function 列表。最多支持 128 个 function。

1.1.2 模型生成内容的参数

  回复的参数如下,上一篇文章介绍了一点:

  • id:该对话的唯一标识符。
  • created:创建聊天完成时的时间戳(以秒为单位)。
  • model:生成该 completion 的模型名。
  • object :对象的类型, 其值为 chat.completion。
  • choices:模型生成的 completion 的选择列表。

message:模型生成的 completion 消息。content:该 completion 的内容。content 在 message 中,message 在 choices 中。

1.1.3 三种不同风格的python代码

  第一种: 这种比较常见。

python 复制代码
from openai import OpenAI
client = OpenAI(api_key="sk-123456", base_url="https://api.deepseek.com")
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "You are a helpful assistant"},
        {"role": "user", "content": "Hello"},
  ],
    max_tokens=1024,
    temperature=0.7,
    stream=False
)
print(response.choices[0].message.content)

  第二种:

python 复制代码
import requests
import json

url = "https://api.deepseek.com/chat/completions"

payload = json.dumps({
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "deepseek-chat",
  "frequency_penalty": 0,
  "max_tokens": 2048,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": None,
  "stream": False,
  "stream_options": None,
  "temperature": 1,
  "top_p": 1,
  "tools": None,
  "tool_choice": "none",
  "logprobs": False,
  "top_logprobs": None
})

headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer sk-123456'
}

response = requests.request("POST", url, headers=headers, data=payload)
print(response.text)

注意:使用的网址为: https://api.deepseek.com/chat/completions ,使用 json.dumps() 传递参数

  如果只要输出内容,不要其他参数: 本人探索的,文档中没有。

python 复制代码
response_data = response.json()
content = response_data['choices'][0]['message']['content']
print(content)

即使用 response.json() 将输出先转化为 python 格式,再输出内容

  第三种:

python 复制代码
import http.client
import json

conn = http.client.HTTPSConnection("api.deepseek.com")
payload = json.dumps({
  "messages": [
    {
      "content": "You are a helpful assistant",
      "role": "system"
    },
    {
      "content": "Hi",
      "role": "user"
    }
  ],
  "model": "deepseek-chat",
  "frequency_penalty": 0,
  "max_tokens": 2048,
  "presence_penalty": 0,
  "response_format": {
    "type": "text"
  },
  "stop": None,
  "stream": False,
  "stream_options": None,
  "temperature": 1,
  "top_p": 1,
  "tools": None,
  "tool_choice": "none",
  "logprobs": False,
  "top_logprobs": None
})
headers = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Authorization': 'Bearer sk-123456'
}
conn.request("POST", "/chat/completions", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))

使用 api.deepseek.com

  只输出内容

python 复制代码
response_json = json.loads(data.decode("utf-8"))
content = response_json['choices'][0]['message']['content']
print(content)

json.loads() 函数将字节数据转换为JSON对象

  上面三种风格的输出结果跟上一篇文章代码结果一致。

1.2 总结

  本代码比较简单,即给出 system 提示:You are a helpful assistant ,user 的提问:Hi。输入到模型中,模型生成下文内容,补全对话。

  对话补全三种风格的代码要理解清楚,它们的输出都是不同风格的形式。因为其效果都是一样的,所以之后的代码中将只介绍第一种风格,简化内容,想要了解后面的两种风格,可以仔细研究本文,或者查看后续官方文档。

相关推荐
老金带你玩AI21 小时前
这几天,我都是拿手机让dot帮我干活
人工智能
7yewh1 天前
SLAM 三维空间刚体运动(2)
数据结构·人工智能·机器人·嵌入式·slam
小虎AI生活1 天前
WorkBuddy 模型选型实操:0.03 倍的 Space-Bunny 怎么用、派什么活、避什么坑
人工智能·超级个体·一人公司·青玥ai
ai小陈1 天前
GPU服务器租用存储验收:检查点写入与磁盘吞吐实战
运维·服务器·人工智能·ai·ssh·gpu算力
微三云马玮均—GEO源码系统 私有化部署1 天前
消费返物业费:消费+服务趋势的必然产物!
大数据·人工智能·物联网·区块链·生活
明月_清风1 天前
Muse 登顶 App Store 第一,SDK 直接开源:AI Agent 开始进入下一个阶段
人工智能·后端
言乐61 天前
HTML视频审核模型
python·django·virtualenv·pygame·tornado
JackSparrow4141 天前
和AI一起将全部CSDN博文迁移到个人博客站
人工智能·程序人生·ai·github·cloudflare·astro·静态博客
55873 生态系统1 天前
第 22 篇|社区聊天|55873 文明共建者的日常交流与协作界面
人工智能·区块链·55873全域文明生态体系·55873操作系统·55873社区聊天