🚀 使用 DeepSeek 实现大模型工具调用:从零开始构建智能问答系统

113 阅读5分钟

本文适合初学者快速掌握如何通过 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,告诉大模型:

  1. 有一个叫 get_closing_price 的函数可用
  2. 它的作用是“获取股票收盘价”
  3. 输入参数是一个字符串 name(必须填写)
  4. 输出是字符串(例如 '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可下载、微调、部署开源模型

🚀 八、进阶方向建议

  1. 连接真实 API
    替换 get_closing_price() 为调用真实的股票接口(如 requests.get()
  2. 多个工具组合
    添加 get_company_info(), calculate_roi() 等函数,实现更复杂的分析流程
  3. 流式响应处理
    使用 stream=True 实现实时输出,提升用户体验
  4. 本地部署模型
    在魔搭上下载 deepseek-coderdeepseek-math 模型,本地运行避免网络延迟

📚 九、学习资源推荐


✅ 总结

今天我们学会了:

✅ 如何用 Python + OpenAI SDK 调用 DeepSeek
✅ 如何定义并注册工具函数
✅ 如何让大模型“主动调用函数”解决现实问题
✅ 使用 Jupyter Notebook 快速实验 AI 功能

🎯 核心思想:不要试图让模型记住一切,而是教会它“怎么做事”——这就是 Agent(智能体)时代的开端!


📌 动手练习:尝试修改 get_closing_price() 支持更多股票,或者添加一个 search_news() 工具来查询新闻摘要。

如果你喜欢这篇文章,欢迎点赞收藏,关注我获取更多高质量 AI 教程!🚀