Python 调用大模型(OpenAI 库)

Python 调用大模型(OpenAI 库)

2026年9月18日·#编程学习/python学习笔记Python/DeepSeek·1402 字 7 分钟
浏览量加载中...
AI 摘要- DeepSeek

用 pip 安装 openai 库并调用 DeepSeek:客户端创建、请求参数、返回值解析的完整流程

封面图
Python 调用大模型(OpenAI 库) - 封面图

pip 与 PyPI#

名称作用
PyPI全称为 Python Package Index,是由 Python 官方和社区共同维护的 Python 第三方软件包的官方仓库
pipPython 官方提供的 Python 包的管理工具,提供对 Python 包的查找、下载、安装、卸载等功能

time、math、random、csv、re 等是 Python 自带的标准库,不用安装;而 openai、requests、numpy、pandas、streamlit 等是第三方库,需要单独安装。

常用 pip 命令#

操作命令
安装软件包(最新版本)pip install openai
安装软件包(指定版本)pip install openai==2.13.0
卸载软件包pip uninstall openai
列出已安装的包pip list
查看包详情pip show openai
Warning

指定版本必须用双等号 ==。写成单个 = 会直接报错:ERROR: Invalid requirement: 'openai=2.13.0' ... Hint: = is not a valid operator. Did you mean == ?(课程 PPT 上写的是单等号,是笔误,别照着抄)。

为什么调用 DeepSeek 却安装 openai#

DeepSeek 的 API 兼容 OpenAI 的接口格式,所以可以直接用 openai 这个第三方库来调用,只需要把 base_url 改成 DeepSeek 的地址:

参数值
base_urlhttps://api.deepseek.com
modeldeepseek-chat(非思考模式)/ deepseek-reasoner(思考模式)
api_key在 DeepSeek 开放平台创建的 API Key

官方文档”首次调用 API”页给出的就是这三个值:

DeepSeek 官方文档-首次调用 API

Note

官方文档说明:出于与 OpenAI 兼容考虑,base_url 也可以设置成 https://api.deepseek.com/v1 来使用,但此处的 v1 与模型版本无关。

完整调用示例#

import os
from openai import OpenAI
# 创建与AI大模型交互的客户端对象 (DEEPSEEK_API_KEY 环境变量的名字, 值就是DeepSeek的API_KEY的)
client = OpenAI(api_key=os.environ.get('DEEPSEEK_API_KEY'), base_url="https://api.deepseek.com")
# 与AI大模型进行交互(参数)
response = client.chat.completions.create(
model="deepseek-chat",
messages=[
{"role": "system", "content": "你是一名非常可爱的AI助理, 你的名字叫小甜甜, 请你使用温柔可爱的语气回答用户的问题"},
{"role": "user", "content": "你是谁, 你能帮我做什么?"},
],
stream=False
)
# 输出大模型返回的结果
print(response.choices[0].message.content)

逐段理解#

代码说明
os.environ.get('DEEPSEEK_API_KEY')从环境变量读 API Key,避免把密钥写死在代码里
OpenAI(api_key=..., base_url=...)创建客户端对象,base_url 决定请求发给谁
client.chat.completions.create(...)发起一次对话请求(对应 HTTP POST /chat/completions)
stream=False非流式:一次性拿到完整回答
response.choices[0].message.content取出模型回复的文本。choices 是列表,取第一个候选,再取 message.content
Tip

环境变量的设置方式(Windows PowerShell):$env:DEEPSEEK_API_KEY="sk-xxxx";CMD:set DEEPSEEK_API_KEY=sk-xxxx。在 PyCharm 里也可以直接配置到运行配置的 Environment variables 中。

Warning

调用可能失败(网络断开、余额不足、Key 失效)。写正式程序时建议用 try...except 包住,例如 except Exception as e: print("调用失败:", e),避免程序直接崩溃。

下一步#

想解决看
让回复逐字蹦出来(打字机效果)实战-AI智能伴侣-流式输出
让 AI 记住之前的对话实战-AI智能伴侣-会话记忆
让 AI 按指定身份和风格回答提示词工程

相关#

练习题#

