Skip to content

Koog 提供了一組抽象和實作,用於以供應商無關 (provider-agnostic) 的方式使用來自各種大型語言模型 (LLM) 供應商的模型。這組類別包含以下內容:

  • LLMCapability: 一個類別層次結構,定義了 LLM 可以支援的各種功能,例如:

    • 用於控制回應隨機性的溫度調整
    • 用於外部系統互動的工具整合
    • 用於處理視覺資料的視覺處理
    • 用於向量表示的嵌入生成
    • 用於文本生成任務的完成
    • 用於結構化資料的結構描述支援 (JSON,含簡易和完整變體)
    • 用於探索性回應的推測
  • LLModel: 一個資料類別,表示一個特定的 LLM 及其供應商、唯一識別符和支援的功能。

這為以統一方式與不同 LLM 供應商互動奠定了基礎,讓應用程式能夠使用各種模型,同時抽象化供應商特定的細節。

LLM 功能

LLM 功能代表大型語言模型可以支援的特定特性或功能。在 Koog 框架中,功能用於定義特定模型能做什麼以及如何配置。每個功能都表示為 LLMCapability 類別的子類別或資料物件。

在您的應用程式中配置 LLM 以供使用時,您透過在建立 LLModel 實例時將其新增到 capabilities 清單中,來指定它支援哪些功能。這讓框架能夠正確地與模型互動並適當地使用其特性。

核心功能

以下清單包含 Koog 框架中可用於模型的核心、LLM 特定功能:

  • 推測 (LLMCapability.Speculation): 讓模型生成具有不同程度可能性的推測性或探索性回應。對於需要更廣泛潛在結果的創意或假設性場景很有用。

  • 溫度 (LLMCapability.Temperature): 允許調整模型回應的隨機性或創意程度。較高的溫度值會產生更多樣化的輸出,而較低的值會產生更集中且確定性的回應。

  • 工具 (LLMCapability.Tools): 表示支援外部工具使用或整合。此功能讓模型執行特定工具或與外部系統互動。

  • 工具選擇 (LLMCapability.ToolChoice): 配置工具呼叫與 LLM 的運作方式。根據模型,它可以配置為:

    • 自動在生成文本或工具呼叫之間選擇
    • 僅生成工具呼叫,從不生成文本
    • 僅生成文本,從不生成工具呼叫
    • 強制呼叫定義工具中的特定工具
  • 多重選擇 (LLMCapability.MultipleChoices): 讓模型針對單一提示生成多個獨立的回覆選擇。

媒體處理功能

以下清單代表一套用於處理圖像或音訊等媒體內容的功能:

  • 視覺 (LLMCapability.Vision): 一個用於基於視覺的功能的類別,可處理、分析並推斷視覺資料中的見解。 支援以下類型的視覺資料:

    • 圖像 (LLMCapability.Vision.Image): 處理圖像相關的視覺任務,例如圖像分析、識別和解讀。
    • 視訊 (LLMCapability.Vision.Video): 處理視訊資料,包括分析和理解視訊內容。
  • 音訊 (LLMCapability.Audio): 提供音訊相關功能,例如轉錄、音訊生成或基於音訊的互動。

  • 文件 (LLMCapability.Document): 啟用對基於文件的輸入和輸出的處理。

文本處理功能

以下功能清單代表文本生成和處理功能:

  • 嵌入 (LLMCapability.Embed): 讓模型從輸入文本生成向量嵌入,從而實現相似性比較、分群和其他基於向量的分析。

  • 完成 (LLMCapability.Completion): 包括根據給定輸入上下文生成文本或內容,例如完成句子、生成建議或產生與輸入資料一致的內容。

  • 提示快取 (LLMCapability.PromptCaching): 支援提示的快取功能,潛在地提高重複或相似查詢的效能。

  • 調節 (LLMCapability.Moderation): 讓模型分析文本中潛在的有害內容,並根據騷擾、仇恨言論、自殘、性內容、暴力等各種類別進行分類。

結構描述功能

以下清單指示與處理結構化資料相關的功能:

  • 結構描述 (LLMCapability.Schema): 一個用於結構化結構描述功能的類別,與使用特定格式的資料互動和編碼相關。 包含對以下格式的支援:
    • JSON (LLMCapability.Schema.JSON): JSON 結構描述支援,具有不同級別:
      • 基本 (LLMCapability.Schema.JSON.Basic): 提供輕量級或基本 JSON 處理功能。
      • 標準 (LLMCapability.Schema.JSON.Standard): 提供全面的 JSON 結構描述支援,用於複雜資料結構。

建立模型 (LLModel) 配置

若要以通用、供應商無關的方式定義模型,請建立 LLModel 類別的實例作為模型配置,並使用以下參數:

名稱資料類型必要預設說明
providerLLMProviderLLM 的供應商,例如 Google 或 OpenAI。這用於識別建立或託管模型的公司或組織。
idStringLLM 實例的唯一識別符。這通常表示特定的模型版本或名稱。例如,gpt-4-turboclaude-3-opusllama-3-2
capabilitiesList<LLMCapability>LLM 支援的功能清單,例如溫度調整、工具使用或基於結構描述的任務。這些功能定義了模型能做什麼以及如何配置它。
contextLengthLongLLM 的上下文長度。這是 LLM 可處理的最大 Token 數。
maxOutputTokensLongnull供應商可為 LLM 生成的最大 Token 數。

