重點摘要
功能:執行即時資料擷取、系統操作與自動化工作流程。
支援的模型:Llama 3 系列、GPT 系列、Gemma 2 和 Mistral nemo。
實作方式:透過 Novita AI 的「模型庫」安裝 API,再以 Langchain 框架實作。
函式呼叫是一項能大幅擴展大型語言模型(LLM)能力的技術,讓它們能與外部世界互動。LLM 不再只是產生文字,而是可以利用函式呼叫來執行特定任務、取得即時資訊,以及進行複雜操作。本文將探討函式呼叫的概念、實際應用,以及像 Llama 3.3 70B 這樣的模型如何讓這項技術更易於使用。
函式呼叫可以解決哪些問題?
- 即時資訊存取
- 查詢最新股價
- 取得目前天氣資料
- 獲取即時新聞
- 系統互動
- 發送電子郵件
- 在社交媒體上發文
- 查詢與寫入資料庫
- 工作流程自動化
- 資料爬取與處理
- 多步驟任務執行
- 複雜分析自動化
- 資料準確性
- 確保資訊時效性
- 提供精確查詢結果
- 減少過時資料錯誤
什麼是函式呼叫?
函式呼叫的核心是 LLM 能夠辨識出特定任務需要外部函式或工具,然後輸出結構化資料(通常是 JSON 格式)來執行該函式。這個結構化資料包含函式名稱以及必要的引數。本質上,函式呼叫是 AI 廣博知識與實際行動之間的橋樑。它讓 AI 代理或聊天機器人能夠執行特定任務,或存取外部資料與服務。
支援函式呼叫的模型
許多 LLM 和平台現在都支援函式呼叫。您可以透過 Novita AI 的「模型庫」頁面安裝 API,並透過 langchain 來實作函式呼叫。

- Llama 3.3: 700 億參數版本在函式呼叫測試中表現強勁,能根據使用者請求成功辨識何時該呼叫以及呼叫哪些函式。
- Mistral: 像 Mistral-Large-2 這樣的模型在 watsonx.ai 等環境中成功展示了函式呼叫功能。
- Gemini: Google 的 Gemini 模型也支援函式呼叫,並提供多種使用範例。
函式呼叫的運作方式
- 函式宣告: 首先定義可重複使用的程式碼區塊(即函式),並附上其功能、輸入與輸出的說明。
- 提示提交: 使用者向 LLM 提交提示,同時提供一組函式宣告,讓模型了解有哪些可用工具。
- 模型分析: LLM 分析提示,判斷是否需要呼叫任何提供的函式來完成請求。
- 結構化輸出: 如果需要呼叫函式,LLM 會產生 JSON 格式的結構化輸出,包含函式名稱及其參數值。
- 函式呼叫: 應用程式或系統使用此結構化輸出來呼叫指定的函式,並傳入參數。
- 函式執行: 外部服務或 API 使用提供的參數執行該函式。
- 輸出回應: 外部服務將確認結果或結果資料送回 AI。
- 模型回應: LLM 接著使用此輸出為使用者產生自然語言回應,或供後續處理使用。
- 請注意,模型本身並不會直接呼叫函式,而是由外部程式利用其結構化輸出來進行呼叫。
https://www.youtube.com/watch?v=Qor2VZoBib0
函式呼叫 vs. JSON 模式

函式呼叫的優點
- 提高效率: 直接呼叫函式可加速處理時間並減少延遲,對於需要即時反應的應用至關重要。
- 增強彈性: 開發人員可以輕鬆更新或修改函式,而無需全面改造應用程式,進而快速因應新需求。
- 可擴展性: 可輕鬆新增函式而不需大幅變更現有基礎設施,有助於擴展。
- 個人化互動: 允許個人化的使用者體驗;例如存取使用者日曆來建議不與現有行程衝突的會議時間。
- 連結 AI 與實際行動: 讓 AI 能夠執行實用任務,例如代使用者發送電子郵件或簡訊。
- 複雜對話代理: 可建立能回答複雜問題的進階聊天機器人,利用外部 API 和知識庫提供相關回應。
函式呼叫的實際應用
- 對話式代理: 用於利用外部 API 獲取最新資訊的進階聊天機器人。
- 自然語言理解: 從文字中提取結構化資料,用於實體辨識、情感分析等任務。
- API 整合: 讓 LLM 能與外部 API 整合,根據使用者輸入擷取資料或執行動作。
- 財務助理: 建立能存取即時財務資料並提供個人化建議的 AI 財務顧問。
- 支援單自動化: 利用情境感知規則處理支援單,自動分派任務。
- 知識檢索: 透過建立能摘要學術文章以回答問題並提供引用的函式,協助從知識庫中檢索資訊。
- 多模態應用: 根據圖片、影片、音訊與 PDF 觸發函式。
如何透過 Novita AI 使用 Llama 3.3 70B 函式呼叫
步驟 1:取得 API 金鑰並安裝!
進入「金鑰管理」頁面,您可以複製圖中所示的 API 金鑰。

