Deepseek Api Function Calling解析(tools、tool_calls)Deepseek函數調用流程圖、Python代碼示例

文章目錄

  • Function Calling介紹
      • **核心原理**
        • 1. **動態擴展模型能力**
        • 2. **JSON結構化交互**
      • **實現步驟**(以支持Function Calling的模型為例)
        • 1. **定義可用函數**
        • 2. **模型匹配與生成**
        • 3. **開發者執行函數**
        • 4. **結果反饋給模型**
      • **DeepSeek R1的當前限制**
      • **替代方案建議**
        • 1. **自定義流程控制**
        • 2. **關注更新動態**
      • 💡 **擴展閱讀**
    • Function Calling調用流程
      • **Function Calling 核心流程**
        • 1. **用戶輸入請求**
        • 2. **模型解析意圖**
        • 3. **生成函數調用請求**
        • 4. **執行外部函數**
        • 5. **返回函數結果**
        • 6. **生成最終響應**
      • **流程圖**
      • **關鍵點說明**
        • 1. **兩次模型交互(如OpenAI)**
        • 2. **結構化參數驗證**
        • 3. **錯誤處理**
      • **參考案例(天氣查詢)**
        • 1. **用戶輸入**
        • 2. **模型返回函數調用**
        • 3. **執行天氣API查詢**
        • 4. **模型生成最終響應**
      • **擴展閱讀**
  • Function Calling Python代碼示例(以調用OpenAI模型為例)
      • 代碼
      • 代碼解析:
        • 1. **函數定義**
        • 2. **API交互流程**
        • 3. **關鍵參數說明**
      • 執行示例輸出:
      • 注意事項:
        • 1. 需替換為有效的OpenAI API密鑰(`sk-your-api-key-here`)
        • 2. GPT-3.5-turbo版本需 >= 0613 才能支持函數調用
        • 3. 實際生產環境需要:

Function Calling介紹

根據官方文檔和搜索結果,DeepSeek的 Function Calling(函數調用) 功能允許模型通過調用外部工具來增強其能力。以下是其核心原理與實現步驟:


核心原理

1. 動態擴展模型能力

通過預定義函數,模型可將用戶查詢映射到具體操作(如調用API、執行計算等),從而突破純文本生成的限制。

2. JSON結構化交互

模型不直接執行函數,而是生成包含函數名參數的JSON對象,開發者據此執行外部邏輯。


實現步驟(以支持Function Calling的模型為例)

1. 定義可用函數

開發者在API請求中聲明函數列表,包括:

  • 函數名(如 get_weather
  • 參數描述(如 {"location": "string", "unit": "celsius|fahrenheit"}
2. 模型匹配與生成

用戶輸入查詢后,模型判斷是否需要調用函數。若需要,則生成JSON對象,例如:

{"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"location\": \"北京\"}"}}]
}
3. 開發者執行函數

解析JSON并調用對應函數,獲取結果(如調用天氣API返回數據)。

4. 結果反饋給模型

將執行結果返回給模型,模型整合信息生成最終回復(如“北京今天晴天,25℃”)。


DeepSeek R1的當前限制

🔴 注意:根據官方文檔(DeepSeek API Docs),DeepSeek R1目前不支持Function Calling,且舊版模型(如 deepseek-chat)的此功能存在以下問題:

  • 可能出現循環調用(模型重復生成函數請求)
  • 返回空響應或無意義JSON
  • 開發團隊正在修復,預計下一版本改進。

替代方案建議

1. 自定義流程控制

通過Prompt Engineering引導模型輸出結構化文本,開發者手動解析后調用外部工具。
示例Prompt

若需查詢天氣,請以JSON格式回復:{"action": "weather", "location": "城市名"}
2. 關注更新動態

建議定期查閱DeepSeek GitHub倉庫或官方文檔,獲取Function Calling支持進展。


💡 擴展閱讀

  • OpenAI式Function Calling詳解: OpenAI函數調用機制
  • DeepSeek工具調用優化方向: Reddit討論

