Skip to content

Koog 提供了一套抽象和实现,用于以与提供商无关的方式处理来自各种 LLM 提供商的大型语言模型 (LLM)。其中包括以下类:

  • LLMCapability:一个类层次结构,定义了 LLM 可支持的各种能力,例如:

    • 用于控制响应随机性的温度调整
    • 用于外部系统交互的工具集成
    • 用于处理视觉数据的视觉处理
    • 用于向量表示的嵌入生成
    • 用于文本生成任务的补全
    • 用于结构化数据的 Schema 支持(带 Simple 和 Full 变体的 JSON)
    • 用于探索性响应的推测
  • LLModel:一个数据类,表示具有其提供商、唯一标识符和支持能力的特定 LLM。

这为以统一方式与不同 LLM 提供商进行交互奠定了基础,允许应用程序处理各种模型,同时抽象出提供商特有的细节。

LLM 能力

LLM 能力表示大型语言模型可以支持的特定特性或功能。在 Koog 框架中,能力用于定义特定模型可以做什么以及如何配置它。每种能力都表示为 LLMCapability 类的子类或数据对象。

在您的应用程序中配置 LLM 以供使用时,您通过在创建 LLModel 实例时将它们添加到 capabilities list 中来指定它支持哪些能力。这允许框架正确地与模型交互并适当地使用其特性。

核心能力

下面的 list 包含了 Koog 框架中模型可用的核心 LLM 特有的能力:

  • 推测 (LLMCapability.Speculation):让模型生成具有不同可能性程度的推测性或探索性响应。适用于需要更广泛潜在结果的创造性或假设场景。

  • 温度 (LLMCapability.Temperature):允许调整模型的响应随机性或创造力水平。较高的温度值会产生更多样化的输出,而较低的值会导致更专注和确定性的响应。

  • 工具 (LLMCapability.Tools):表示支持外部工具使用或集成。此能力让模型运行特定工具或与外部系统交互。

  • 工具选择 (LLMCapability.ToolChoice):配置工具调用如何与 LLM 协同工作。根据模型,它可以配置为:

    • 自动选择生成文本或工具调用
    • 仅生成工具调用,从不生成文本
    • 仅生成文本,从不生成工具调用
    • 强制调用已定义工具中的特定工具
  • 多项选择 (LLMCapability.MultipleChoices):让模型为单个提示生成多个独立的回复选择。

媒体处理能力

以下 list 表示用于处理图像或音频等媒体内容的一组能力:

  • 视觉 (LLMCapability.Vision):一个用于基于视觉的能力的类,可处理、分析和推断视觉数据中的洞察。 支持以下类型的视觉数据:

    • 图像 (LLMCapability.Vision.Image):处理图像相关的视觉任务,例如图像分析、识别和解释。
    • 视频 (LLMCapability.Vision.Video):处理视频数据,包括分析和理解视频内容。
  • 音频 (LLMCapability.Audio):提供与音频相关的功能,例如转录、音频生成或基于音频的交互。

  • 文档 (LLMCapability.Document):启用对基于文档的输入和输出的处理。

文本处理能力

以下能力 list 表示文本生成和处理功能:

  • 嵌入 (LLMCapability.Embed):让模型从输入文本生成向量嵌入,从而实现相似度比较、聚类及其他基于向量的分析。

  • 补全 (LLMCapability.Completion):包括根据给定输入上下文生成文本或内容,例如补全句子、生成建议或生成与输入数据一致的内容。

  • 提示缓存 (LLMCapability.PromptCaching):支持提示的缓存功能,潜在地提高重复或相似查询的性能。

  • 内容审核 (LLMCapability.Moderation):让模型分析文本中潜在有害内容,并根据骚扰、仇恨言论、自残、色情内容、暴力等各种类别进行分类。

Schema 能力

下面的 list 指示与处理结构化数据相关的能力:

  • Schema (LLMCapability.Schema):一个用于结构化 Schema 能力的类,与使用特定格式进行数据交互和编码相关。 包括对以下格式的支持:
    • JSON (LLMCapability.Schema.JSON):JSON Schema 支持,具有不同级别:
      • 基础 (LLMCapability.Schema.JSON.Basic):提供轻量级或基础的 JSON 处理能力。
      • 标准 (LLMCapability.Schema.JSON.Standard):提供全面的 JSON Schema 支持,适用于复杂数据结构。

创建模型 (LLModel) 配置

为了以通用、与提供商无关的方式定义模型,请创建 LLModel 类实例作为模型配置,并使用以下参数:

名称数据类型必需默认值描述
providerLLMProviderYesLLM 提供商,例如 Google 或 OpenAI。这标识了创建或托管模型的公司或组织。
idStringYesLLM 实例的唯一标识符。这通常表示特定的模型版本或名称。例如,gpt-4-turboclaude-3-opusllama-3-2
capabilitiesList<LLMCapability>YesLLM 支持的能力 list,例如温度调整、工具使用或基于 Schema 的任务。这些能力定义了模型可以做什么以及如何配置它。
contextLengthLongYesLLM 的上下文长度。这是 LLM 可处理的最大 token 数量。
maxOutputTokensLongNonull提供商可为 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 list 中是否存在该能力:

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 models

ModelTemperatureJSON SchemaCompletionMultiple ChoicesToolsTool Choice视觉 (图像)视觉 (视频)Audio
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 models

ModelTemperatureJSON SchemaCompletionMultiple ChoicesToolsTool Choice视觉 (图像)视觉 (视频)Audio推测内容审核
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 models

ModelTemperatureJSON SchemaCompletionToolsTool Choice视觉 (图像)
Opus_4Full
Sonnet_4Full
Sonnet_3_7Full
Haiku_3_5Full
Sonnet_3_5Full
Haiku_3Full
Opus_3Full

Ollama models

Meta models
ModelTemperatureJSON SchemaTools内容审核
LLAMA_3_2_3BSimple-
LLAMA_3_2Simple-
LLAMA_4Simple-
LLAMA_GUARD_3---
Alibaba models
ModelTemperatureJSON SchemaTools
QWEN_2_5_05BSimple
QWEN_3_06BSimple
QWQSimple
QWEN_CODER_2_5_32BSimple
Groq models
ModelTemperatureJSON SchemaTools
LLAMA_3_GROK_TOOL_USE_8BFull
LLAMA_3_GROK_TOOL_USE_70BFull
Granite models
ModelTemperatureJSON SchemaTools视觉 (图像)
GRANITE_3_2_VISIONSimple

OpenRouter models

ModelTemperatureJSON SchemaCompletion推测ToolsTool Choice视觉 (图像)
Phi4ReasoningFull-
Claude3OpusFull
Claude3SonnetFull
Claude3HaikuFull
GPT4Full-
GPT4oFull
GPT4TurboFull
GPT35TurboFull-
Gemini15ProFull
Gemini15FlashFull
Llama3Full-
Llama3InstructFull-
Mistral7BFull-
Mixtral8x7BFull-
Claude3VisionSonnetFull
Claude3VisionOpusFull
Claude3VisionHaikuFull