您可以在 Novita AI 的「模型庫」頁面找到相關資訊。使用您程式語言專用的套件管理器安裝 Novita AI API。

註冊後,Novita AI 會提供 $0.5 的額度讓您入門!
如果免費額度用完,您可以付費繼續使用。
步驟 2:使用 Langchain 實作函式呼叫
我們將建立一個簡單的數學應用程式,可以執行加法與乘法運算。
💡 本指南使用 LangChain 以方便示範,但實作函式呼叫並不依賴任何特定框架。關鍵在於設計合適的提示,讓模型理解並正確呼叫函式。此處使用 LangChain 只是為了簡化實作流程。
前置需求
首先,安裝必要的套件:
pip install langchain-openai python-dotenv
設定環境
在專案根目錄建立一個 .env 檔案,並加入您的 Novita AI API 金鑰:
NOVITA_API_KEY=your_api_key_here
實作步驟
1. 定義工具
首先,使用 LangChain 的 @tool 裝飾器建立兩個簡單的數學工具:
from langchain_core.tools import tool
@tool
def multiply(x: float, y: float) -> float:
"""Multiply two numbers together."""
return x * y
@tool
def add(x: int, y: int) -> int:
"""Add two numbers."""
return x + y
tools = [multiply, add]
2. 建立工具執行函式
接著,實作一個執行工具的函式:
from typing import Any, Dict, Optional, TypedDict
from langchain_core.runnables import RunnableConfig
class ToolCallRequest(TypedDict):
name: str
arguments: Dict[str, Any]
def invoke_tool(
tool_call_request: ToolCallRequest,
config: Optional[RunnableConfig] = None
):
"""Execute the specified tool with given arguments."""
tool_name_to_tool = {tool.name: tool for tool in tools}
name = tool_call_request["name"]
requested_tool = tool_name_to_tool[name]
return requested_tool.invoke(tool_call_request["arguments"], config=config)
3. 設定 LangChain Pipeline
建立一條使用 Novita AI 的 LLM 來選擇並準備工具呼叫的鏈:
from langchain_openai import ChatOpenAI
from langchain_core.output_parsers import JsonOutputParser
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.tools import render_text_description
def create_chain():
"""Create a chain that uses the specified LLM model to select and prepare tool calls."""
model = ChatOpenAI(
model="meta-llama/llama-3.3-70b-instruct",
api_key=os.getenv("NOVITA_API_KEY"),
base_url="https://api.novita.ai/v3/openai",
)
rendered_tools = render_text_description(tools)
system_prompt = f"""\
You are an assistant that has access to the following set of tools.
Here are the names and descriptions for each tool:
{rendered_tools}
Given the user input, return the name and input of the tool to use.
Return your response as a JSON blob with 'name' and 'arguments' keys.
The `arguments` should be a dictionary, with keys corresponding
to the argument names and the values corresponding to the requested values.
"""
prompt = ChatPromptTemplate.from_messages(
[("system", system_prompt), ("user", "{input}")]
)
return prompt | model | JsonOutputParser()
4. 建立主要處理函式
實作處理數學查詢的主要函式:
def process_math_query(query: str):
"""Process a mathematical query by using an LLM to select the appropriate tool and execute it."""
chain = create_chain()
message = chain.invoke({"input": query})
result = invoke_tool(message, config=None)
return message, result
5. 使用範例
以下是使用此實作的範例:
if __name__ == "__main__":
message, result = process_math_query(
"meta-llama/llama-3.3-70b-instruct",
"what's 3 plus 1132"
)
print(result) # 輸出:1135
總而言之,函式呼叫正迅速改變 AI 系統與環境互動的方式,帶來更實用、更有效率且更友善的應用程式。像 Llama 3.3 70B 這樣的模型正為這項強大技術鋪平道路,開啟了 AI 開發的無限可能。
常見問題
什麼是 LLM 中的函式呼叫?
函式呼叫是一項技術,讓大型語言模型能辨識出特定任務需要外部函式或工具,並產生結構化資料來執行該函式。
使用函式呼叫的主要優點是什麼?
主要優點包括:提高任務處理效率、讓開發人員能輕鬆更新函式以獲得更多彈性、在不需大規模修改的情況下新增功能以實現可擴展性,以及個人化的使用者互動。
Llama 3.3 支援哪些語言?
英文、法文、德文、印地文、義大利文、葡萄牙文、西班牙文、泰文
Novita AI 是一個 AI 雲端平台,為開發人員提供簡單的 API 以輕鬆部署 AI 模型,同時也提供經濟且可靠的 GPU 雲端來建構與擴充規模。
