全文速览(复习专用精简版)
本文面向零编程基础的新手,完整讲解如何用 Python 调用 DeepSeek V4 Pro 大模型 API。核心结论可直接背诵复习:
-
DeepSeek V4 Pro 完全兼容 OpenAI 接口规范,使用官方
openaiPython SDK 即可调用,无需使用 Anthropic 专用库。 -
接口配置三要素:
api_key密钥、https协议、/v1版本路径,三者缺一不可。 -
消息格式铁则:必须以
user角色开头,user与assistant严格交替排列,每条消息固定包含role和content两个字段。 -
响应取值固定写法:
response.choices[0].message.content,同时可通过usage字段查看 token 消耗。 -
四大实战场景全覆盖:单词翻译函数、少样本情感分类、文本续写生成、可连续对话的命令行聊天机器人。
-
新手 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 参数错误 |
| 角色顺序 | user和assistant必须严格交替,不能连续出现相同角色 | 报参数错误,请求失败 |
| 必填字段 | 每条消息必须同时有role和content | 触发必填参数缺失报错 |
| 列表格式 | 整体是列表,内部是字典 | 语法错误,代码无法运行 |
四、响应对象结构解析
调用 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 入门的全部核心内容。新手学习时建议按顺序实操:先跑通单轮问答,再写翻译函数,接着尝试少样本和续写,最后完成聊天机器人,遇到报错直接对照第六部分的表格排查即可。