Novita Kimi K2 API 現已支援函式呼叫 (Function Calling)!

Novita Kimi K2 API 現已支援函式呼叫 (Function Calling)!

Kimi K2 代表了 AI 代理(Agent)的新紀元,融合了專業領域的頂尖性能、親民價格以及開源彈性。Kimi K2 擁有 320 億活化參數與 1 兆總參數,在 STEM、程式碼撰寫與工具使用等專業領域中表現突出。

本文將探討函式呼叫如何強化 Kimi K2 的代理能力、此功能的內涵,以及它如何使 Kimi K2 成為 AI 代理未來的領導者。

Kimi K2 的程式碼代理能力

  1. STEM 與程式碼精通度

    • Kimi K2 在 LiveCodeBenchOJBench 等 STEM 及程式碼基準測試中達到 ** 最先進(SOTA)效能**。
    • 它能精準生成複雜程式碼、除錯問題,並模擬複雜演算法。
  2. 工具使用專業

    • Kimi K2 已在數百個領域的 多輪工具使用情境 中受過訓練。
    • 它能辨識何時需要工具,並執行多步驟工作流程,是極為實用的程式碼助手。
  3. 強化作業以執行任務

    • 透過 基於評分標準的自我評估on-policy 學習,Kimi K2 持續改善其判斷與決策能力。

來源:Kimi

Kimi K2 的代理能力仰賴函式呼叫

雖然 Kimi K2 在程式碼與工具使用上有內建的強大優勢,但其 代理能力高度依賴函式呼叫。若缺少此功能,它與外部工具及系統互動的能力將受到嚴重限制。

什麼是函式呼叫?

函式呼叫是一種結構化機制,允許大型語言模型(LLM)與外部系統、工具或 API 互動。支援函式呼叫的 LLM 不僅能產生文字,還能分析使用者提示、判斷何時需要外部動作,並產生結構化的 JSON 呼叫來執行特定函式。

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

函式呼叫的運作方式

  1. 提示分析:LLM 解讀使用者請求,判斷是否需要進行函式呼叫。
  2. JSON 呼叫生成:它產生包含函式名稱及必要參數的結構化 JSON 物件。
  3. 由外部系統執行:外部系統接收 JSON 呼叫,執行函式,並回傳結果。
  4. 回應生成:LLM 使用回傳的資料提供最終回應給使用者。

對於多步驟或複雜任務,此循環可以重複進行,使模型能扮演動態且互動的代理角色。

為何函式呼叫至關重要

  • 將知識轉化為行動:函式呼叫讓 Kimi K2 從「知識提供者」轉變為「任務執行者」。
  • 真實世界互動:它能與 API、資料庫及外部系統互動,有效自動化排程、資料檢索與 IoT 控制等任務。
  • 多步驟工作流程:Kimi K2 可串接多個函式呼叫,執行複雜的工作流程,例如擷取資料、處理資料及儲存結果。

函式呼叫 vs SDK

**功能 ** ** 函式呼叫 ** SDK
定義 一種結構化機制,讓 LLM 觸發外部函式或 API。 簡化與 API 及外部系統互動的工具組。
目的 透過生成函式呼叫(如 JSON)直接執行任務。 提供預建工具與函式庫,簡化 API 整合。
彈性 高度動態,模型可與任何定義的函式互動。 僅限於 SDK 支援的功能與端點。
實作方式 需手動定義函式、結構並處理回應。 抽象化 API 邏輯,提供即插即用體驗。
使用場景 適合多步驟任務自動化與即時決策。 最適合使用預定工作流程的快速開發。
開發者投入 需較多設定來定義與管理函式呼叫。 投入最少;透過預建方法簡化 API 使用。

Kimi K2 + 函式呼叫能達成什麼?

Kimi K2 的優勢與函式呼叫能力相結合,能解鎖廣泛的真實應用:

1. 真實任務執行

  • 自動化:自動執行重複性任務,如預約、提交表單或產生報告。
  • IoT 控制:與 IoT 裝置互動,執行調整室溫或切換燈光等操作。

