Skip to content

Agent

AI Agent 是能夠進行推理、做出決策、與環境互動並採取行動以達成特定目標的自主系統。 在 Koog 中,AI Agent 不僅僅是 LLM 的包裝函式 (wrapper); 它是一個為 JVM 生態系統設計的結構化、型別安全 (type-safe) 的狀態機。

Koog Agent 是圍繞以下核心概念建構的:

  • Prompt 執行器 管理並執行 Prompt, 使 Agent 能夠與 LLM 互動以進行推理和決策。
  • 策略 (strategy) 定義了 Agent 的工作流程。 它可以是有向圖、函式或規劃器 (planner) 的形式。 請參閱 Agent 類型
  • Agent 可以使用 工具 (tools) 與外部資料源和服務互動。
  • 您可以使用 功能 (features) 來擴展和增強 AI Agent 的功能性。

TIP

有關建立與執行最簡 Agent 的資訊,請參閱 快速入門

Agent 類型

根據您需要執行的任務,Koog 提供了多種 Agent 類型:

Agent 配置

Agent 配置 (configuration) 定義了 Agent 的執行參數, 包括初始 Prompt、語言模型和疊代限制。

TIP

有關建立與執行最簡 Agent 的資訊,請參閱 快速入門

對於簡單的 Agent,除了必要的 Prompt 執行器和語言模型外, 您可以直接在 Agent 建構函式中指定初始系統 Prompt 和其他一些參數:

=== "Kotlin"

<!--- INCLUDE
import ai.koog.agents.core.agent.AIAgent
import ai.koog.prompt.executor.clients.openai.OpenAIModels
import ai.koog.prompt.executor.llms.all.simpleOpenAIExecutor
-->
```kotlin
val agent = AIAgent(
    promptExecutor = simpleOpenAIExecutor(System.getenv("YOUR_API_KEY")),
    llmModel = OpenAIModels.Chat.GPT4o,
    systemPrompt = "You are a helpful assistant.",
    temperature = 0.7,
    maxIterations = 10
)
```
<!--- KNIT example-agent-config-01.kt -->

=== "Java"

<!--- INCLUDE
/**
-->
<!--- SUFFIX
**/
-->
```java
AIAgent<String, String> agent = AIAgent.builder()
    .promptExecutor(simpleOpenAIExecutor(System.getenv("YOUR_API_KEY")))
    .llmModel(OpenAIModels.Chat.GPT4o)
    .systemPrompt("You are a helpful assistant.")
    .temperature(0.7)
    .maxIterations(10)
    .build();
```
<!--- KNIT example-agent-config-java-01.java -->

或者,您可以建立 AIAgentConfig 的執行個體, 以更細粒度地定義 Agent 的行為和參數,然後將其傳遞給 Agent 建構函式。 這使您能夠定義包含多條訊息、對話歷史記錄、LLM 參數以及額外執行參數的複雜 Prompt。

=== "Kotlin"

<!--- INCLUDE
import ai.koog.agents.core.agent.AIAgent
import ai.koog.agents.core.agent.config.AIAgentConfig
import ai.koog.prompt.dsl.prompt
import ai.koog.prompt.executor.clients.openai.OpenAIModels
import ai.koog.prompt.executor.llms.all.simpleOpenAIExecutor
import ai.koog.prompt.params.LLMParams
-->
```kotlin
val agentConfig = AIAgentConfig(
    prompt = prompt(
        id = "assistant",
        params = LLMParams(
            temperature = 0.7
        )
    ) {
        system("You are a helpful assistant.")
    },
    model = OpenAIModels.Chat.GPT4o,
    maxAgentIterations = 10
)

val agent = AIAgent(
    promptExecutor = simpleOpenAIExecutor(System.getenv("OPENAI_API_KEY")),
    agentConfig = agentConfig
)
```
<!--- KNIT example-agent-config-02.kt -->

=== "Java"

<!--- INCLUDE
/**
-->
<!--- SUFFIX
**/
-->
```java
Prompt prompt = Prompt.builder("assistant")
    .system("You are a helpful assistant.")
    .build()
    .withParams(new LLMParams(
        0.7,         // temperature
        null,        // maxTokens
        1,           // numberOfChoices
        null,        // speculation
        null,        // schema
        LLMParams.ToolChoice.Auto.INSTANCE, // toolChoice
        null,        // user
        null         // additionalProperties
    ));

AIAgentConfig agentConfig = AIAgentConfig.builder(OpenAIModels.Chat.GPT4o)
    .prompt(prompt)
    .maxAgentIterations(10)
    .build();

AIAgent<String, String> agent = AIAgent.builder()
    .promptExecutor(simpleOpenAIExecutor(System.getenv("OPENAI_API_KEY")))
    .agentConfig(agentConfig)
    .build();
```
<!--- KNIT example-agent-config-java-02.java -->

以下是 AIAgentConfig 的參數:

  • prompt 定義初始 PromptLLM 參數

  • model 指定 Agent 與之互動的 語言模型。 您可以使用預定義模型之一,或 建立自訂模型配置

  • maxAgentIterations 限制 Agent 在終止前可以執行的最大步數。 每一步都是 Agent 工作流程中的一個 節點 (node)

  • missingToolsConversionStrategy 定義 Agent 執行期間處理缺失工具的策略。

  • responseProcessor 可用於定義自訂回應處理器。 例如,它可以審核並驗證回應內容、更改回應格式或記錄回應。