全文速览(复习专用精简版)

本文面向零编程基础的新手,完整讲解如何用 Python 调用 DeepSeek V4 Pro 大模型 API。核心结论可直接背诵复习:

  1. DeepSeek V4 Pro 完全兼容 OpenAI 接口规范,使用官方openai Python SDK 即可调用,无需使用 Anthropic 专用库。

  2. 接口配置三要素:api_key密钥、https协议、/v1版本路径,三者缺一不可。

  3. 消息格式铁则:必须以user角色开头,userassistant严格交替排列,每条消息固定包含rolecontent两个字段。

  4. 响应取值固定写法:response.choices[0].message.content,同时可通过usage字段查看 token 消耗。

  5. 四大实战场景全覆盖:单词翻译函数、少样本情感分类、文本续写生成、可连续对话的命令行聊天机器人。

  6. 新手 90% 的报错都来自四类问题:拼写笔误、协议 / 路径错误、消息顺序违规、输出长度限制,对照排查即可快速解决。


一、核心概念与 SDK 选型

很多新手会疑惑:调用 DeepSeek 为什么要导入openai库?这是因为 DeepSeek 官方采用了 OpenAI 兼容的接口标准,只要是支持 OpenAI 协议的 SDK 都可以直接对接,不用单独开发新的工具库。

Claude 与 DeepSeek API 核心对应表

原 Claude(Anthropic)概念

DeepSeek V4 Pro 对应写法

作用说明

from anthropic import Anthropic

from openai import OpenAI

导入官方客户端 SDK

client.messages.create()

client.chat.completions.create()

发起对话请求的方法

response.content[0].text

response.choices[0].message.content

获取模型生成的文本内容

input_tokens / output_tokens

prompt_tokens / completion_tokens

统计输入、输出的 token 消耗量

消息必须 user/assistant 交替

规则完全一致,额外支持system角色

构造对话上下文的规则


二、基础环境搭建

1. 安装依赖包

只需要两个第三方库:openai负责调用 API,python-dotenv负责安全管理密钥。

pip install openai python-dotenv

2. 配置密钥文件

在代码同级文件夹新建名为.env的文件,写入你的 API 密钥,不要加引号、不要留多余空格:

DEEPSEEK_API_KEY=你的DeepSeek API密钥

3. 初始化客户端

这是所有代码的前置步骤,初始化完成后即可复用客户端发起请求。

from dotenv import load_dotenv
from openai import OpenAI
import os

load_dotenv()
api_key = os.getenv("DEEPSEEK_API_KEY")

client = OpenAI(
    api_key=api_key,
    base_url="https://api.deepseek.com/v1"
)

环境搭建步骤汇总表

步骤序号

操作内容

关键注意事项

1

安装依赖库

确保 pip 可用,国内网络可加清华镜像源加速

2

创建.env文件

文件名必须是.env,不能是.env.txt;和代码放同一文件夹

3

初始化客户端

base_url必须带https和末尾/v1,缺一不可


三、消息格式规范

消息列表(messages)是和大模型交互的核心载体,相当于把对话历史按固定格式传给 AI。

1. 基础结构

每条消息是一个字典,必须包含两个字段:

  • role:消息角色,只能是user(用户说的话)或assistant(AI 的回复)

  • content:消息的具体文本内容

2. 单条消息示例(单轮问答)

response = client.chat.completions.create(
    model="deepseek-v4-pro",
    max_tokens=1000,
    messages=[
        {"role": "user", "content": "Dr Pepper 汽水用了哪些风味?"}
    ]
)
print(response.choices[0].message.content)

3. 多轮对话示例

要让 AI 记住上下文,就把历史对话按顺序放进列表里。

messages = [
    {"role": "user", "content": "你好!今天过得怎么样?"},
    {"role": "assistant", "content": "你好!我状态不错,谢谢关心。今天有什么可以帮你的?"},
    {"role": "user", "content": "能给我讲一个雪貂的冷知识吗?"},
]

