学习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"))
只输出内容
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。输入到模型中,模型生成下文内容,补全对话。
对话补全三种风格的代码要理解清楚,它们的输出都是不同风格的形式。因为其效果都是一样的,所以之后的代码中将只介绍第一种风格,简化内容,想要了解后面的两种风格,可以仔细研究本文,或者查看后续官方文档。