Python实现DeepSeek API调用指南

1 获取API

获得deepseek开放平台的API https://platform.deepseek.com/api_keys

点击创建API key

2 调用方法

方法一:采用openai的调用方法

pip install openai

需要openai 的包
调用的代码框架

from openai import OpenAI
import os

client=OpenAI(
    api_key='自己的API key',
    base_url='https://api.deepseek.com'
)

response = client.chat.completions.create(
    messages=[
        {'role':'system','content':'你是一个历史的专家'},
        {'role':'user','content':'李世民为何攻打隋朝?'}
    ],
    model='deepseek-chat',
    max_tokens=1024,
    temperature=0.7,
    stream=False
)

print(response.choices[0].message.content)

output:李世民攻打隋朝的原因主要是隋朝末年的政治腐败和社会动荡。隋炀帝杨广的暴政导致了民不聊生,农民起义频繁爆发,社会秩序严重混乱。李世民作为唐朝的开国皇帝李渊的次子,看到了隋朝的衰败和民众的不满,决定起兵反抗隋朝的统治。他联合其他反隋势力,最终推翻了隋朝,建立了唐朝。李世民的行动不仅是为了推翻暴政,也是为了恢复社会秩序和民众的福祉,这为他后来成为一代明君奠定了基础。

方法二:采用类似爬虫的方法

使用requests包来调用,类似于爬虫的方法

# 1)设置URL和API key

url="https://api.deepseek.com"
API_KEY="自己的API key"

# 2)设置请求头
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {API_KEY}"
}

#3)构建请求体
req = json.dumps({
    "messages":[
         {'role':'system','content':'你是一个历史的专家'},
        {'role':'user','content':"李世民为何攻打隋朝?"}
    ],
     
    "model": "deepseek-chat",
    "temperature": 0.7,
    "max_tokens": 1024,
    "top_p": 1,
    "frequency_penalty": 0,
    "presence_penalty": 0,
    "response_format": {
        "type": "text"
    },
    "stream": False,
    "strem_options":None,
    "stop":["\n\n"],
    "top_p":1,
    "tools":None,
    "tool_choice":None,
    "logprobs":None,
    "top_logprobs":None
})

# 4) 发送请求并处理响应
response=requests.request("POST",f"{url}/chat/completions",headers=headers,data=req)
answer=response.json()["choices"][0]["message"]["content"] 
print(answer)

2)中的请求头参数

  • Content-Type: 请求的内容类型为JSON格式的数据
  • Authorization:使用Bearer token进行身份验证,将API嵌入到请求头当中
  • 3)中构建了请求体,将其转换成JSON格式,其字段的含义:

  • messages:包含历史对话和当前用户输入的信息,系统消息(你是一个历史的专家)和用户消息(李世民为何攻打隋朝?),有不同的角色标志

  • model:指定的模型名称,deepseek-chat就是其中的一个模型

  • temperature: 控制生成内容的随机性。值越大,生成内容越随机;值越小,生成内容越确定。取值范围为 0 到 2。默认值为 1。如果需要更确定的回答,可以设置为 0.7;如果需要更多创意,可以设置为 1.2。

  • max_tokens:限制生成文本的最大长度,控制生成文本的最大长度(以 token 为单位)。1 个 token 大约等于 1 个英文单词或 2 个中文字符。根据需求调整。如果需要长文本,可以设置为 4096;如果只需要简短回答,可以设置为 100 到 500。

  • top_p:控制生成内容的多样性。top_p 是一种采样策略,值越小,生成内容越集中;值越大,生成内容越多样。取值范围为 0 到 1。默认值为 1。如果需要更集中的回答,可以设置为 0.9。

  • frequency_penalty:控制重复内容的惩罚力度,值越大模型越倾向于生成不重复的内容,取值范围-2.0到2.0,默认值为0,适用于大多数场景,如需减少重复,可以设置为 0.5 到 1.0

  • presence_penalty:控制生成内容中新主题的引入。值越大,模型越倾向于引入新主题。取值范围为 -2.0 到 2.0。默认值为 0,适用于大多数场景。如果需要更多新主题,可以设置为 0.5 到 1.0。

  • ”response_format“: {“type”: “text”}:指定返回内容的格式。type 可以是 text 或 json,分别表示返回纯文本或 JSON 格式的数据。默认值为 text,适用于大多数场景。如果需要结构化数据,可以设置为 json。

  • stream:是否启用流式传输。如果设置为 True,API 会以流式方式返回数据,适用于需要实时显示生成内容的场景。默认值为 False。如果需要实时显示,可以设置为 True。

  • stop:定义停止生成文本的条件。可以是一个字符串或字符串列表。当生成的文本包含这些字符串时,停止生成。默认值为 None,表示不设置停止条件。如果需要控制生成长度,可以设置为 [“\n”]。

  • tools:指定使用的工具或插件。DeepSeek 可能支持一些外部工具或插件,可以通过这个字段指定。默认值为 None。如果有特殊需求,可以参考官方文档。

  • tool_choice:指定是否强制使用工具。如果设置为 “auto”,模型会自动选择是否使用工具。默认值为 “none”。

  • logprobs:是否返回生成内容的概率信息。如果设置为 True,API 会返回每个 token 的概率。默认值为 False。

  • top_logprobs: 返回概率最高的 token 数量。如果 logprobs 为 True,可以通过这个字段指定返回多少个概率最高的 token。默认值为 None。如果需要详细分析,可以设置为 3 到 5。
    4)中发送到http POST请求deepseek API,并处理返回响应

  • 3 简单的多轮对话

    多轮对话相当于在单轮对话的基础上,将之前几轮的对话都作为当前轮的message输入
    例如,针对上述的对话

    第一轮:
    from openai import OpenAI
    import os
    
    client=OpenAI(
        api_key='自己的API key',
        base_url='https://api.deepseek.com'
    )
    messages=[
            {'role':'system','content':'你是一个历史的专家'},
            {'role':'user','content':'李世民为何攻打隋朝?'}
        ]
    
    response = client.chat.completions.create(
        model='deepseek-chat',
        messages=messages,
        max_tokens=1024,
        temperature=0.7,
        stream=False
    )
    
    answer = response.choices[0].message
    print(f"Message Round1:{messages}")
    
    第二轮:

    将第一轮的answer作为第二轮的message输入到模型当中

    messages.append(answer)
    messages2= {'role':'user','content':'打赢了没有?'}
    messages.append(messages2)
    
    response = client.chat.completions.create(
        model='deepseek-chat',
        messages=messages,
        max_tokens=1024,
        temperature=0.7,
        stream=False
    )
    answer2 = response.choices[0].message
    print(f"Message Round2:{messages}")
    

    多轮对话依次类推,可以写个循环来设定问题轮次。

    作者:garfield_sun06

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python实现DeepSeek API调用指南

    发表回复