LLM 参数
本页面详细介绍了 Koog 代理框架中的 LLM 参数。LLM 参数允许您控制和自定义语言模型的行为。
概览
LLM 参数是允许您微调语言模型生成响应方式的配置选项。这些参数控制响应的随机性、长度、格式和工具使用等方面。通过调整参数,您可以针对不同的用例优化模型行为,从创意内容生成到确定性的结构化输出。
在 Koog 中,LLMParams 类整合了 LLM 参数,并为配置语言模型行为提供了一致的接口。您可以通过以下方式使用 LLM 参数:
- 在创建提示词时:
val prompt = prompt(
id = "dev-assistant",
params = LLMParams(
temperature = 0.7,
maxTokens = 500
)
) {
// 添加系统消息以设置上下文
system("You are a helpful assistant.")
// 添加用户消息
user("Tell me about Kotlin")
}Prompt prompt = Prompt.builder("dev-assistant")
.withParams(new LLMParams(
0.7, // temperature
500, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
null, // user
null // additionalProperties
))
.system("You are a helpful assistant.")
.user("Tell me about Kotlin")
.build();有关提示词创建的更多信息,请参阅提示词。
- 在创建子图时:
val processQuery by subgraphWithTask<String, String>(
tools = listOf(searchTool, calculatorTool, weatherTool),
llmModel = OpenAIModels.Chat.GPT4o,
llmParams = LLMParams(
temperature = 0.7,
maxTokens = 500
),
parallelTools = false,
assistantResponseRepeatMax = 3,
) { userQuery ->
"""
You are a helpful assistant that can answer questions about various topics.
Please help with the following query:
$userQuery
"""
}有关 Koog 中现有子图类型的更多信息,请参阅预定义子图。要了解如何创建和实现您自己的子图,请参阅自定义子图。
- 在 LLM 写入会话中更新提示词时:
llm.writeSession {
changeLLMParams(
LLMParams(
temperature = 0.7,
maxTokens = 500
)
)
}有关会话的更多信息,请参阅 LLM 会话和手动历史记录管理。
LLM 参数参考
下表提供了 LLMParams 类中包含的 LLM 参数参考,Koog 提供的所有开箱即用的 LLM 提供商均支持这些参数。 有关某些提供商特定的参数列表,请参阅提供商特定参数。
| 参数 | 类型 | 描述 |
|---|---|---|
temperature | Double | 控制输出的随机性。较高的值(如 0.7–1.0)会产生更多样化和更具创造性的响应,而较低的值会产生更具确定性和更集中的响应。 |
maxTokens | Integer | 响应中生成的最大 token 数量。用于控制响应长度。 |
numberOfChoices | Integer | 要生成的备选响应数量。必须大于 0。 |
speculation | String | 影响模型行为的推测配置字符串,旨在提高结果速度和准确性。仅某些模型支持,但可能会极大提高速度和准确性。 |
schema | Schema | 定义模型响应格式的结构,支持 JSON 等结构化输出。有关更多信息,请参阅 Schema。 |
toolChoice | ToolChoice | 控制语言模型的工具调用行为。有关更多信息,请参阅工具选择。 |
user | String | 发起请求的用户的标识符,可用于跟踪目的。 |
additionalProperties | Map<String, JsonElement> | 可用于存储特定于某些模型提供商的自定义参数的附加属性。 |
有关每个参数默认值的列表,请参阅相应的 LLM 提供商文档:
Schema
Schema 接口定义了模型响应格式的结构。 Koog 支持 JSON schema,如下节所述。
JSON schema
JSON schema 允许您向语言模型请求结构化的 JSON 数据。Koog 支持以下两种类型的 JSON schema:
- 基础 JSON Schema (
LLMParams.Schema.JSON.Basic):用于基础 JSON 处理能力。此格式主要侧重于嵌套数据定义,不包含高级 JSON Schema 功能。
// 使用基础 JSON schema 创建参数
val jsonParams = LLMParams(
temperature = 0.2,
schema = LLMParams.Schema.JSON.Basic(
name = "PersonInfo",
schema = JsonObject(mapOf(
"type" to JsonPrimitive("object"),
"properties" to JsonObject(
mapOf(
"name" to JsonObject(mapOf("type" to JsonPrimitive("string"))),
"age" to JsonObject(mapOf("type" to JsonPrimitive("number"))),
"skills" to JsonObject(
mapOf(
"type" to JsonPrimitive("array"),
"items" to JsonObject(mapOf("type" to JsonPrimitive("string")))
)
)
)
),
"additionalProperties" to JsonPrimitive(false),
"required" to JsonArray(listOf(JsonPrimitive("name"), JsonPrimitive("age"), JsonPrimitive("skills")))
))
)
)// 使用基础 JSON schema 创建参数
LLMParams jsonParams = new LLMParams(
0.2, // temperature
null, // maxTokens
1, // numberOfChoices
null, // speculation
new LLMParams.Schema.JSON.Basic(
"PersonInfo",
new JsonObject(Map.of(
"type", new JsonPrimitive("object"),
"properties", new JsonObject(Map.of(
"name", new JsonObject(Map.of("type", new JsonPrimitive("string"))),
"age", new JsonObject(Map.of("type", new JsonPrimitive("number"))),
"skills", new JsonObject(Map.of(
"type", new JsonPrimitive("array"),
"items", new JsonObject(Map.of("type", new JsonPrimitive("string")))
))
)),
"additionalProperties", new JsonPrimitive(false),
"required", new JsonArray(List.of(
new JsonPrimitive("name"),
new JsonPrimitive("age"),
new JsonPrimitive("skills")
))
))
),
LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
null, // user
null // additionalProperties
);- 标准 JSON Schema (
LLMParams.Schema.JSON.Standard):表示符合 json-schema.org 的标准 JSON schema。此格式是官方 JSON Schema 规范的子集。请注意,不同 LLM 提供商的具体实现可能会有所不同,因为并非所有提供商都支持完整的 JSON schema。
// 使用标准 JSON schema 创建参数
val standardJsonParams = LLMParams(
temperature = 0.2,
schema = LLMParams.Schema.JSON.Standard(
name = "ProductCatalog",
schema = JsonObject(mapOf(
"type" to JsonPrimitive("object"),
"properties" to JsonObject(mapOf(
"products" to JsonObject(mapOf(
"type" to JsonPrimitive("array"),
"items" to JsonObject(mapOf(
"type" to JsonPrimitive("object"),
"properties" to JsonObject(mapOf(
"id" to JsonObject(mapOf("type" to JsonPrimitive("string"))),
"name" to JsonObject(mapOf("type" to JsonPrimitive("string"))),
"price" to JsonObject(mapOf("type" to JsonPrimitive("number"))),
"description" to JsonObject(mapOf("type" to JsonPrimitive("string")))
)),
"additionalProperties" to JsonPrimitive(false),
"required" to JsonArray(listOf(JsonPrimitive("id"), JsonPrimitive("name"), JsonPrimitive("price"), JsonPrimitive("description")))
))
))
)),
"additionalProperties" to JsonPrimitive(false),
"required" to JsonArray(listOf(JsonPrimitive("products")))
))
)
)// 使用标准 JSON schema 创建参数
LLMParams standardJsonParams = new LLMParams(
0.2, // temperature
null, // maxTokens
1, // numberOfChoices
null, // speculation
new LLMParams.Schema.JSON.Standard(
"ProductCatalog",
new JsonObject(Map.of(
"type", new JsonPrimitive("object"),
"properties", new JsonObject(Map.of(
"products", new JsonObject(Map.of(
"type", new JsonPrimitive("array"),
"items", new JsonObject(Map.of(
"type", new JsonPrimitive("object"),
"properties", new JsonObject(Map.of(
"id", new JsonObject(Map.of("type", new JsonPrimitive("string"))),
"name", new JsonObject(Map.of("type", new JsonPrimitive("string"))),
"price", new JsonObject(Map.of("type", new JsonPrimitive("number"))),
"description", new JsonObject(Map.of("type", new JsonPrimitive("string")))
)),
"additionalProperties", new JsonPrimitive(false),
"required", new JsonArray(List.of(
new JsonPrimitive("id"),
new JsonPrimitive("name"),
new JsonPrimitive("price"),
new JsonPrimitive("description")
))
))
))
)),
"additionalProperties", new JsonPrimitive(false),
"required", new JsonArray(List.of(new JsonPrimitive("products")))
))
),
LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
null, // user
null // additionalProperties
);工具选择
ToolChoice 类控制语言模型如何使用工具。它提供以下选项:
LLMParams.ToolChoice.Named:语言模型调用指定的工具。接受一个表示要调用的工具名称的name字符串参数。LLMParams.ToolChoice.All:语言模型调用所有工具。LLMParams.ToolChoice.None:语言模型不调用工具,仅生成文本。LLMParams.ToolChoice.Auto:语言模型自动决定是否调用工具以及调用哪个工具。LLMParams.ToolChoice.Required:语言模型至少调用一个工具。
以下是使用 LLMParams.ToolChoice.Named 类调用特定工具的示例:
val specificToolParams = LLMParams(
toolChoice = LLMParams.ToolChoice.Named(name = "calculator")
)LLMParams specificToolParams = new LLMParams(
null, // temperature
null, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
new LLMParams.ToolChoice.Named("calculator"), // toolChoice
null, // user
null // additionalProperties
);提供商特定参数
Koog 支持某些 LLM 提供商的特定参数。这些参数扩展了基础 LLMParams 类并添加了特定于提供商的功能。以下类包含各提供商特定的参数:
OpenAIChatParams:特定于 OpenAI Chat Completions API 的参数。OpenAIResponsesParams:特定于 OpenAI Responses API 的参数。GoogleParams:特定于 Google 模型的参数。AnthropicParams:特定于 Anthropic 模型的参数。MistralAIParams:特定于 Mistral 模型的参数。DeepSeekParams:特定于 DeepSeek 模型的参数。OpenRouterParams:特定于 OpenRouter 模型的参数。DashscopeParams:特定于阿里巴巴模型的参数。OllamaParams:特定于 Ollama 模型的参数。
以下是 Koog 中提供商特定参数的完整参考:
| 形参 | 类型 | 描述 |
|---|---|---|
audio | OpenAIAudioConfig | 使用支持音频的模型时的音频输出配置。有关更多信息,请参阅 OpenAIAudioConfig 的 API 文档。 |
frequencyPenalty | Double | 对高频 token 进行惩罚以减少重复。较高的 frequencyPenalty 值会导致更丰富的用词变化并减少重复。取值范围为 -2.0 到 2.0。 |
logprobs | Boolean | 如果为 true,则包含输出 token 的对数概率。 |
parallelToolCalls | Boolean | 如果为 true,则可以并行运行多个工具调用。特别适用于智能体策略之外的自定义节点或 LLM 交互。 |
presencePenalty | Double | 防止模型重复使用已包含在输出中的 token。较高的值会鼓励引入新的 token 和主题。取值范围为 -2.0 到 2.0。 |
promptCacheKey | String | 用于提示词缓存的稳定缓存键。OpenAI 使用它来为类似的请求缓存响应。 |
reasoningEffort | ReasoningEffort | 指定模型将使用的推理力度级别。有关更多信息和可用值,请参阅 ReasoningEffort 的 API 文档。 |
safetyIdentifier | String | 一个稳定且唯一的用户标识符,可用于检测违反 OpenAI 政策的用户。 |
serviceTier | ServiceTier | OpenAI 处理层级选择,允许您优先考虑性能而非成本,反之亦然。有关更多信息,请参阅 ServiceTier 的 API 文档。 |
stop | List<String> | 向模型发出信号的字符串,表示模型在遇到其中任何一个字符串时应停止生成内容。例如,要让模型在产生两个换行符时停止生成内容,可以将停止序列指定为 stop = listOf("/n/n")。 |
store | Boolean | 如果为 true,提供商可能会存储输出以便以后检索。 |
topLogprobs | Integer | 每个位置最有可能出现的顶级 token 数量。取值范围为 0–20。需要将 logprobs 形参设置为 true。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
webSearchOptions | OpenAIWebSearchOptions | 配置网络搜索工具的使用(如果支持)。有关更多信息,请参阅 OpenAIWebSearchOptions 的 API 文档。 |
| 形参 | 类型 | 描述 |
|---|---|---|
background | Boolean | 在后台运行响应。 |
include | List<OpenAIInclude> | 要包含在模型响应中的附加数据,例如网络搜索工具调用的来源或文件搜索工具调用的搜索结果。有关详细参考信息,请参阅 Koog API 参考中的 OpenAIInclude。要了解有关 include 形参的更多信息,请参阅 OpenAI 文档。 |
logprobs | Boolean | 如果为 true,则包含输出 token 的对数概率。 |
maxToolCalls | Integer | 此响应中允许的最大内置工具调用总数。取值范围为大于或等于 0。 |
parallelToolCalls | Boolean | 如果为 true,则可以并行运行多个工具调用。特别适用于智能体策略之外的自定义节点或 LLM 交互。 |
promptCacheKey | String | 用于提示词缓存的稳定缓存键。OpenAI 使用它来为类似的请求缓存响应。 |
reasoning | ReasoningConfig | 推理能力模型的推理配置。有关更多信息,请参阅 ReasoningConfig 的 API 文档。 |
safetyIdentifier | String | 一个稳定且唯一的用户标识符,可用于检测违反 OpenAI 政策的用户。 |
serviceTier | ServiceTier | OpenAI 处理层级选择,允许您优先考虑性能而非成本,反之亦然。有关更多信息,请参阅 ServiceTier 的 API 文档。 |
store | Boolean | 如果为 true,提供商可能会存储输出以便以后检索。 |
topLogprobs | Integer | 每个位置最有可能出现的顶级 token 数量。取值范围为 0–20。需要将 logprobs 形参设置为 true。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
truncation | Truncation | 接近上下文窗口时的截断策略。有关更多信息,请参阅 Truncation 的 API 文档。 |
| 形参 | 类型 | 描述 |
|---|---|---|
thinkingConfig | GoogleThinkingConfig | 控制模型是否应公开其思维链,以及可以为此消耗多少 token。有关更多信息,请参阅 GoogleThinkingConfig 的 API 参考。 |
topK | Integer | 生成输出时要考虑的顶级 token 数量。取值范围为大于或等于 0(可能适用特定提供商的最小值)。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
| 形参 | 类型 | 描述 |
|---|---|---|
container | String | 跨请求重用的容器标识符。Anthropic 的代码执行工具使用容器来提供安全且容器化的代码执行环境。通过提供之前响应中的容器标识符,您可以跨多个请求重用容器,从而在请求之间保留创建的文件。有关更多信息,请参阅 Anthropic 文档中的 Containers。 |
mcpServers | List<AnthropicMCPServerURLDefinition> | 请求中要使用的 MCP 服务器定义。最多支持 20 个服务器。有关更多信息,请参阅 AnthropicMCPServerURLDefinition 的 API 参考。 |
serviceTier | ServiceTier | OpenAI 处理层级选择,允许您优先考虑性能而非成本,反之亦然。有关更多信息,请参阅 ServiceTier 的 API 文档。 |
stopSequences | List<String> | 导致模型停止生成内容的自定义文本序列。如果匹配,响应中 stop_reason 的值为 stop_sequence。 |
thinking | AnthropicThinking | 激活 Claude 扩展思维的配置。激活后,响应还包括思维内容块。有关更多信息,请参阅 AnthropicThinking 的 API 参考。 |
topK | Integer | 生成输出时要考虑的顶级 token 数量。取值范围为大于或等于 0(可能适用特定提供商的最小值)。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
| 形参 | 类型 | 描述 |
|---|---|---|
frequencyPenalty | Double | 对高频 token 进行惩罚以减少重复。较高的 frequencyPenalty 值会导致更丰富的用词变化并减少重复。取值范围为 -2.0 到 2.0。 |
parallelToolCalls | Boolean | 如果为 true,则可以并行运行多个工具调用。特别适用于智能体策略之外的自定义节点或 LLM 交互。 |
presencePenalty | Double | 防止模型重复使用已包含在输出中的 token。较高的值会鼓励引入新的 token 和主题。取值范围为 -2.0 到 2.0。 |
promptMode | String | 允许您在推理模式和无系统提示词之间切换。设置为 reasoning 时,将使用推理模型的默认系统提示词。有关更多信息,请参阅 Mistral 的 Reasoning 文档。 |
randomSeed | Integer | 用于随机采样的种子。如果设置,具有相同形参和相同种子值的不同调用将生成确定性的结果。 |
safePrompt | Boolean | 指定是否在所有对话之前注入安全提示词。安全提示词用于执行护栏并防止有害内容。有关更多信息,请参阅 Mistral 的 Moderation & Guardarailing 文档。 |
stop | List<String> | 向模型发出信号的字符串,表示模型在遇到其中任何一个字符串时应停止生成内容。例如,要让模型在产生两个换行符时停止生成内容,可以将停止序列指定为 stop = listOf("/n/n")。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
| 形参 | 类型 | 描述 |
|---|---|---|
frequencyPenalty | Double | 对高频 token 进行惩罚以减少重复。较高的 frequencyPenalty 值会导致更丰富的用词变化并减少重复。取值范围为 -2.0 到 2.0。 |
logprobs | Boolean | 如果为 true,则包含输出 token 的对数概率。 |
presencePenalty | Double | 防止模型重复使用已包含在输出中的 token。较高的值会鼓励引入新的 token 和主题。取值范围为 -2.0 到 2.0。 |
stop | List<String> | 向模型发出信号的字符串,表示模型在遇到其中任何一个字符串时应停止生成内容。例如,要让模型在产生两个换行符时停止生成内容,可以将停止序列指定为 stop = listOf("/n/n")。 |
topLogprobs | Integer | 每个位置最有可能出现的顶级 token 数量。取值范围为 0–20。需要将 logprobs 形参设置为 true。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
| 形参 | 类型 | 描述 |
|---|---|---|
frequencyPenalty | Double | 对高频 token 进行惩罚以减少重复。较高的 frequencyPenalty 值会导致更丰富的用词变化并减少重复。取值范围为 -2.0 到 2.0。 |
logprobs | Boolean | 如果为 true,则包含输出 token 的对数概率。 |
minP | Double | 过滤掉相对于最有可能出现的 token 的概率低于定义的 minP 值的 token。取值范围为 0.0–0.1。 |
models | List<String> | 请求允许的模型列表。 |
presencePenalty | Double | 防止模型重复使用已包含在输出中的 token。较高的值会鼓励引入新的 token 和主题。取值范围为 -2.0 到 2.0。 |
provider | ProviderPreferences | 包含一系列形参,允许您显式控制 OpenRouter 如何选择要使用的 LLM 提供商。有关更多信息,请参阅 ProviderPreferences 的 API 文档。 |
repetitionPenalty | Double | 对 token 重复进行惩罚。对于已出现在输出中的 token,其后续 token 概率将除以 repetitionPenalty 的值,如果 repetitionPenalty > 1,这将降低它们再次出现的可能性。取值范围为大于 0.0 且小于或等于 2.0。 |
route | String | 要使用的请求路由策略。 |
stop | List<String> | 向模型发出信号的字符串,表示模型在遇到其中任何一个字符串时应停止生成内容。例如,要让模型在产生两个换行符时停止生成内容,可以将停止序列指定为 stop = listOf("/n/n")。 |
topA | Double | 根据模型置信度动态调整采样窗口。如果模型置信度高(存在占主导地位的高概率后续 token),它会将采样窗口限制在少数几个顶级 token 内。如果置信度低(存在许多概率相似的 token),则在采样窗口中保留更多 token。取值范围为 0.0–0.1(含)。值越高表示动态自适应能力越强。 |
topK | Integer | 生成输出时要考虑的顶级 token 数量。取值范围为大于或等于 0(可能适用特定提供商的最小值)。 |
topLogprobs | Integer | 每个位置最有可能出现的顶级 token 数量。取值范围为 0–20。需要将 logprobs 形参设置为 true。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
transforms | List<String> | 上下文转换列表。定义当上下文超过模型的 token 限制时如何转换。默认转换为 middle-out,即从提示词中间进行截断。使用空列表表示不进行转换。有关更多信息,请参阅 OpenRouter 文档中的 Message Transforms。 |
| 形参 | 类型 | 描述 |
|---|---|---|
enableSearch | Boolean | 指定是否启用网络搜索功能。有关更多信息,请参阅阿里云的网络搜索文档。 |
enableThinking | Boolean | 指定在使用混合思维模型时是否启用思维模式。有关更多信息,请参阅阿里云关于深度思考的文档。 |
frequencyPenalty | Double | 对高频 token 进行惩罚以减少重复。较高的 frequencyPenalty 值会导致更丰富的用词变化并减少重复。取值范围为 -2.0 到 2.0。 |
logprobs | Boolean | 如果为 true,则包含输出 token 的对数概率。 |
parallelToolCalls | Boolean | 如果为 true,则可以并行运行多个工具调用。特别适用于智能体策略之外的自定义节点或 LLM 交互。 |
presencePenalty | Double | 防止模型重复使用已包含在输出中的 token。较高的值会鼓励引入新的 token 和主题。取值范围为 -2.0 到 2.0。 |
stop | List<String> | 向模型发出信号的字符串,表示模型在遇到其中任何一个字符串时应停止生成内容。例如,要让模型在产生两个换行符时停止生成内容,可以将停止序列指定为 stop = listOf("/n/n")。 |
topLogprobs | Integer | 每个位置最有可能出现的顶级 token 数量。取值范围为 0–20。需要将 logprobs 形参设置为 true。 |
topP | Double | 也称为核采样。通过将具有最高概率值的 token 添加到子集中,直到它们的概率总和达到指定的 topP 值,从而创建后续 token 的子集。取值范围为大于 0.0 且小于或等于 1.0。 |
| 形参 | 类型 | 描述 |
|---|---|---|
think | Boolean | 激活 Ollama 扩展思维的配置。激活后,响应还包括思维内容块。有关更多信息,请参阅 Ollama 扩展思维 的 API 参考。 |
以下示例展示了使用提供商特定的 OpenRouterParams 类定义的 OpenRouter LLM 参数:
val openRouterParams = OpenRouterParams(
temperature = 0.7,
maxTokens = 500,
frequencyPenalty = 0.5,
presencePenalty = 0.5,
topP = 0.9,
topK = 40,
repetitionPenalty = 1.1,
models = listOf("anthropic/claude-3-opus", "anthropic/claude-3-sonnet"),
transforms = listOf("middle-out")
)OpenRouterParams openRouterParams = new OpenRouterParams(
0.7, // temperature
500, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
null, // toolChoice
null, // user
null, // additionalProperties
0.5, // frequencyPenalty
null, // logprobs
null, // minP
Arrays.asList("anthropic/claude-3-opus", "anthropic/claude-3-sonnet"), // models
0.5, // presencePenalty
null, // provider
1.1, // repetitionPenalty
null, // route
null, // stop
null, // topA
40, // topK
null, // topLogprobs
0.9, // topP
Arrays.asList("middle-out") // transforms
);使用示例
基础用法
// 具有限制长度的基础参数集
val basicParams = LLMParams(
temperature = 0.7,
maxTokens = 150,
toolChoice = LLMParams.ToolChoice.Auto
)// 具有限制长度的基础参数集
LLMParams basicParams = new LLMParams(
0.7, // temperature
150, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
null, // user
null // additionalProperties
);推理控制
您可以通过控制模型推理的提供商特定参数来实现推理控制。 当使用 OpenAI Chat API 以及支持推理的模型时,使用 reasoningEffort 参数来控制模型在提供响应之前生成的推理 token 数量:
val openAIReasoningEffortParams = OpenAIChatParams(
reasoningEffort = ReasoningEffort.MEDIUM
)OpenAIChatParams openAIReasoningEffortParams = new OpenAIChatParams(
null, // temperature
null, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
null, // toolChoice
null, // user
null, // additionalProperties
null, // audio
null, // frequencyPenalty
null, // logprobs
null, // parallelToolCalls
null, // presencePenalty
null, // promptCacheKey
ReasoningEffort.MEDIUM, // reasoningEffort
null, // safetyIdentifier
null, // serviceTier
null, // stop
null, // store
null, // topLogprobs
null, // topP
null // webSearchOptions
);此外,在以无状态模式使用 OpenAI Responses API 时,您会保留推理项的加密历史记录,并在每一轮对话中将其发送给模型。加密是在 OpenAI 端完成的,您需要在请求中将 include 参数设置为 reasoning.encrypted_content 来请求加密的推理 token。 然后,您可以在接下来的对话轮次中将加密的推理 token 传回给模型。
val openAIStatelessReasoningParams = OpenAIResponsesParams(
include = listOf(OpenAIInclude.REASONING_ENCRYPTED_CONTENT)
)OpenAIResponsesParams openAIStatelessReasoningParams = new OpenAIResponsesParams(
null, // temperature
null, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
null, // toolChoice
null, // user
null, // additionalProperties
null, // background
Arrays.asList(OpenAIInclude.REASONING_ENCRYPTED_CONTENT), // include
null, // logprobs
null, // maxToolCalls
null, // parallelToolCalls
null, // promptCacheKey
null, // reasoning
null, // safetyIdentifier
null, // serviceTier
null, // store
null, // topLogprobs
null, // topP
null // truncation
);自定义参数
要添加可能是特定于提供商且 Koog 开箱即用不支持的自定义参数,请使用 additionalProperties 属性,如以下示例所示。
// 为特定的模型提供商添加自定义参数
val customParams = LLMParams(
additionalProperties = additionalPropertiesOf(
"top_p" to 0.95,
"frequency_penalty" to 0.5,
"presence_penalty" to 0.5
)
)// 为特定的模型提供商添加自定义参数
LLMParams customParams = new LLMParams(
null, // temperature
null, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
null, // toolChoice
null, // user
AdditionalPropertiesKt.additionalPropertiesOf(
"top_p", 0.95,
"frequency_penalty", 0.5,
"presence_penalty", 0.5
)
);设置与覆盖参数
下面的代码示例展示了如何定义一组您可能主要使用的 LLM 参数,然后通过部分覆盖原始集合中的值并向其添加新值来创建另一组参数。 这允许您定义大多数请求通用的参数,同时添加更具体的参数组合,而无需重复通用参数。
// 定义默认参数
val defaultParams = LLMParams(
temperature = 0.7,
maxTokens = 150,
toolChoice = LLMParams.ToolChoice.Auto
)
// 创建带有一些覆盖值的参数,其余使用默认值
val overrideParams = LLMParams(
temperature = 0.2,
numberOfChoices = 3
).default(defaultParams)// 定义默认参数
LLMParams defaultParams = new LLMParams(
0.7, // temperature
150, // maxTokens
1, // numberOfChoices
null, // speculation
null, // schema
LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
null, // user
null // additionalProperties
);
// 创建带有一些覆盖值的参数,其余使用默认值
LLMParams overrideParams = new LLMParams(
0.2, // temperature
null, // maxTokens
3, // numberOfChoices
null, // speculation
null, // schema
null, // toolChoice
null, // user
null // additionalProperties
).applyDefaults(defaultParams);生成的 overrideParams 集合中的值等同于以下内容:
val overrideParams = LLMParams(
temperature = 0.2,
maxTokens = 150,
toolChoice = LLMParams.ToolChoice.Auto,
numberOfChoices = 3
)LLMParams overrideParams = new LLMParams(
0.2, // temperature
150, // maxTokens
3, // numberOfChoices
null, // speculation
null, // schema
LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
null, // user
null // additionalProperties
);