範例

本節提供了使用不同功能建立 LLModel 實例的詳細範例。

以下程式碼表示具有核心功能的基礎 LLM 配置:

kotlin
val basicModel = LLModel(
    provider = LLMProvider.OpenAI,
    id = "gpt-4-turbo",
    capabilities = listOf(
        LLMCapability.Temperature,
        LLMCapability.Tools,
        LLMCapability.Schema.JSON.Standard
    ),
    contextLength = 128_000
)

以下模型配置是一個具有視覺能力的多模態 LLM:

kotlin
val visionModel = LLModel(
    provider = LLMProvider.OpenAI,
    id = "gpt-4-vision",
    capabilities = listOf(
        LLMCapability.Temperature,
        LLMCapability.Vision.Image,
        LLMCapability.MultipleChoices
    ),
    contextLength = 1_047_576,
    maxOutputTokens = 32_768
)

一個具有音訊處理能力的 LLM:

kotlin
val audioModel = LLModel(
    provider = LLMProvider.Anthropic,
    id = "claude-3-opus",
    capabilities = listOf(
        LLMCapability.Audio,
        LLMCapability.Temperature,
        LLMCapability.PromptCaching
    ),
    contextLength = 200_000
)

除了建立 LLModel 實例並必須指定所有相關參數之外,Koog 還包含預定義模型及其支援功能的配置集合。 若要使用預定義的 Ollama 模型,請如下指定:

kotlin
val metaModel = OllamaModels.Meta.LLAMA_3_2

若要檢查模型是否支援特定功能,請使用 contains 方法檢查 capabilities 清單中是否存在該功能:

kotlin
// Check if models support specific capabilities
val supportsTools = basicModel.capabilities.contains(LLMCapability.Tools) // true
val supportsVideo = visionModel.capabilities.contains(LLMCapability.Vision.Video) // false

// Check for schema capabilities
val jsonCapability = basicModel.capabilities.filterIsInstance<LLMCapability.Schema.JSON>().firstOrNull()
val hasFullJsonSupport = jsonCapability is LLMCapability.Schema.JSON.Standard // true

各模型支援的 LLM 功能

本參考資料顯示了不同供應商的每個模型支援哪些 LLM 功能。

在下表中:

  • 表示模型支援該功能
  • - 表示模型不支援該功能
  • 對於 JSON Schema,FullSimple 表示模型支援的 JSON Schema 變體

Google 模型

模型溫度JSON Schema完成多重選擇工具工具選擇視覺 (圖像)視覺 (視訊)音訊
Gemini2_5ProFull
Gemini2_5FlashFull--
Gemini2_0FlashFull
Gemini2_0Flash001Full
Gemini2_0FlashLiteFull
Gemini2_0FlashLite001Full
Gemini1_5ProFull
Gemini1_5ProLatestFull
Gemini1_5Pro002Full
Gemini1_5FlashFull
Gemini1_5FlashLatestFull--
Gemini1_5Flash002Full--
Gemini1_5Flash8BFull--
Gemini1_5Flash8B001Full--
Gemini1_5Flash8BLatestFull--

OpenAI 模型

模型溫度JSON Schema完成多重選擇工具工具選擇視覺 (圖像)視覺 (視訊)音訊推測調節
Reasoning.GPT4oMiniFull---
Reasoning.O3MiniFull----
Reasoning.O1Mini-Full------
Reasoning.O3-Full---
Reasoning.O1-Full---
Chat.GPT4oFull---
Chat.GPT4_1Full---
Audio.GPT4oMiniAudio------
Audio.GPT4oAudio------
Moderation.Omni---------
Moderation.Text----------

Anthropic 模型

模型溫度JSON Schema完成工具工具選擇視覺 (圖像)
Opus_4Full
Sonnet_4Full
Sonnet_3_7Full
Haiku_3_5Full
Sonnet_3_5Full
Haiku_3Full
Opus_3Full

Ollama 模型

Meta 模型
模型溫度JSON Schema工具調節
LLAMA_3_2_3BSimple-
LLAMA_3_2Simple-
LLAMA_4Simple-
LLAMA_GUARD_3---
阿里巴巴模型
模型溫度JSON Schema工具
QWEN_2_5_05BSimple
QWEN_3_06BSimple
QWQSimple
QWEN_CODER_2_5_32BSimple
Groq 模型
模型溫度JSON Schema工具
LLAMA_3_GROK_TOOL_USE_8BFull
LLAMA_3_GROK_TOOL_USE_70BFull
Granite 模型
模型溫度JSON Schema工具視覺 (圖像)
GRANITE_3_2_VISIONSimple

OpenRouter 模型

模型溫度JSON Schema完成推測工具工具選擇視覺 (圖像)
Phi4ReasoningFull-
Claude3OpusFull
Claude3SonnetFull
Claude3HaikuFull
GPT4Full-
GPT4oFull
GPT4TurboFull
GPT35TurboFull-
Gemini15ProFull
Gemini15FlashFull
Llama3Full-
Llama3InstructFull-
Mistral7BFull-
Mixtral8x7BFull-
Claude3VisionSonnetFull
Claude3VisionOpusFull
Claude3VisionHaikuFull