Function Calling調用流程

好的,用戶需要理解Function Calling的流程,并希望有一個流程圖來輔助理解。我之前提供的搜索結果里提到,Function Calling的基本流程包括用戶輸入、模型解析、生成函數調用請求、執行函數、返回結果和生成響應。用戶可能已經了解了一些基本步驟,但可能對具體細節或流程圖有疑問。

首先,需要確認用戶的實際需求。他們可能是在開發中使用大模型,需要集成外部工具,比如天氣API或數據庫查詢。流程圖的請求表明他們希望有一個可視化的步驟說明,可能用于教學或系統設計。

根據搜索結果,尤其是來自CSDN和知乎的鏈接,流程通常包括兩次模型調用:第一次判斷是否需要調用函數,生成請求;第二次根據函數返回的結果生成最終響應。例如,OpenAI的流程是先發送用戶輸入和可用函數列表,模型返回需要調用的函數及參數,執行后再次將結果傳給模型生成回答。

需要注意用戶提到的DeepSeek R1目前不支持Function Calling,但其他模型如GPT-4有該功能。用戶的示例可能基于通用流程,但需要明確說明不同模型的差異。

用戶可能遇到的困惑點在于如何將模型和外部系統連接,以及具體步驟間的數據傳遞。流程圖應清晰展示從用戶輸入到最終響應的閉環過程,包括模型判斷和執行函數的環節。

綜合搜索結果,可以構建一個包含以下步驟的流程圖:

  1. 用戶輸入問題。
  2. 模型解析并判斷是否需要調用函數。
  3. 生成函數調用請求(名稱和參數)。
  4. 應用程序執行函數并獲取結果。
  5. 結果返回給模型。
  6. 模型整合結果生成最終響應。

需要指出的是,部分實現可能需要兩次模型交互,如OpenAI的流程,而有些可能整合為一次。此外,函數參數的驗證和錯誤處理也是重要環節,但可能不在基礎流程中體現。

最后,確保流程圖簡潔易懂,用文字說明每個步驟的關鍵點,如模型生成結構化請求(JSON),應用程序執行外部API調用等。同時,參考提供的鏈接中的示意圖,但可能無法直接訪問圖片,需用文字描述結構。

以下是 Function Calling(函數調用) 的詳細流程及示意圖,結合大模型與外部工具的交互機制:


Function Calling 核心流程

1. 用戶輸入請求
  • 用戶提出自然語言請求(如“北京今天的天氣如何?”)。
2. 模型解析意圖
  • 大模型(如GPT-4)分析用戶意圖,判斷是否需要調用外部函數(如天氣API)。
3. 生成函數調用請求
  • 模型返回結構化請求(JSON格式),包含函數名和參數:
    {"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"location\": \"北京\"}"}}]
    }
    
4. 執行外部函數
  • 應用程序解析請求,調用對應的函數(如查詢天氣API)。
5. 返回函數結果
  • 函數執行結果(如溫度、天氣狀況)返回給模型。
6. 生成最終響應
  • 模型將結果整合為自然語言回復(如“北京今天晴天,25℃”)。

流程圖

用戶輸入│▼
大模型解析意圖│▼
是否需要調用函數? ——是→ 生成函數調用請求(JSON)│                       │否                        ▼│                    執行外部函數(如API、數據庫)▼                       │
直接生成回答              ▼│                    獲取函數結果▼                       │
返回用戶響應 ←───────────┘

關鍵點說明

1. 兩次模型交互(如OpenAI)
  • 第一次請求:發送用戶輸入 + 可用函數列表,模型返回需調用的函數及參數。
  • 第二次請求:發送函數執行結果,模型生成最終回復。
2. 結構化參數驗證
  • 應用程序需校驗參數格式(如參數類型、必填字段),避免錯誤調用。
3. 錯誤處理
  • 若函數調用失敗,模型可能重新生成請求或提示用戶修正輸入。

參考案例(天氣查詢)

1. 用戶輸入

“上海明天會下雨嗎?”