2. 存取即時資料

  • 動態更新:透過 API 呼叫擷取即時資料(如天氣、股價)。
  • 強化回應:將即時資訊整合至回答中,提升準確性與相關性。

3. 進階多模態應用

  • 影像與影片處理:觸發外部工具進行圖片編輯或影片裁剪等任務。
  • 跨格式整合:處理來自文字、圖片與音訊的輸入,執行複雜任務。

4. 複雜工作流程與管道

  • 串接多個函式呼叫以執行資料管道,例如:
    • 擷取資料 → 分析資料 → 儲存結果。
  • 實現與資料庫及分析工具的無縫整合,適用於進階工作流程。

5. 開發者友善解決方案

  • 自訂 API:開發者可微調 Kimi K2,使其與專屬 API 及工具互動。
  • 可擴展整合:無需重大基礎設施變更即可輕鬆新增函式,擴充能力。

Kimi K2 搭配函式呼叫的展示

  1. 我的總預算是 10,000 美元,需涵蓋所有費用,包含交通、住宿與門票。請提供整趟旅程的詳細預算明細。我的主要評估標準為:交通便利性、門票可得性以及當地景點品質。

  2. 請參考我上述的總預算。

  3. 除上述總預算外,我希望住宿能提供道地的當地體驗,因此偏好 Airbnb。

  4. 檢查我的 Google 郵件,並在我的 Google 日曆中建立行程。

kimi k2 展示

kimi k2 展示

Novita Kimi K2 API 支援函式呼叫

本指南示範如何使用函式呼叫來取得使用者指定地點的當前天氣資訊。我們將逐步說明完整的 Python 程式碼範例。

有關函式呼叫的具體 API 格式,請參閱文件

Novita AI 上的 kimi k2

立即試用 Kimi K2!

  • 初始化客戶端

首先,使用您的 Novita API 金鑰初始化客戶端。

from openai import OpenAI
import json

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    # 從 https://novita.ai/settings/key-management 取得 Novita AI API 金鑰。
    api_key="<YOUR Novita AI API Key>",
)

model = "moonshotai/kimi-k2-instruct"
  • 定義要呼叫的函式

接著,定義模型可以呼叫的 Python 函式。此範例為一個取得天氣資訊的函式。

# 模擬擷取天氣資料的範例函式。
def get_weather(location):
    """擷取指定地點的當前天氣。"""
    print("正在呼叫 get_weather 函式,地點:", location)
    # 在實際應用中,您應該在此呼叫外部天氣 API。
    # 此為簡化範例,回傳硬編碼資料。
    return json.dumps({"location": location, "temperature": "60 degrees Fahrenheit"})
  • 建構包含工具與使用者訊息的 API 請求

現在建立對 Novita 端點的 API 請求。此請求包含 tools 參數,定義模型可使用的函式,以及使用者的訊息。

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_weather",
            "description": "取得某個地點的天氣,使用者應先提供地點。",
            "parameters": {
                "type": "object",
                "properties": {
                    "location": {
                        "type": "string",
                        "description": "城市與州,例如 San Francisco, CA",
                    }
                },
                "required": ["location"]
            },
        }
    },
]

messages = [
    {
        "role": "user",
        "content": "What is the weather in San Francisco?"
    }
]

# 發送請求並印出回應。
response = client.chat.completions.create(
    model=model,
    messages=messages,
    tools=tools,
)

# 在正式環境中請檢查回應是否包含 tool_calls。
tool_call = response.choices[0].message.tool_calls[0]
print(tool_call.model_dump())
  • 輸出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}
  • 以函式呼叫結果回應並取得最終答案

下一步是處理函式呼叫,執行 get_weather 函式,並將結果傳回給模型,以產生最終回應給使用者。

