Skip to content

Agent

AI Agent 是能够进行推理、做出决策、与环境交互并采取行动以实现特定目标的自主系统。 在 Koog 中,AI Agent 不仅仅是一个 LLM 的包装器; 它是一个为 JVM 生态系统设计的结构化、类型安全的状态机。

Koog Agent 基于以下核心概念构建:

  • prompt 执行器负责管理和执行 prompt,使 Agent 能够与 LLM 交互进行推理和决策。
  • 策略定义了 Agent 的工作流。它可以是有向图、函数或规划器的形式。请参阅 Agent 类型
  • Agent 可以使用工具与外部数据源和服务进行交互。
  • 您可以使用功能来扩展和增强 AI Agent 的功能性。

TIP

有关创建和运行最小化 Agent 的信息,请参阅快速入门

Agent 类型

根据您需要执行的任务,Koog 提供了几种 Agent 类型:

  • 基础 Agent 非常适合不需要任何自定义逻辑的简单任务。这些 Agent 实现了一种适用于大多数常见用例的预定义策略。
  • 基于图的 Agent 提供了对 Agent 工作流、状态管理和可视化的完全控制和灵活性。
  • 函数式 Agent 使您能够快速将自定义逻辑原型化为一个可以访问 Agent 上下文的函数。
  • 规划器 Agent 可以通过迭代循环自主规划并执行多步任务,直到达到所需的最终状态。

Agent 配置

Agent 配置定义了 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 = "你是一个得力的助手。",
    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("你是一个得力的助手。")
    .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("你是一个得力的助手。")
    },
    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("你是一个得力的助手。")
    .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 工作流中的一个节点

  • missingToolsConversionStrategy 定义 Agent 执行期间处理缺失工具的策略。

  • responseProcessor 可用于定义自定义响应处理程序。例如,它可以审核和验证响应内容、更改响应格式或记录响应。