Llama 3.2 支援函式呼叫嗎?實用指南

Llama 3.2 支援函式呼叫嗎?實用指南

重點摘要

是或否: Llama 3.2 3B 模型是一個輕量但功能強大的語言模型,** 支援函式呼叫**。

它能做什麼: 函式呼叫讓模型能夠與外部工具和 API 互動,將其功能擴展到基本文字生成之外。

如何實作? 透過 Novita AI 的「LLM Playground」安裝 API,然後使用 Langchain 框架進行實作。

在當前人工智慧領域,許多人都在熱烈討論 Llama 3.2 3B 模型是否能夠實作函式呼叫功能。許多使用者和開發者紛紛在論壇和社交媒體上分享他們對 Llama 3.2 3B 函式呼叫的使用經驗。有些使用者回報在使用該模型進行工具呼叫時,成功率高達 80% 左右,效果良好。但也有使用者回報在某些情況下,模型可能誤解上下文,導致函式呼叫不準確或失敗。今天,我們將深入探討 Llama 3.2 的函式呼叫功能。

Llama 3.2 支援函式呼叫嗎?

是的!

Llama 3.2 系列模型(包括 3B 版本)支援函式呼叫。這項能力讓模型能夠判斷何時需要呼叫函式,並輸出帶有引數的 JSON 來執行函式。這是 Llama 3.2 系列的一項關鍵功能,模型經過特別微調以支援此功能。Llama 3.2 3B 模型由於輕量設計,特別適合裝置端應用,同時仍支援強大的函式呼叫功能。

llama3.2 函式呼叫

什麼是函式呼叫?

函式呼叫是一種能讓大型語言模型(LLM)與外部系統、API 及工具互動 的方法。透過為 LLM 提供一組函式或工具,以及使用方式的詳細說明,模型可以智慧地選擇並執行適當的函式來完成特定任務。這項能力將 LLM 的功能擴展到基本文字生成之外,使其能夠執行動作、控制裝置及存取資料庫。

支援函式呼叫的模型

現在許多 LLM 和平台都支援函式呼叫。你可以透過 Novita AI 的「LLM Playground」頁面安裝 API,並使用 Langchain 實作函式呼叫。

  • Llama 3.3: 700 億參數版本在函式呼叫測試中表現出色,能根據使用者請求成功識別何時及應呼叫哪個函式。
  • Mistral: 像 Mistral-Large-2 這類模型在 watsonx.ai 環境中展現出成功的函式呼叫能力。
  • Gemini: Google 的 Gemini 模型也支援函式呼叫,並提供多種使用範例。

如果想了解更多資訊,可以查看這個網站!

不同模型在函式呼叫上的比較

資料來源:Berkeley Function-Calling Leaderboard

函式呼叫如何運作?

函式呼叫通常包含兩個步驟:

  1. 將使用者提示對應 到正確的函式及輸入參數。LLM 會評估使用者查詢是否與任何可用工具相關。
  2. 處理函式的輸出 以生成最終連貫的回應。如果適用,LLM 會建構格式化的請求來呼叫該工具。
  • 接著分析工具輸出並整合到最終回應中。

函式呼叫的實際應用

使用 Llama 3.2 3B 模型進行函式呼叫有許多實際應用:

  • 客戶支援聊天機器人:自動回應需要計算或查詢資訊的請求。
  • 資料處理:與後端系統互動以擷取或更新資料。
  • 虛擬助手:讓助手能執行排程或計算等操作,從而改善使用者互動。
  • API 互動:將自然語言轉換為 API 呼叫。
  • 資料庫查詢:建立能將自然語言轉換為有效資料庫查詢的應用程式。
  • 智慧家庭控制:透過自然語言指令設定溫度或開關燈光來控制智慧家庭裝置。
  • 對話式知識檢索引擎:與知識庫互動。
  • 電子商務平台:根據庫存資料庫提供即時商品建議、追蹤訂單或管理客戶支援單。
  • 醫療保健:預約掛號或擷取病患資訊。
  • 旅遊:擷取航班資訊、預訂或管理訂單。
  • 金融:提供即時帳戶餘額及處理交易。

如何透過 Novita AI 使用 Llama 3.2 3B 的函式呼叫

第一步:取得 API 金鑰

進入「Keys」頁面,按照圖示複製 API 金鑰

取得 API 金鑰

註冊後,Novita AI 會提供 0.5 美元的免費額度讓您開始使用!

如果免費額度用完,您可以付費繼續使用。

第二步:使用 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 管線

建立一個使用 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.2-3b-instruct", 
        "what's 3 plus 1132"
    )
    print(result)  # Output: 1135

常見問題與疑難排解

使用函式呼叫時常見的問題包括:

  • 錯誤的函式呼叫:模型可能誤解上下文,導致呼叫了錯誤的函式。
  • 高延遲:回應速度慢,可能影響使用者體驗。
  • 無法識別的函式:模型可能無法識別有效的函式名稱或參數,導致執行階段錯誤。
  • 模型幻覺:模型可能產生錯誤的輸出或參數,導致非預期行為。
  • 參數傳遞不一致:參數可能以未預期的格式傳遞,導致函式執行時發生錯誤。
  • 網路問題:外部 API 依賴可能因網路不穩定而引入延遲或失敗。
  • 解析失敗:模型輸出可能不符合預期格式(例如無效的 JSON),導致解析錯誤。

最佳化函式呼叫的最佳實踐

最佳化函式呼叫的方法:

  • 針對錯誤的函式呼叫:對模型進行與函式呼叫相關的特定提示微調,以增強上下文理解並減少函式呼叫的錯誤。
  • 降低高延遲:透過減少提示中的 token 數量或實作非同步函式呼叫來最佳化回應時間,以改善效能。
  • 解決無法識別的函式:在呼叫函式前,先驗證函式名稱和參數,確保它們被正確識別,以防止執行階段錯誤。
  • 管理模型幻覺:實作謹慎的錯誤處理策略,處理模型產生的錯誤輸出或參數,並為非預期結果準備備援機制。
  • 確保參數傳遞一致性:為參數格式建立明確指南,並執行嚴格的驗證檢查,以確保函式執行時參數傳遞的一致性。
  • 處理網路問題:針對與外部 API 互動時可能發生的網路問題,制定健全的錯誤處理策略,包括暫時性失敗的重試機制。
  • 防止解析失敗:使用輸出驗證技術確保模型輸出符合預期格式(例如有效的 JSON),並為解析錯誤實作錯誤處理,以維持系統穩定性。

總而言之,函式呼叫能力代表了大型語言模型功能的一大進展,讓它們能有效地與外部工具和 API 互動。雖然常見的挑戰包括錯誤的函式呼叫、高延遲、無法識別的函式以及模型幻覺,但透過實作最佳實踐和健全的錯誤處理,可以提升其可靠性和效能。隨著開發者持續探索並完善此功能,其在各個領域的潛在應用可能會擴展,使 Llama 3.2 成為處理真實世界任務的多功能工具。

常見問答

為什麼函式呼叫對 AI 代理至關重要?

它讓 AI 代理能夠自主執行需要外部資料或動作的任務,在動態環境中提升效率。

函式呼叫如何改善 LLM 的表現?

它透過允許即時資料檢索、任務執行以及透過外部工具做出更明智的決策,來提升準確性。

Novita AI 是一個一站式雲端平台,為您的 AI 願景提供動力。整合 API、無伺服器、GPU 實例——您需要的經濟高效工具。免除基礎設施煩惱,免費開始,讓您的 AI 願景成真。

推薦閱讀