消息格式核心规则表

规则项

要求

违规后果

起始角色

第一条消息必须是user

直接报 400 参数错误

角色顺序

userassistant必须严格交替,不能连续出现相同角色

报参数错误,请求失败

必填字段

每条消息必须同时有rolecontent

触发必填参数缺失报错

列表格式

整体是列表,内部是字典

语法错误,代码无法运行


四、响应对象结构解析

调用 API 后返回的response是一个结构化对象,除了文本内容还包含很多有用的元信息。

核心取值代码

# 获取AI生成的文本(最常用)
reply = response.choices[0].message.content

# 查看token消耗
print(response.usage)

响应字段详解表

字段路径

含义

用途

response.id

本次请求的唯一 ID

排查问题时用于定位请求

response.model

实际响应的模型名称

确认调用的模型是否正确

response.choices[0].message.content

模型生成的文本内容

核心输出,99% 的场景都用这个

response.choices[0].finish_reason

模型停止生成的原因

正常结束为stop,长度不足为length

response.usage.prompt_tokens

输入内容消耗的 token 数

计算费用、控制成本

response.usage.completion_tokens

输出内容消耗的 token 数

计算费用、判断是否被截断

response.usage.total_tokens

本次请求总消耗 token

费用统计

💡 小白记住一句话:拿回复就写response.choices[0].message.content,永远不会错。


五、实战案例 1:翻译函数

封装一个通用的翻译函数,传入单词和目标语言即可返回翻译结果,分为基础版和进阶版。

基础版(带固定句式)

def translate(word: str, target_language: str) -> str:
    response = client.chat.completions.create(
        model="deepseek-v4-pro",
        max_tokens=100,
        messages=[
            {
                "role": "user",
                "content": f'把单词"{word}"翻译成"{target_language}",按这个格式回复:The word "{word}" translated into "{target_language}" is:翻译结果'
            }
        ]
    )
    return response.choices[0].message.content

# 测试
print(translate("hello", "Chinese"))

进阶版(只输出单词,无多余内容)

def translate(word: str, target_language: str) -> str:
    response = client.chat.completions.create(
        model="deepseek-v4-pro",
        max_tokens=50,
        messages=[
            {
                "role": "user",
                "content": f'把单词"{word}"翻译为{target_language},只输出翻译后的单词,不要任何多余文字'
            }
        ]
    )
    return response.choices[0].message.content.strip()

# 测试
print(translate("chicken", "Italian"))

翻译函数版本对比表

版本

输出效果

特点

适用场景

基础版

带完整句式,如The word "hello" translated into "Chinese" is: 苹果

可读性强,符合教程格式要求

学习演示、格式化输出

进阶版

只返回纯单词,如pollo

简洁干净,可直接用于后续逻辑

程序调用、批量翻译


六、新手高频报错与避坑指南

这部分汇总了 90% 新手会遇到的错误,对照排查可快速解决问题。

常见报错排查对照表

报错类型

典型现象

根本原因

修复方案

Missing credentials

初始化客户端时报错,提示缺少密钥

没读到 API 密钥

1. 检查.env文件位置和文件名 2. 确认环境变量名和代码一致 3. 临时直接传入api_key测试

405 Method Not Allowed

发起请求时报 405 错误

base_url配置错误

1. 协议改成https,不能用http 2. 末尾必须加上/v1

NameError: name 'Ture' is not defined

聊天机器人循环报错

布尔值拼写错误

Ture改成正确的True

属性错误:没有choice属性

取回复时报错

字段名少写了s

改成choices[0](复数)

属性错误:没有contect属性

取内容时报错

单词拼写错误

改成content(正确拼写)

变量名不一致报错

追加消息时报NameError

列表名单复数混用

全程统一用messages(复数)

输出为空 / 被截断

少样本分类只输出一半

max_tokens设置太小

