Python调用大模型(openai库)

Python调用大模型(openai库)

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

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

pip 与 PyPI#

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

timemathrandomcsvre 等是 Python 自带的标准库,不用安装;而 openairequestsnumpypandasstreamlit 等是第三方库,需要单独安装。

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

二、裸写题#

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

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

了解更多
[ 音乐 ]
封面

音乐

暂未播放

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