Function calling的過程

文章目錄

    • 逐段講清 **LLM Function Calling(函數調用)** 的典型鏈路。
    • 1. 角色與概念 | Actors & Concepts
    • 2. 全流程時序 | End-to-End Sequence
    • 3. 關鍵細節 | Key Implementation Notes
    • 4. 最小可用示例(偽代碼) | Minimal Example (Pseudo-Python)
    • 5. 常見坑 / FAQ
      • TL;DR

逐段講清 LLM Function Calling(函數調用) 的典型鏈路。

1. 角色與概念 | Actors & Concepts

ZH

  • 開發者 (Developer):用 JSON-Schema 描述可調用函數。
  • 用戶 (User):提出自然語言請求。
  • 模型 (LLM):在推理時決定是否調用函數、選哪一個、填什么參數。
  • 執行器 (Caller / Tool Runtime):真正跑代碼或訪問外部 API,把結果回給模型。

EN

  • Developer supplies JSON-Schema definitions of callable functions.
  • User sends a request in natural language.
  • LLM decides whether, and how, to call a function.
  • Caller / Tool Runtime executes the function and returns results to the model.

2. 全流程時序 | End-to-End Sequence

#步驟 (ZH)Step (EN)
1注冊函數:開發者在 functions 字段傳入 JSON-Schema,示例:
{"name":"weather","parameters":{"type":"object","properties":{"location":{"type":"string"}}}}
Register functions via the functions array in the API call, giving JSON-Schema for each.
2輸入消息messages=[{"role":"user","content":"今天天氣如何?"}]User message is sent in messages.
3模型推理:LLM 讀取系統+用戶信息,若判斷需要函數→輸出 role:"assistant", "name":"weather", "arguments":{...}Model reasoning: If it decides a function is needed, it emits a tool call with role:"assistant" and name, arguments.
4執行器調用:客戶端檢測到 name 字段→調用本地或遠程函數→得到返回值,如 {"temp":25}Caller executes detected function, obtains result JSON.
5結果回注:把結果作為 role:"function", "name":"weather", "content":"{\"temp\":25}" 再塞進 messagesInject result back as a function role message so the model can see it.
6模型二次生成:LLM 看到函數輸出后,再生成最終自然語言回答。Second pass: model crafts the final user-visible response, informed by result.

從開發者視角看,就是 “定義 → 監聽 → 調用 → 回注” 四件事。
From the dev perspective: define → watch → call → inject.


3. 關鍵細節 | Key Implementation Notes

  1. JSON-Schema 精度

    • 字段類型、必選/可選決定模型填參質量。盡量用 enum, minimum, pattern 等約束減少幻覺。
    • Use rich JSON-Schema constraints (enum, minimum, pattern) to steer the model toward valid args.
  2. 多輪調用

    • 模型可串聯多次函數:例如先 search_flightsbook_flight。保持每輪都把結果作為 function role 回注即可。
    • Chained calls work: keep injecting each result back as a function message.
  3. 流式 (Streaming)

    • 在 OpenAI 流接口(stream=true)里,tool_calls δ塊先到,客戶端可即時觸發執行。
    • With streaming, tool-call deltas arrive early, enabling near-real-time actions.
  4. 錯誤處理

    • 若執行失敗,把錯誤描述同樣作為 function 消息交給模型,讓它決定重試/解釋。
    • Return errors as function role messages so the model can handle retries or apologies.
  5. 安全與權限

    • 在執行器側校驗參數,避免模型注入惡意 shell 字符串。
    • Validate args server-side; the JSON schema itself is not a security boundary.

4. 最小可用示例(偽代碼) | Minimal Example (Pseudo-Python)

# 1. define schema
functions = [{"name": "weather","description": "Get current weather","parameters": {"type": "object","properties": {"location": {"type": "string"}},"required": ["location"]}
}]# 2. first API call
messages = [{"role":"user","content":"幫我查一下北京天氣"}]
resp = openai.ChatCompletion.create(model="gpt-4o",messages=messages,functions=functions)# 3. if resp.choices[0].finish_reason == "tool_call":
tool_call = resp.choices[0].message
args = json.loads(tool_call["arguments"])
result = get_weather(args["location"])# 4. feed back
messages += [tool_call,{"role":"function","name":"weather","content":json.dumps(result)}
]
final = openai.ChatCompletion.create(model="gpt-4o",messages=messages)
print(final.choices[0].message["content"])

