用 Python 调用 DeepSeek API:从入门到实战

用 Python 调用 DeepSeek API:从入门到实战

作为 AI 和 Python 爱好者,调用大模型 API 是实现智能应用的关键技能。DeepSeek(深度求索)是国内领先的大模型服务商,其 API 兼容 OpenAI 格式,使用 Python 的 openai 库即可快速接入。本文将手把手教你如何通过代码调用 DeepSeek 模型,并实现流式对话和多轮交互功能。


1. 环境准备与 API 密钥获取

1.1 安装 openai 库

首先确保安装最新版 openai 库:

1
pip install openai

1.2 获取 DeepSeek API Key

  1. 访问 DeepSeek 开放平台,注册账号并登录。
  2. 在控制台创建 API Key,务必首次生成时保存密钥(后续无法查看)。

1.3 配置密钥(安全推荐)

为避免代码泄露密钥,建议通过环境变量管理:

1
2
# 终端中临时设置(仅当前会话有效)
export DEEPSEEK_API_KEY="your-api-key"

或在 Python 代码中加载 .env 文件:

1
2
3
4
# 安装 python-dotenv: pip install python-dotenv
from dotenv import load_dotenv
load_dotenv()
api_key = os.getenv("DEEPSEEK_API_KEY")

2. 基础调用:实现单轮对话

2.1 初始化客户端

DeepSeek 的 base_url 需指定为 https://api.deepseek.com,模型名称使用 deepseek-chat

1
2
3
4
5
6
from openai import OpenAI

client = OpenAI(
    api_key=api_key,
    base_url="https://api.deepseek.com"  # 官方接口地址
)

2.2 发送请求并获取回复

1
2
3
4
5
6
7
8
9
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
        {"role": "system", "content": "你是一个幽默的助手"},
        {"role": "user", "content": "讲一个冷笑话"}
    ],
    stream=False  # 非流式输出
)
print(response.choices[0].message.content)

输出示例

为什么程序员总分不清万圣节和圣诞节?因为 Oct 31 == Dec 25!(八进制和十进制梗)
编者注:
在进制转换中,“Oct"代表八进制,而"Dec"代表十进制
而八进制下的"31"代表十进制下的"25”
正巧,在英语中,万圣节所在的八月缩写就是"Oct.",而圣诞节所在的十二月缩写则刚好是"Dec."
而万圣节刚好在八月31日(英文:“Oct. 31st”),圣诞节则是十二月25日(英文:“Dec. 25th”)
此处的编者指本文著作权人(Shanziyi)


3. 进阶功能:流式输出与多轮对话

3.1 流式输出(逐字显示)

启用 stream=True 可实现类似 ChatGPT 的实时响应效果:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
response = client.chat.completions.create(
    model="deepseek-chat",
    messages=messages,
    stream=True
)

full_response = []
print("Assistant: ", end="", flush=True)
for chunk in response:
    if content := chunk.choices[0].delta.content:
        print(content, end="", flush=True)  # 逐字打印
        full_response.append(content)
ai_reply = "".join(full_response)

3.2 多轮对话实现

通过维护 messages 列表记录历史对话:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
messages = [{"role": "system", "content": "你是一个百科全书助手"}]

while True:
    user_input = input("\nYou: ")
    if user_input.lower() == "exit":
        break
    
    messages.append({"role": "user", "content": user_input})
    response = client.chat.completions.create(
        model="deepseek-chat",
        messages=messages,
        stream=True
    )
    
    # 处理流式响应(代码同上)
    messages.append({"role": "assistant", "content": ai_reply})

4. 错误处理与调试

4.1 异常捕获

API 调用可能因网络或密钥问题失败,需添加异常处理:

1
2
3
4
5
6
try:
    response = client.chat.completions.create(...)
except openai.APIError as e:
    print(f"API 错误: {e.status_code} - {e.message}")
except Exception as e:
    print(f"其他错误: {str(e)}")

4.2 常见问题

  • 无响应:检查 API Key 是否正确,或尝试 base_url="https://api.deepseek.com/v1"
  • 模型切换:若需调用推理模型,可替换为 model="deepseek-reasoner"

5. 扩展应用:图形界面开发

参考网页2的 Tkinter 示例,可快速搭建带实时流式输出的 GUI 应用。核心逻辑包括:

  • 使用 threading 处理异步请求
  • 通过 ScrolledText 组件显示彩色对话历史
  • 维护消息队列实现流畅交互

结语

通过 openai 库调用 DeepSeek API,仅需数行代码即可实现智能对话功能。无论是命令行工具还是 GUI 应用,均可基于本文代码扩展。更多高级功能(如调整温度参数 temperature、设置最大生成长度 max_tokens)可参考 DeepSeek 官方文档

完整代码示例及环境配置细节,可访问参考链接:CSDN 教程脚本之家案例


作者:Shanziyi
本文属自己撰稿,禁止转载,引用时请标明出处 !
© Shanziyi 2025
本文由Shanziyi撰写,deepseek协助了撰稿
本文中所有“编者注”都由Shanziyi撰写

总访问量:
使用 Hugo 构建
主题 StackJimmy 设计