Llama 3.3 70B 函式呼叫:無縫整合,提升效能

Llama 3.3 70B 函式呼叫:無縫整合,提升效能

重點摘要

功能:執行即時資料擷取、系統操作與自動化工作流程。

支援的模型:Llama 3 系列、GPT 系列、Gemma 2 和 Mistral nemo。

實作方式:透過 Novita AI 的「模型庫」安裝 API,再以 Langchain 框架實作。

函式呼叫是一項能大幅擴展大型語言模型(LLM)能力的技術,讓它們能與外部世界互動。LLM 不再只是產生文字,而是可以利用函式呼叫來執行特定任務、取得即時資訊,以及進行複雜操作。本文將探討函式呼叫的概念、實際應用,以及像 Llama 3.3 70B 這樣的模型如何讓這項技術更易於使用。

函式呼叫可以解決哪些問題?

  1. 即時資訊存取
  • 查詢最新股價
  • 取得目前天氣資料
  • 獲取即時新聞
  1. 系統互動
  • 發送電子郵件
  • 在社交媒體上發文
  • 查詢與寫入資料庫
  1. 工作流程自動化
  • 資料爬取與處理
  • 多步驟任務執行
  • 複雜分析自動化
  1. 資料準確性
  • 確保資訊時效性
  • 提供精確查詢結果
  • 減少過時資料錯誤

什麼是函式呼叫?

函式呼叫的核心是 LLM 能夠辨識出特定任務需要外部函式或工具,然後輸出結構化資料(通常是 JSON 格式)來執行該函式。這個結構化資料包含函式名稱以及必要的引數。本質上,函式呼叫是 AI 廣博知識與實際行動之間的橋樑。它讓 AI 代理或聊天機器人能夠執行特定任務,或存取外部資料與服務。

支援函式呼叫的模型

許多 LLM 和平台現在都支援函式呼叫。您可以透過 Novita AI 的「模型庫」頁面安裝 API,並透過 langchain 來實作函式呼叫。

模型庫

  • Llama 3.3: 700 億參數版本在函式呼叫測試中表現強勁,能根據使用者請求成功辨識何時該呼叫以及呼叫哪些函式。
  • Mistral: 像 Mistral-Large-2 這樣的模型在 watsonx.ai 等環境中成功展示了函式呼叫功能。
  • Gemini: Google 的 Gemini 模型也支援函式呼叫,並提供多種使用範例。

函式呼叫的運作方式

  1. 函式宣告: 首先定義可重複使用的程式碼區塊(即函式),並附上其功能、輸入與輸出的說明。
  2. 提示提交: 使用者向 LLM 提交提示,同時提供一組函式宣告,讓模型了解有哪些可用工具。
  3. 模型分析: LLM 分析提示,判斷是否需要呼叫任何提供的函式來完成請求。
  4. 結構化輸出: 如果需要呼叫函式,LLM 會產生 JSON 格式的結構化輸出,包含函式名稱及其參數值。
  5. 函式呼叫: 應用程式或系統使用此結構化輸出來呼叫指定的函式,並傳入參數。
  6. 函式執行: 外部服務或 API 使用提供的參數執行該函式。
  7. 輸出回應: 外部服務將確認結果或結果資料送回 AI。
  8. 模型回應: LLM 接著使用此輸出為使用者產生自然語言回應,或供後續處理使用。
  • 請注意,模型本身並不會直接呼叫函式,而是由外部程式利用其結構化輸出來進行呼叫。

https://www.youtube.com/watch?v=Qor2VZoBib0

函式呼叫 vs. JSON 模式

函式呼叫與 JSON 模式對比

函式呼叫的優點

  • 提高效率: 直接呼叫函式可加速處理時間並減少延遲,對於需要即時反應的應用至關重要。
  • 增強彈性: 開發人員可以輕鬆更新或修改函式,而無需全面改造應用程式,進而快速因應新需求。
  • 可擴展性: 可輕鬆新增函式而不需大幅變更現有基礎設施,有助於擴展。
  • 個人化互動: 允許個人化的使用者體驗;例如存取使用者日曆來建議不與現有行程衝突的會議時間。
  • 連結 AI 與實際行動: 讓 AI 能夠執行實用任務,例如代使用者發送電子郵件或簡訊。
  • 複雜對話代理: 可建立能回答複雜問題的進階聊天機器人,利用外部 API 和知識庫提供相關回應。

函式呼叫的實際應用

  • 對話式代理: 用於利用外部 API 獲取最新資訊的進階聊天機器人。
  • 自然語言理解: 從文字中提取結構化資料,用於實體辨識、情感分析等任務。
  • API 整合: 讓 LLM 能與外部 API 整合,根據使用者輸入擷取資料或執行動作。
  • 財務助理: 建立能存取即時財務資料並提供個人化建議的 AI 財務顧問。
  • 支援單自動化: 利用情境感知規則處理支援單,自動分派任務。
  • 知識檢索: 透過建立能摘要學術文章以回答問題並提供引用的函式,協助從知識庫中檢索資訊。
  • 多模態應用: 根據圖片、影片、音訊與 PDF 觸發函式。

如何透過 Novita AI 使用 Llama 3.3 70B 函式呼叫

步驟 1:取得 API 金鑰並安裝!

進入「金鑰管理」頁面,您可以複製圖中所示的 API 金鑰

API 金鑰

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

llama 3.3 70b 程式碼

註冊後,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 雲端來建構與擴充規模。

推薦閱讀