本文适合初学者快速掌握如何通过 OpenAI SDK 调用 DeepSeek 大模型,并实现“让 AI 调用函数”这一高级功能。我们将结合 Jupyter Notebook 示例,深入浅出地讲解代码逻辑、语法结构和实际应用场景。
🌐 一、什么是 DeepSeek?
DeepSeek 是由深度求索(DeepSeek)公司推出的高性能大语言模型(LLM),支持推理、对话、代码生成等任务。它具备强大的自然语言理解与生成能力,尤其在复杂逻辑推理方面表现突出。
你可以在 api.deepseek.com 上使用其 API 接口,也可以通过开源平台如 魔搭(ModelScope) 获取相关模型进行本地部署或微调。
✅ 魔搭(ModelScope)是阿里云推出的模型开放平台,提供海量开源 AI 模型,涵盖 NLP、视觉、语音等领域,极大降低了 AI 应用门槛。
📝 二、为什么选择 Jupyter Notebook?
Jupyter Notebook(.ipynb 文件)是一种交互式编程环境,特别适合:
- 快速试验算法
- 推导公式
- 测试大模型行为
- 分步运行代码,观察每一步输出
Python 因其简洁的语法和丰富的科学计算库,成为机器学习和 AI 开发的首选语言。
🔧 三、模块化设计:清晰分离职责
现代软件开发强调 模块化,即“一个文件干一件事”。这不仅能提高代码可读性,还能增强维护性和扩展性。
from openai import OpenAI
💡 解释:
openai是 OpenAI 官方提供的 Python SDK。OpenAI()类用于创建客户端对象,用来调用大模型 API。- 尽管我们调用的是 DeepSeek 的服务,但它是兼容 OpenAI 接口标准的,因此可以无缝使用。
🤖 四、多轮对话机制:chat.completions
大模型的核心交互方式之一是 chat.completions,它支持多轮对话,保留上下文信息。
关键参数说明:
| Role | 含义 |
|---|---|
system | 设置角色身份和行为规范,通常只在第一次设置一次 |
user | 用户输入的问题 |
assistant | 模型返回的回答 |
messages = [
{"role": "system", "content": "你是一个股票分析师"},
{"role": "user", "content": "青岛啤酒的收盘价是多少?"}
]
🔄 五、教大模型“使用工具”:Tool Calling
这是本次教程的重点!
大模型本身无法实时获取网络数据(比如股价),但我们可以通过 工具调用(Tool Calling) 让它“学会”调用外部函数来完成任务。
目标场景:
用户问:“青岛啤酒的收盘价是多少?”
→ 模型判断需要查价 → 自动调用 get_closing_price() 函数 → 返回结果
✅ 六、完整示例代码解析
以下是完整的 Jupyter Notebook 示例,我们将逐步拆解每一行代码。
第一步:初始化客户端
from openai import OpenAI
client = OpenAI(
api_key="sk-efb070ea2db643ab9ccd41fa04ad0a0a",
base_url="https://api.deepseek.com/v1"
)
🔍 解析:
api_key: 你的 DeepSeek API 密钥(需注册获取)base_url: 指定请求发送到 DeepSeek 的 API 地址OpenAI()是一个类,实例化后即可调用其方法
第二步:定义工具函数
def get_closing_price(name):
if name == '青岛啤酒':
return '67.92'
else:
return '未找到该股票'
💡 说明:
- 这是一个模拟的“查询股价”的函数
- 实际应用中,这里可能是调用真实金融接口(如 Tushare、Alpha Vantage)
第三步:定义工具 JSON Schema
tools = [
{
"type": "function",
"function": {
"name": "get_closing_price",
"description": "获取指定股票的收盘价",
"parameters": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "股票名称"
}
},
"required": ["name"]
}
}
}
]
🧩 解析:
这个结构是 OpenAI 标准的 Tool Schema,告诉大模型:
- 有一个叫
get_closing_price的函数可用 - 它的作用是“获取股票收盘价”
- 输入参数是一个字符串
name(必须填写) - 输出是字符串(例如
'67.92')
⚠️ 注意:
tool_choice='auto'表示模型自己决定是否调用工具
第四步:封装消息发送函数
def send_message(messages):
response = client.chat.completions.create(
model='deepseek-reasoner',
messages=messages,
tools=tools,
tool_choice='auto'
)
return response
🔎 详解:
model='deepseek-reasoner': 使用 DeepSeek 的推理模型(专为复杂逻辑设计)messages: 对话历史tools: 提供的工具列表tool_choice='auto': 允许模型自主选择是否调用工具
第五步:发起请求并打印结果
messages = [{"role": "user", "content": "青岛啤酒的收盘价是多少?"}]
response = send_message(messages)
message = response.choices[0].message
print(message)
📤 输出示例:
{
"role": "assistant",
"tool_calls": [
{
"id": "call_abc123",
"function": {
"name": "get_closing_price",
"arguments": "{"name": "青岛啤酒"}"
}
}
]
}
✅ 模型识别出需要调用工具,自动执行
get_closing_price("青岛啤酒")
🧠 七、关键知识点总结
| 概念 | 说明 |
|---|---|
| Tool Calling | 让 LLM 主动调用函数,弥补知识滞后问题 |
| JSON Schema | 描述函数签名的标准格式,包括参数类型、描述等 |
| Auto Tool Choice | 模型自行判断是否需要调用工具 |
| Reasoner 模型 | 更擅长逻辑推理,适合复杂任务 |
| Magic Studio / ModelScope | 可下载、微调、部署开源模型 |
🚀 八、进阶方向建议
- 连接真实 API
替换get_closing_price()为调用真实的股票接口(如requests.get()) - 多个工具组合
添加get_company_info(),calculate_roi()等函数,实现更复杂的分析流程 - 流式响应处理
使用stream=True实现实时输出,提升用户体验 - 本地部署模型
在魔搭上下载deepseek-coder或deepseek-math模型,本地运行避免网络延迟
📚 九、学习资源推荐
✅ 总结
今天我们学会了:
✅ 如何用 Python + OpenAI SDK 调用 DeepSeek
✅ 如何定义并注册工具函数
✅ 如何让大模型“主动调用函数”解决现实问题
✅ 使用 Jupyter Notebook 快速实验 AI 功能
🎯 核心思想:不要试图让模型记住一切,而是教会它“怎么做事”——这就是 Agent(智能体)时代的开端!
📌 动手练习:尝试修改 get_closing_price() 支持更多股票,或者添加一个 search_news() 工具来查询新闻摘要。
如果你喜欢这篇文章,欢迎点赞收藏,关注我获取更多高质量 AI 教程!🚀