OpenAI重磅:AI Agent智能體Function Calling 2.0! 原創(chuàng)
近日,OpenAI 推出了全新的 AI Agent 智能體 Function Calling 2.0 使用指南,此次更新使得文檔篇幅縮減了一半,并且引入了一系列關(guān)鍵的最佳實踐。作為打造高效 AI Agent 智能體的核心技能之一,正確運用Function Calling 對于開發(fā)強大的 AI Agent 智能體應(yīng)用具有至關(guān)重要的作用。因此,今天我就來為大家揭秘這次更新的精華內(nèi)容!
1、Function Calling 的兩大核心應(yīng)用
文章中清晰地闡述了 Function Calling 的兩個核心應(yīng)用場景:
第一、數(shù)據(jù)獲?。‵etching Data)
- 實時檢索信息并將其融入大模型的響應(yīng)之中;
- 適用于查詢知識庫和獲取特定 API 數(shù)據(jù)(例如天氣預(yù)報);
- 本質(zhì)上是實現(xiàn)了一種 RAG(Retrieval Augmented Generation,檢索增強生成)的方法。
第二、執(zhí)行動作(Taking Action)
- 完成表單提交、API 調(diào)用等操作;
- 改變應(yīng)用程序的狀態(tài)(涉及前端或后端);
- 執(zhí)行 AI Agent 智能體的工作流程步驟(例如對話中的任務(wù)轉(zhuǎn)接)。
2、全新的最佳實踐
此次更新最為關(guān)鍵的是推出了一系列實用的最佳實踐,下面我們來聚焦于其中的幾項:
第一、編寫明確的函數(shù)定義
# 好的示例
def get_weather(location: str):
"""獲取指定位置的當(dāng)前溫度
Args:
location: 城市和國家,例如:'北京, 中國'
"""
pass
# 糟糕的示例
def toggle_light_switch(on: bool, off: bool):
"""這個設(shè)計允許無效狀態(tài)的存在"""
pass
第二、遵循軟件工程的最佳實踐指南
- 確保函數(shù)直觀易懂,并遵循最小驚訝原則,在維基百科中稱為:Principle of least astonishment,詳見鏈接:https://en.wikipedia.org/wiki/Principle_of_least_astonishment。
- 采用枚舉和對象結(jié)構(gòu),以防止出現(xiàn)無效狀態(tài)。
- 通過“實習(xí)生測試”:如果一名實習(xí)生僅憑函數(shù)定義就能正確地使用它,那么說明你的設(shè)計相當(dāng)出色。
第三、盡可能減少大模型的負(fù)擔(dān)
# 不推薦
def get_orders(user_id: str):
pass
# 推薦
def get_orders():
# 在代碼中傳遞user_id
pass
第四、精簡函數(shù)數(shù)量,維持高效性;
- 推薦在任何時候使用的函數(shù)不超過20個;
- 若觀察到有兩個函數(shù)經(jīng)常被同時調(diào)用,應(yīng)考慮將它們合并為一個函數(shù)。
3、重要的配置選項
第一、工具選擇模式(tool_choice)
# 自動模式(默認(rèn))
tool_choice="auto" # 可以調(diào)用零個、一個或多個函數(shù)
# 強制模式
tool_choice="required" # 必須調(diào)用至少一個函數(shù)
# 指定函數(shù)
tool_choice={
"type": "function",
"function": {"name": "get_weather"}
} # 強制調(diào)用特定函數(shù)
第二、嚴(yán)格模式(Strict Mode)
{
"type": "function",
"function": {
"name": "get_weather",
"strict": True, # 啟用嚴(yán)格模式
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string"
},
"units": {
"type": ["string", "null"], # 可選參數(shù)
"enum": ["celsius", "fahrenheit"]
}
},
"required": ["location", "units"],
"additionalProperties": false
}
}
}
4、流式處理的支持
OpenAI 進(jìn)一步提升了流式處理的能力,使得能夠即時展現(xiàn)函數(shù)調(diào)用的實時過程。
stream = client.chat.completions.create(
model="gpt-4o",
messages=[{"role": "user", "content": "北京今天天氣如何?"}],
tools=tools,
stream=True
)
for chunk in stream:
delta = chunk.choices[0].delta
print(delta.tool_calls) # 實時顯示函數(shù)調(diào)用進(jìn)度
此次更新主要目的是分享了一系列最佳實踐。隨著 o1-mini 即將實現(xiàn)對Function Calling 的支持(已獲官方確認(rèn)),昨日還推出了 tasks 功能。因此,可以展望在2025年見證真正的 AI Agent 智能體的誕生。
本文轉(zhuǎn)載自公眾號玄姐聊AGI 作者:玄姐