调大max_tokens,留足冗余空间

消息顺序报错

提示角色违规

连续出现相同角色 / 以 assistant 开头

严格遵循 user→assistant 交替规则,首条必须是 user

语法错误SyntaxError

代码直接标红无法运行

字典用分号分隔、引号冲突

1. 字典键值对用逗号分隔 2. f-string 内外引号错开


七、进阶用法

1. 文本续写

预先写好半句话放进assistant角色里,让模型接着往下生成,适合写诗、补全句子。

response = client.chat.completions.create(
    model="deepseek-v4-pro",
    max_tokens=100,
    messages=[
        {"role": "user", "content": "写一句优美的俳句"},
        {"role": "assistant", "content": "春来再花开,"}
    ]
)
print(response.choices[0].message.content)

2. 少样本提示(Few-shot)

在消息列表里放几组 “问题 - 答案” 示例,引导模型按固定格式输出,适合分类、标签提取等场景。

messages = [
    {"role": "user", "content": "我觉得AI配腌黄瓜可能有点过头了,我刚买了个腌黄瓜造型的泳池浮圈"},
    {"role": "assistant", "content": "POSITIVE"},
    {"role": "user", "content": "说真的,谁会吃腌黄瓜啊?这东西也太难吃了!"},
    {"role": "assistant", "content": "NEGATIVE"},
    {"role": "user", "content": "刚试了@PickleCo的新出辣腌黄瓜,我的味蕾都在开心跳舞!仅输出POSITIVE或NEGATIVE"}
]

response = client.chat.completions.create(
    model="deepseek-v4-pro",
    max_tokens=20,
    temperature=0,
    messages=messages
)
print(response.choices[0].message.content)

进阶技巧汇总表

技巧名称

核心作用

实现关键

最佳实践

文本续写

让模型承接指定内容继续生成

预先写入 assistant 消息

适合创作、补全、格式续写

少样本提示

约束输出格式,提升任务准确率

放入 2-3 组示例对话

搭配temperature=0可稳定输出

temperature参数

控制输出随机性

0 = 最稳定,1 = 最发散

分类、提取任务设为 0;创作类设为 0.7-1


八、实战案例 2:命令行多轮聊天机器人

最终综合实战:打造一个可以连续对话、自动记住上下文的命令行聊天机器人,输入exit即可退出。

完整代码

def chatbot():
    print("=== DeepSeek 聊天机器人 ===")
    print("输入 exit 退出对话\n")
    messages = []

    while True:
        user_input = input("你:")
        if user_input.lower() == "exit":
            print("对话结束")
            break

        # 把用户消息加入对话历史
        messages.append({"role": "user", "content": user_input})

        # 调用API获取回复
        response = client.chat.completions.create(
            model="deepseek-v4-pro",
            max_tokens=1000,
            messages=messages
        )

        reply = response.choices[0].message.content
        print(f"AI:{reply}\n")

        # 把助手回复加入历史,保留上下文
        messages.append({"role": "assistant", "content": reply})

if __name__ == "__main__":
    chatbot()

聊天机器人核心逻辑表

步骤

功能

代码逻辑

1

初始化

打印欢迎语,创建空的消息列表存储历史

2

接收用户输入

input()获取用户文字,判断是否退出

3

追加用户消息

把用户输入包装成 user 角色,加入历史列表

4

调用 API

把完整历史传给模型,获取回复

5

展示并保存回复

打印 AI 回复,同时把回复加入历史列表

6

循环往复

回到步骤 2,实现持续多轮对话


写在最后

从最简单的单轮问答,到封装函数、进阶技巧,再到完整的多轮聊天机器人,这就是 DeepSeek API 入门的全部核心内容。新手学习时建议按顺序实操:先跑通单轮问答,再写翻译函数,接着尝试少样本和续写,最后完成聊天机器人,遇到报错直接对照第六部分的表格排查即可。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