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 为必须的,其他参数可以不填。

  • modeldeepseek-chatdeepseek-reasoner 调用 v3 或 R1 模型。
  • messagessystemuserassistant,上篇文章已经讲解。

  • 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。输入到模型中,模型生成下文内容,补全对话。

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

相关推荐
猿界零零七20 分钟前
执行paddle.to_tensor得到全为0
python·paddle
liuyunshengsir29 分钟前
AI Agent 实战:搭建个人在线旅游助手
人工智能·旅游
Shawn_Shawn29 分钟前
大模型微调介绍
人工智能
TiAmo zhang32 分钟前
DeepSeek-R1 模型现已在亚马逊云科技上提供
人工智能·云计算·aws
liruiqiang0533 分钟前
循环神经网络 - 简单循环网络
人工智能·rnn·深度学习·神经网络·机器学习
Erica_zhase1 小时前
GPT-4o推出的原生图像生成功能升级后有点东西!
人工智能
青花瓷1 小时前
智谱大模型(ChatGLM3)PyCharm的调试指南
人工智能·python·大模型·智谱大模型
说私域1 小时前
基于开源AI大模型与S2B2C模式的线下服务型门店增长策略研究——以AI智能名片与小程序源码技术为核心
大数据·人工智能·小程序·开源
独好紫罗兰1 小时前
洛谷题单2-P5715 【深基3.例8】三位数排序-python-流程图重构
开发语言·python·算法
V_HY147621 小时前
AI碰一碰发视频获客工具,系统开发逻辑详细解析
大数据·人工智能·新媒体运营·流量运营