5. 常見坑 / FAQ

問題處理建議
模型拒絕填參數檢查 system prompt 是否允許工具;確保 schema 名稱易懂;給示例調用。
參數格式錯位使用 json.loads() 校驗;在 schema 里加 format, pattern
連續調用失序每輪都把 完整歷史+最新函數結果發回;保持 deterministic。

TL;DR

  • Function Calling = LLM decides + runtime executes + LLM finishes
  • 只需掌握 JSON-Schema 定義、工具消息注入、循環兩輪,即可把“智能體”接入任意后端邏輯。

Master the pattern once and you can wire your Llama/GPT/Claude agent to databases, SaaS APIs, or even a coffee machine.

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

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

相關文章

GlobalExceptionHandler 自定義異常類 + 處理validation的異常

在 Spring Boot 項目中,?自定義異常通常用于處理特定的業務邏輯錯誤,并結合全局異常處理器(ControllerAdvice)統一返回結構化的錯誤信息。 一.全局異常處理器: 1. 自定義異常類? 定義一個繼承自 RuntimeExceptio…

軟件測試過程中如何定位BUG

在軟件測試過程中,定位BUG是確保軟件質量的關鍵環節。有效的BUG定位不僅能幫助開發人員快速修復問題,還能提升整個軟件項目的效率。以下是軟件測試中定位BUG的系統性方法和策略: 一、復現BUG 步驟: 收集信息:記錄BUG…

如何優化Elasticsearch的搜索性能?