# 確認 tool_call 已由上一步驟定義
if tool_call:
    # 將助理的工具呼叫訊息加入對話紀錄
    messages.append(response.choices[0].message)

    function_name = tool_call.function.name
    if function_name == "get_weather":
        function_args = json.loads(tool_call.function.arguments)
        # 執行函式並取得回應
        function_response = get_weather(
            location=function_args.get("location"))
        # 將函式回應加入訊息
        messages.append(
            {
                "tool_call_id": tool_call.id,
                "role": "tool",
                "content": function_response,
            }
        )

    # 取得模型的最終回應,此時已包含函式結果
    answer_response = client.chat.completions.create(
        model=model,
        messages=messages,
        # 注意:此處不包含 tools 參數。
    )
    print(answer_response.choices[0].message)
  • 輸出
{'id': '0', 'function': {'arguments': '{"location": "San Francisco, CA"}', 'name': 'get_weather'}, 'type': 'function'}

Novita AI 現已支援 Anthropic SDK 相容性

Kimi K2 與 Claude Code 的組合已迅速成為 AI 社群熱門話題,為真實應用提供了無與倫比的代理能力。為了讓整合更加順暢,Novita AI 現已提供與 Anthropic SDK 的相容性,讓您可以透過熟悉的 Claude Code 介面輕鬆運用 Kimi K2 的強大功能。

您可以查閱此文件獲取更多詳細資訊!

1. 安裝 Anthropic SDK

pip install anthropic

2. 初始化客戶端

Anthropic SDK 設計為從環境變數 ANTHROPIC_API_KEYANTHROPIC_BASE_URL 中讀取 API 金鑰與基本 URL。您也可以在初始化 Anthropic 客戶端時直接提供參數。

您可以在設定頁面檢視與管理您的 API 金鑰。

  • 使用環境變數
export ANTHROPIC_BASE_URL="https://api.novita.ai/anthropic"
export ANTHROPIC_API_KEY="<YOUR_NOVITA_API_KEY>"
  • 初始化 Anthropic 客戶端時設定參數
import anthropic

client = anthropic.Anthropic(
    base_url="https://api.novita.ai/anthropic",
    api_key="<YOUR_NOVITA_API_KEY>"
)

3. 呼叫 API

import anthropic

# 初始化客戶端。若已在環境變數中設定 `ANTHROPIC_BASE_URL` 與 `ANTHROPIC_API_KEY`,
# 則可省略 `api_key` 與 `base_url` 參數。
client = anthropic.Anthropic(
    base_url="https://api.novita.ai/anthropic",
    api_key="<YOUR_NOVITA_API_KEY>"
)

message = client.messages.create(
    model="moonshotai/kimi-k2-instruct",
    max_tokens=1000,
    temperature=1,
    system="你是一位世界級的詩人。請僅回覆簡短的詩句。",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "text",
                    "text": "為什麼海水是鹹的?"
                }
            ]
        }
    ]
)

print(message.content)

Kimi K2 對 函式呼叫 的支援,將它從高效能 LLM 提升為 新一代 AI 代理,具備真實世界互動與任務執行能力。結合它在 STEM 與程式碼領域的主導地位,這項功能使 Kimi K2 成為開發實用且動態 AI 系統的高成本效益、專業化解決方案。

透過連結知識與行動,Kimi K2 不僅提升了使用者體驗,也促進了先進 AI 能力的普及。它的開源特性與親民價格使其成為 AI 領域的破壞性力量,為廣泛的創新與採用鋪平道路。

常見問題

在 LLM 的語境中,什麼是函式呼叫?

函式呼叫是一種技術,允許大型語言模型辨識何時特定任務需要外部函式或工具,並產生結構化資料來執行該函式。

使用函式呼叫的主要優點有哪些?

主要優點包括:提高任務處理效率、開發者可更靈活地輕鬆更新函式、無需大量變更即可擴充新功能,以及個人化的使用者互動。

Kimi K2 能否取代像 GPT-4 或 Claude 這樣的專有模型?

Kimi K2 的目標並非取代通用模型。相反地,它專注於成為 專業代理,擅長 STEM、程式碼與工具使用,並以其 ** 函式呼叫能力**作為輔助。

Novita AI 是您實現 AI 抱負的全方位雲端平台。整合 API、無伺服器、GPU 實例——您需要的成本效益工具。省略基礎設施,免費開始,讓您的 AI 願景成真。

推薦閱讀