2. 模型返回函數調用
{"function": "get_weather", "arguments": {"location": "上海", "date": "2024-06-20"}}
3. 執行天氣API查詢

調用第三方API獲取天氣數據(如{"weather": "rain", "temp": 22})。

4. 模型生成最終響應

“上海明天有雨,氣溫22℃。”


擴展閱讀

  • OpenAI Function Calling 官方文檔
  • 大模型函數調用原理與實戰(CSDN)
  • LangChain 函數調用實現

通過流程圖和分步解釋,可以更清晰地理解大模型如何通過函數調用與外部系統協同工作。

Function Calling Python代碼示例(以調用OpenAI模型為例)

代碼

以下是使用OpenAI Function Calling的Python代碼示例,實現天氣查詢功能:

import openai
import json# 配置OpenAI API密鑰
openai.api_key = "sk-your-api-key-here"def get_current_weather(location, unit="celsius"):"""模擬天氣API調用(實際應替換為真實API調用)"""weather_data = {"location": location,"temperature": "25","unit": unit,"forecast": ["sunny", "windy"],}return json.dumps(weather_data)def run_conversation():# 第一步:發送用戶查詢和函數定義messages = [{"role": "user", "content": "北京今天天氣怎么樣?"}]functions = [{"name": "get_current_weather","description": "獲取指定地區的當前天氣","parameters": {"type": "object","properties": {"location": {"type": "string","description": "城市或地區名稱,例如:北京",},"unit": {"type": "string", "enum": ["celsius", "fahrenheit"],"description": "溫度單位"}},"required": ["location"],},}]# 初始API調用response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=messages,functions=functions,function_call="auto",)response_message = response.choices[0].message# 第二步:處理函數調用if hasattr(response_message, "function_call"):# 解析函數調用信息function_name = response_message["function_call"]["name"]function_args = json.loads(response_message["function_call"]["arguments"])# 調用對應函數if function_name == "get_current_weather":function_response = get_current_weather(location=function_args.get("location"),unit=function_args.get("unit", "celsius"))# 第三步:發送函數結果給模型messages.append(response_message)  # 添加助理的消息messages.append({"role": "function","name": function_name,"content": function_response,})# 獲取最終響應final_response = openai.ChatCompletion.create(model="gpt-3.5-turbo-0613",messages=messages,)return final_response.choices[0].message['content']else:return response_message['content']# 運行對話
print(run_conversation())

代碼解析:

1. 函數定義
  • get_current_weather:模擬天氣API調用(實際開發需替換為真實API)
  • 參數驗證邏輯可在此函數中添加
2. API交互流程
用戶輸入 → 模型判斷需要函數調用 → 生成函數調用請求 → 
執行函數 → 返回結果給模型 → 生成最終響應
3. 關鍵參數說明
  • functions:聲明模型可用的函數列表
  • function_call:設置為"auto"讓模型自主決策

執行示例輸出:

北京今天天氣晴朗,當前氣溫為25攝氏度,風力較大。請注意防曬。

注意事項:

1. 需替換為有效的OpenAI API密鑰(sk-your-api-key-here
2. GPT-3.5-turbo版本需 >= 0613 才能支持函數調用
3. 實際生產環境需要:
  • 添加錯誤處理(網絡錯誤/參數錯誤)
  • 實現真正的天氣API調用
  • 設置合理的temperature參數控制輸出穩定性

如果需要DeepSeek版本的實現,請關注其API文檔的更新,當前(截至2024年6月)DeepSeek R1尚未開放Function Calling支持。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/72284.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/72284.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/72284.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在2023idea中如何創建SpringBoot

目錄 一.下載和安裝 Maven 1.前往 https://maven.apache.org/download.cgi 下載最新版的 Maven 程序 2.將文件解壓到D:Program FilesApachemaven目錄 3.新建環境變量MAVEN_HOME,賦值D:Program FilesApachemaven 4.編輯環境變量Path,追加%MAVEN_HOME…

基于YOLO11深度學習的遙感視角農田檢測與分割系統【python源碼+Pyqt5界面+數據集+訓練代碼】深度學習實戰、目標分割、人工智能

《------往期經典推薦------》 一、AI應用軟件開發實戰專欄【鏈接】 項目名稱項目名稱1.【人臉識別與管理系統開發】2.【車牌識別與自動收費管理系統開發】3.【手勢識別系統開發】4.【人臉面部活體檢測系統開發】5.【圖片風格快速遷移軟件開發】6.【人臉表表情識別系統】7.【…

用冒泡排序法模擬qsort函數

目錄 1.前言 2.qsort函數的介紹 ?3.冒泡法回顧 4.模擬qsort---buble_sort 4.1 buble_sort格式 4.2 主函數,以int類型為例 4.3comp_int函數的功能設計 4.4 swap函數的功能設計 5. 總代碼概覽 1.前言 今天,小鄧兒帶大家用冒泡排序法來模擬一下qs…

全星研發項目管理APQP軟件系統:鑄造芯片集成電路產業研發體系化建設平臺

全星研發項目管理APQP軟件系統:鑄造芯片集成電路產業研發體系化建設平臺 在芯片集成電路行業,研發效率和質量直接決定了企業的核心競爭力。面對日益復雜的芯片設計、日益縮短的產品生命周期以及日益嚴格的質量要求,傳統的研發管理模式已難以滿…

《Python實戰進階》No 11:微服務架構設計與 Python 實現

第11集:微服務架構設計與 Python 實現 2025年3月3日更新了代碼和微服務運行后的系統返回信息截圖,所有代碼在 python3.11.5虛擬環境下運行通過。 微服務架構通過將復雜應用拆分為獨立部署的小型服務,顯著提升了系統的可擴展性和維護性。本集…

USRP7440-通用軟件無線電平臺

1、產品描述 USRP7440基于第三代XILINX Zynq UltraScale RFSoC架構,它將射頻ADC、DAC、ARM、FPGA等集成一體,瞬時帶寬可以達到2.5GHz,尤其適合于射頻直采應用,比如通信與雷達。 第一代RFSOC高達4GHz ? 8x 或 16x 6.554GSPS DAC…

1.2.3 使用Spring Initializr方式構建Spring Boot項目

本實戰概述介紹了如何使用Spring Initializr創建Spring Boot項目,并進行基本配置。首先,通過Spring Initializr生成項目骨架,然后創建控制器HelloController,定義處理GET請求的方法hello,返回HTML字符串。接著&#xf…

【小羊肖恩】小羊杯 Round 2 C+K

題目鏈接:https://ac.nowcoder.com/acm/contest/100672#question C.是毛毛蟲嗎? 思路: 其實很簡單,假設我們要滿足題目所給條件,那么這個毛毛蟲最壞情況下肯定是一條如下圖所示的無向圖 右端省略號為對稱圖形 &…

不謂俠--記錄

音樂《不謂俠》 衣襟上 別好了晚霞 余暉送我牽匹老馬 正路過 煙村里人家 恰似當年故里正飛花 醉過風 喝過茶 尋常巷口尋個酒家 在座皆算老友 碗底便是天涯 天涯遠 無處不為家 蓬門自我也像廣廈 論意氣 不計多或寡 占三分便敢自稱為俠 刀可捉 拳也耍 偶爾閑來…

不同規模企業如何精準選擇AI工具: DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具深度剖析與對比

本文深入探討了最近國內外主流的 DeepSeek、Grok 和 ChatGPT 三款主流 AI 工具的技術細節、性能表現、應用場景及局限性,并從技術能力、功能需求、成本預算、數據安全和合規以及服務與支持五個關鍵維度,詳細分析了不同規模企業在選擇 AI 工具時的考量因素…

Vue核心知識:KeepLive全方位分析

KeepAlive 是 Vue 組件中的一個重要功能,主要用于緩存組件,以提升性能和用戶體驗。 目錄 一、KeepAlive 基本概念二、KeepAlive 的核心原理三、KeepAlive 關鍵屬性解析1. include:指定需要緩存的組件2. exclude:指定不需要緩存的組…

【電力——tarjan割點,求連通塊】

題目 分析 這是割點的板子 代碼 #include <bits/stdc.h> using namespace std;const int N 1e410; const int M 3e410;int h[N], e[M], ne[M], idx; int dfn[N], low[N], tot; int root, ans;void add(int a, int b) // 添加一條邊a->b {e[idx] b, ne[idx] h…

【HTTP】解碼網絡通信的奧秘:HTTP,IP 地址,端口,DNS及NAT地址轉換的協同之舞

引言 每文學習一句詩&#xff1a;行一棋不足以見智&#xff0c;彈一弦不足以見悲 ——《淮南子說林訓》 譯文&#xff1a;走一個棋子&#xff0c;不足以現出智慧&#xff1b;彈一根琴弦&#xff0c;不能夠使人產生悲哀之情。 自述&#xff1a;互聯網現如今已經成為每個人都離不…

18、深拷貝與淺拷貝的區別【中高頻】

淺拷貝 淺拷貝只是拷貝了一個指針&#xff0c;并沒有開辟一塊新的內存。拷貝的指針和原來的指針 指向同一塊地址。當一個對象修改了資源&#xff0c;另一個對象也會受到影響&#xff0c;因此淺拷貝是有風險的&#xff1a;當兩個對象都銷毀 并調用析構函數時&#xff0c;會造成…

【Linux】從入門到精通:Make與Makefile完全指南

歡迎來到 CILMY23 的博客 &#x1f3c6;本篇主題為&#xff1a;從入門到精通&#xff1a;Make與Makefile完全指南 &#x1f3c6;個人主頁&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列專欄&#xff1a;C | C語言 | Linux | Python | 數據結構和算法 | 算法專題 &#x1…

利用PyQt簡單的實現一個機器人的關節JOG界面

在上一篇文章中如何在Python用Plot畫出一個簡單的機器人模型&#xff0c;我們介紹了如何在Python中畫出一個簡單的機器人3D模型&#xff0c;但是有的時候我們需要通過界面去控制機器人每一個軸的轉動&#xff0c;并實時的顯示出當前機器人的關節位置和末端笛卡爾位姿。 那么要實…

iOS 使用消息轉發機制實現多代理功能

在iOS開發中&#xff0c;我們有時候會用到多代理功能&#xff0c;比如我們列表的埋點事件&#xff0c;需要我們在列表的某個特定的時機進行埋點上報&#xff0c;我們當然可以用最常見的做法&#xff0c;就是設置代理實現代理方法&#xff0c;然后在對應的代理方法里面進行上報&…

XGBoost和LightGBM機器學習算法對比及實戰

文章目錄 1. XGBoost 原理核心思想關鍵技術點2. LightGBM 原理核心思想關鍵技術點3. XGBoost vs LightGBM 對比4. 適用場景選擇5. 總結1. 數據準備2. XGBoost 示例安裝庫代碼實現3. LightGBM 示例安裝庫代碼實現4. 關鍵參數對比5. 注意事項6. 輸出示例XGBoost 和 LightGBM 是兩…

局域網自動識別機器名和MAC并生成文件的命令

更新版本&#xff1a;添加了MAC 地址 確定了設備唯一性 V1.1 局域網自動識別機器名和MAC并生成文件的批處理命令 echo off setlocal enabledelayedexpansionREM 設置輸出文件 set outputFilenetwork_info.txtREM 清空或創建輸出文件 echo Scanning network from 192.168.20.1…

基于Python+Vue開發的體育用品商城管理系統源碼+開發文檔+課程作業

項目簡介 該項目是基于PythonVue開發的體育用品商城管理系統&#xff08;前后端分離&#xff09;&#xff0c;這是一項為大學生課程設計作業而開發的項目。該系統旨在幫助大學生學習并掌握Python編程技能&#xff0c;同時鍛煉他們的項目設計與開發能力。通過學習基于Python的體…