優化 Elasticsearch 的搜索性能需要從索引設計、查詢優化、硬件配置和集群調優等多方面入手。以下是系統化的優化策略和實操建議: 一、索引設計優化 1. 合理設置分片數 分片大小:單個分片建議 10-50GB(超過50GB會影響查詢性能)。分片數量: 總分片數 ≤ 節點數 1000(避免…

臺式電腦CPU天梯圖_2025年臺式電腦CPU天梯圖

CPU的選擇絕對是重中之重,它關乎了一臺電腦性能好壞。相信不少用戶,在挑選CPU的時候不知道誰強誰弱,尤其是intel和AMD兩款CPU之間。下面通過2025年臺式電腦CPU天梯圖來了解下這兩款cpu. 2025年臺式電腦CPU天梯圖 2025年臺式電腦CPU天梯圖包含了老舊型號以及12代、13代、14代…

HarmonyOS_ArkTs_API(1)

HarmonyOS_ArkTs_API(1) 概述 此API服務模塊是獨自開發的應用程序的核心骨架,提供了鴻蒙OS ArkTS客戶端組件和Java Spring Boot后端之間的強大通信接口。該模塊采用清晰的架構方法處理所有HTTP請求、響應解析和錯誤處理,確保系統各部分間通信的一致性和…

matlab雷達定位仿真

一、邊掃描邊跟蹤雷達仿真 邊掃描邊跟蹤(BISTAR)雷達仿真是一種實時雷達信號處理的技術,用于模擬雷達系統的操作過程,特別是那些具備連續掃描能力的雷達。它的基本原理和流程可以分為以下幾個步驟: (1&…

互斥鎖、自旋鎖、讀寫鎖、悲觀鎖、樂觀鎖的應用場景

一:并發 1.1MySQL并發事務訪問相同記錄 (1)讀-讀 不影響 (2)寫-寫 寫的數據需要一個一個來,排隊執行 (3)讀-寫 兩次讀…

KEYSIGHT N9320B是德科技N9320B頻譜分析儀

KEYSIGHT N9320B是德科技N9320B頻譜分析儀 附加功能&#xff1a; 頻率范圍&#xff1a;9 kHz 至 3 GHz 分辨率帶寬&#xff1a;10 Hz 至 1 MHz DANL&#xff1a;-130 dBm&#xff0c;-148 dBm&#xff0c;帶可選前置放大器 整體幅度精度&#xff1a;<1.5 dB 最小非零掃…

零基礎開始的網工之路第十四天------Linux程序管理

目錄 一、Linux程序與進程 1、程序,進程,線程的概念 2、程序和進程的區別 3、進程和線程的區別 二、Linux進程基礎(生命周期) 1、進程生命周期 2、父子進程的關系 三、程序管理 1、常見的軟件包類型 四、Linux操作系統啟動流程詳解 1、概述 2、啟動流程核心階段 1…

群輝(synology)NAS老機器連接出現網頁端可以進入,但是本地訪問輸入一樣的賬號密碼是出現錯誤時解決方案

群輝&#xff08;synology&#xff09;NAS老機器連接出現網頁端可以進入&#xff0c;但是本地訪問輸入一樣的賬號密碼是出現錯誤時解決方案 老機器 裝的win7 系統 登入后端網頁端的時候正常&#xff0c;但是本地訪問登入時輸入登入網頁端一樣的密碼時候出現問題解決方案 1.登…

單例模式的隱秘危機

引言 單例模式作為設計模式中的基石&#xff0c;廣泛應用于配置管理、線程池、緩存系統等關鍵場景。然而&#xff0c;許多開發者誤以為“私有構造函數”足以保障其唯一性&#xff0c;卻忽視了反射機制、對象克隆、序列化反序列化這三把“隱形利刃”——它們能繞過常規防御&…

DMBOK對比知識點對比(3)

1.數據倉庫建設方法(Inmon、Kimball) 數據倉庫建設方法(Inmon、Kimball)P293方法

Python+VR:如何讓虛擬世界更懂你?——用戶行為分析的實踐

友友們好! 我是Echo_Wish,我的的新專欄《Python進階》以及《Python!實戰!》正式啟動啦!這是專為那些渴望提升Python技能的朋友們量身打造的專欄,無論你是已經有一定基礎的開發者,還是希望深入挖掘Python潛力的愛好者,這里都將是你不可錯過的寶藏。 在這個專欄中,你將會…

游戲引擎學習第311天:支持手動排序

倉庫: https://gitee.com/mrxiao_com/2d_game_7(已滿) 新倉庫: https://gitee.com/mrxiao_com/2d_game_8 回顧并為今天的內容定下基調 我們接下來要繼續完成之前開始的工作&#xff0c;上周五開始的部分內容&#xff0c;雖然當時對最終效果還不太確定&#xff0c;但現在主要任…

數據結構第2章緒論 (竟成)

第 2 章 緒論 本章主要介紹數據結構相關的一些基本概念&#xff0c;是后續章節的基礎。我們也將 408 考試大綱中&#xff0c;關于數據結構部分的考查目標羅列在這里&#xff0c;供各位考生參考&#xff1a; 1.掌握數據結構的基本概念、基本原理和基本方法。 2.掌握數據的邏輯結…

spring boot 攔截器HandlerInterceptor 不生效的原因排查

public class UserInterceptor implements HandlerInterceptor項目添加一個攔截器&#xff0c;發現未生效 1、排查攔截本身是否注入了springbean 容器 Slf4j Component public class LoginInterceptor implements HandlerInterceptor {2、排查springboot 項目掃描范圍是否包含…

用Python繪制動態愛心:代碼解析與浪漫編程實踐

用Python繪制動態愛心:代碼解析與浪漫編程實踐 一、摘要二、整體架構流程1. 初始化配置模塊2. 幾何繪制引擎3. 動畫控制系統4. 輔助功能模塊三、技術細節解析1. Turtle性能優化2. 數學公式應用3. 顏色漸變算法4. 異常處理機制5. 動畫節奏控制四、結論與展望附:完整代碼一、摘…

WPS 免登錄解鎖編輯

遇到 WPS 需要登錄才能啟用編輯功能&#xff1f; 如何免登錄使用編輯功能&#xff1f; 方法一 解鎖方法 1、關閉 WPS&#xff1b; 2、桌面右鍵→ “新建”→“文本文檔”&#xff0c;粘貼以下內容&#xff08;見最下面&#xff09;&#xff1b;編碼保持默認&#xff08;ANSI …

ORDER BY子句在一個 SQL 查詢中只能出現一次

order by A.create_time,A.update_time desc和 order by A.create_time desc,A.update_time desc有區別嗎&#xff1f; 關鍵區別 第一個排序中 create_time 是升序(默認是ASC)&#xff0c;第二個是降序(DESC) 只有在 DESC 關鍵字緊跟在列名后面時&#xff0c;該列才會按降序排…

02-BTC-密碼學原理 對hash算法如果出現漏洞的思考

如果比特幣中某個哈希函數的抗碰撞性出現了漏洞怎么辦&#xff0c;怎么補救&#xff1f; 答&#xff1a;&#xff08;1&#xff09;攻擊場景&#xff1a; 偽造交易&#xff1a;攻擊者可構造兩個不同的交易&#xff08;如正常交易和惡意雙花交易&#xff09;具有相同的TxID&…