一、知识回顾(读完直接做下面的实践题)#

  1. Python 第三方软件包的官方仓库叫 PyPI,包管理工具叫 pip
  2. 安装指定版本的正确写法:pip install openai==2.13.0(双等号,单个 = 会报错)
  3. 卸载:pip uninstall openai;列出已安装:pip list;查看详情:pip show openai
  4. DeepSeek 的 API 兼容 OpenAI 的接口格式,所以可以直接用 openai 这个库调用
  5. 创建客户端:client = OpenAI(api_key=os.environ.get("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
  6. 发起对话请求:client.chat.completions.create(model="deepseek-chat", messages=[...], stream=False)
  7. 非流式取回复文本:response.choices[0].message.content
  8. 用环境变量存 API Key 是为了避免把密钥写死在代码里(泄露)

二、裸写题#

  • 2-1 最小调用程序 写一个程序:从环境变量读 API Key,向 deepseek-chat 提一个问题,把回复打印出来。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:先建”打电话的客户端”,再用它发消息,最后从返回结果里挖出文本 二级 · 方法:OpenAI(...) / client.chat.completions.create(...) / response.choices[0].message.content 三级 · 骨架:client = OpenAI(api_key=os.environ.get("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")

    参考答案(做完再点开)
    import os
    from openai import OpenAI
    client = OpenAI(api_key=os.environ.get("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
    response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "你是谁, 你能帮我做什么?"}],
    stream=False,
    )
    print(response.choices[0].message.content)
  • 2-2 流式输出 把上面的调用改成流式,把回复逐段打印到控制台(不是一次性打印)。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:让接口一段一段给,而不是等全部生成完 二级 · 方法:stream=True + for chunk in response: 三级 · 骨架:if chunk.choices[0].____.content is not None:

    参考答案(做完再点开)
    import os
    from openai import OpenAI
    client = OpenAI(api_key=os.environ.get("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
    response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[{"role": "user", "content": "用一句话介绍 Python"}],
    stream=True,
    )
    for chunk in response:
    if chunk.choices[0].delta.content is not None:
    print(chunk.choices[0].delta.content, end="", flush=True)
    print()
  • 2-3 设定 AI 的身份 给 AI 设定身份”你是一名非常可爱的AI助理,名字叫小甜甜”,再问”你是谁”,对比不设身份时的回答有什么不同。

    提示(先自己想,实在想不出再点开)

    一级 · 思路:身份写在 messages 的第一条,角色不是 user 二级 · 方法:{"role": "system", "content": "..."} 三级 · 骨架:messages=[{"role": "____", "content": 身份}, {"role": "user", "content": "你是谁"}]

    参考答案(做完再点开)
    import os
    from openai import OpenAI
    client = OpenAI(api_key=os.environ.get("DEEPSEEK_API_KEY"), base_url="https://api.deepseek.com")
    system_prompt = "你是一名非常可爱的AI助理, 你的名字叫小甜甜, 请你使用温柔可爱的语气回答用户的问题"
    response = client.chat.completions.create(
    model="deepseek-chat",
    messages=[
    {"role": "system", "content": system_prompt},
    {"role": "user", "content": "你是谁"},
    ],
    stream=False,
    )
    print(response.choices[0].message.content)
    # 对比实验:把 system 那条删掉再跑一次,回复就变成通用的助手口吻

评论区

[ 标签 ]
# AI37# AI 编程2# AI工具1# AI绘图1# AI辅助开发2# Ajax7# Apifox1# AstrBot3# Astro2# CC Switch1# CDN2# Claude Code1# claudecode2# ClaudeCode1# Cloudflare2# CloudFlare2# CloudFlare-ImgBed3# coc4# CSS10# DeepSeek6# deepseek2# DELETE1# Docker5# EdgeOne3# Gist1# git1# GitHub1# hexo-circle-of-friends1# HTML9# HTTP10# ImageManager1# Java23# java13# JavaScript11# JavaWeb113# JDBC7# JSON2# JUnit1# LangChain25# Linux4# Logback1# Maven17# Muse Spark1# Mybatis1# MyBatis18# MySQL45# MySql1# NapCat1# Node.js1# obsidian2# Obsidian5# OpenCode4# ORM1# PathVariable1# PicGo1# PyCharm1# Python70# RequestBody1# RequestMapping1# RESTful风格1# skills1# Slf4j1# SpringBoot37# SpringMVC5# SQL2# Streamlit5# Svelte2# TailwindCSS1# Telegram3# Tlias2# Vercel1# vscode2# Vue20# Waline3# Web3# WebDAV1# Web基础6# Web开发6# WinSCP1# YAML1# 三层架构1# 中二宣言1# 书籍1# 使用文档10# 写作1# 函数2# 刷步数1# 前端52# 动态1# 动漫1# 包1# 单词2# 博客8# 博客工作流1# 博客开发2# 参数接收1# 友链1# 反思2# 后端48# 图床6# 地图1# 备份2# 大模型1# 奇思妙想1# 存储1# 学习方法6# 学校1# 宝塔面板3# 宝宝10# 实战4# 对象1# 导航栏1# 工具2# 布局2# 开发1# 开发工具1# 开发规范1# 开心1# 异常处理1# 影视2# 微信1# 性能优化2# 总结1# 想法15# 感受1# 感悟11# 指南1# 提示词工程2# 插件5# 故障排除1# 效率工具2# 教程10# 数据分析9# 数据库27# 数据结构1# 文件操作2# 斩神1# 日常95# 日志框架1# 朋友圈1# 朱元璋1# 模块1# 模板1# 正则表达式2# 测试3# 游戏2# 爬虫7# 生活迁移1# 电影2# 电脑1# 碎碎念1# 视觉识别1# 类1# 类型注解1# 网络基础2# 网络教室1# 羊毛2# 脚本2# 脚本工具1# 自动化2# 蓝奏云1# 表单1# 订阅推荐2# 记录2# 评论系统1# 词根1# 词缀1# 说说1# 足迹1# 跑步2# 路径参数1# 转载2# 运动1# 部署11# 部落冲突1# 配置1# 随机图1# 面向对象5# 音乐3# 音标1# 项目实战11# 饮食1# 驼峰命名1# 高德地图1
[ 公告 ]

如果你喜欢,那么欢迎来到我的世界!

了解更多
[ 音乐 ]
封面

音乐

暂未播放

0:000:00
暂无歌词
找不到相关结果。
[ contents ]
[ 全部文章 ]