프롬프트

·3분 읽기

원문: Koog Documentation — prompts/index.md 이 글은 Koog 공식 문서의 prompts/index.md 페이지를 한국어로 옮긴 번역본입니다. 문서 구조와 링크 의미를 유지하되, MkDocs 전용 UI 문법은 블로그에서 읽기 좋도록 정리했습니다.

프롬프트

프롬프트는 응답 생성을 안내하는 LLM(대형 언어 모델)에 대한 지침입니다. 이는 LLM과의 상호 작용 내용과 구조를 정의합니다. 이 섹션에서는 Koog를 사용하여 프롬프트를 생성하고 실행하는 방법을 설명합니다.

프롬프트 만들기

Koog에서 프롬프트는 Prompt의 인스턴스입니다. 다음 속성을 가진 데이터 클래스:

  • id: 프롬프트의 고유 식별자입니다.
  • messages: LLM과의 대화를 나타내는 메시지 목록입니다.
  • params: 선택 사항 LLM configuration parameters(예: 온도, 도구 선택 등).

Prompt 클래스를 직접 인스턴스화할 수 있지만 프롬프트를 생성하는 권장 방법은 Kotlin DSL 또는 Java 빌더 API를 사용하는 것입니다. 대화를 정의하는 구조화된 방법을 제공합니다.

참고 이 페이지의 Kotlin 예시에서는 Kotlin DSL을 사용합니다. Java 예제는 적용 가능한 경우 system(...), user(...), assistant(...), toolCall(...), toolResult(...)withOutput(Foo.class)와 같은 명시적 메소드와 함께 Prompt.builder("id") 빌더를 사용합니다.

코틀린

1val myPrompt = prompt("hello-koog") {2    system("You are a helpful assistant.")3    user("What is Koog?")4}

자바

1var myPrompt = Prompt.builder("hello-koog")2    .system("You are a helpful assistant.")3    .user("What is Koog?")4    .build();

참고 AI 에이전트는 간단한 텍스트 프롬프트를 입력으로 사용할 수 있습니다. 자동으로 텍스트 프롬프트를 Prompt 개체로 변환하고 실행을 위해 LLM으로 보냅니다. 이는 basic agent에 유용합니다. 단일 요청만 실행하면 되며 복잡한 대화 논리가 필요하지 않습니다.

프롬프트 실행

Koog는 LLM에 대한 프롬프트 실행을 위해 LLM 클라이언트와 프롬프트 실행기라는 두 가지 수준의 추상화를 제공합니다. 둘 다 Prompt 개체를 허용하며 AI 에이전트 없이 직접 프롬프트 실행에 사용할 수 있습니다. 실행 흐름은 클라이언트와 실행자 모두 동일합니다.

1flowchart TB2    A([Prompt built with Kotlin DSL or Java builder])3    B{LLM client or prompt executor}4    C[LLM provider]5    D([Response to your application])67    A -->|"passed to"| B8    B -->|"sends request"| C9    C -->|"returns response"| B10    B -->|"returns result"| D

특정 LLM 제공업체와의 직접적인 상호 작용을 위한 저수준 인터페이스입니다. 단일 공급자와 협력하고 고급 수명 주기 관리가 필요하지 않은 경우 이를 사용하세요.


하나 이상의 LLM 클라이언트의 수명주기를 관리하는 높은 수준의 추상화입니다. 여러 공급자에 걸쳐 프롬프트를 실행하기 위해 통합 API가 필요할 때 이를 사용하세요. 이들과 폴백 간의 동적 전환이 가능합니다.

성능 최적화 및 오류 처리

Koog를 사용하면 프롬프트를 실행할 때 성능을 최적화하고 오류를 처리할 수 있습니다.


성능을 최적화하고 반복 요청에 대한 비용을 줄이기 위해 LLM 응답을 캐시합니다.


애플리케이션에 내장된 재시도, 시간 초과 및 기타 오류 처리 메커니즘을 사용하세요.

AI 에이전트의 프롬프트

Koog에서 AI 에이전트는 수명 주기 동안 프롬프트를 유지하고 관리합니다. LLM 클라이언트 또는 실행자는 프롬프트를 실행하는 데 사용되는 반면 에이전트는 프롬프트 업데이트 흐름을 처리하여 다음을 보장합니다. 대화 기록은 관련성과 일관성을 유지합니다.

에이전트의 프롬프트 수명 주기에는 일반적으로 여러 단계가 포함됩니다.

  1. 초기 프롬프트 설정.
  2. 자동 프롬프트 업데이트.
  3. 컨텍스트 창 관리.
  4. 수동 프롬프트 관리.

초기 프롬프트 설정

initialize an agent할 때, 에이전트의 동작을 설정하는 system message을 정의할 수 있습니다. 그런 다음 에이전트의 run() 메서드를 호출하면, 일반적으로 초기 user message를 입력으로 제공합니다. 이러한 메시지는 함께 에이전트의 초기 프롬프트를 구성합니다. 예를 들어:

코틀린

1// Create an agent2val agent = AIAgent(3    promptExecutor = simpleOpenAIExecutor(apiKey),4    systemPrompt = "You are a helpful assistant.",5    llmModel = OpenAIModels.Chat.GPT4o6)78// Run the agent9val result = agent.run("What is Koog?")

자바

1AIAgent<String, String> agent = AIAgent.builder()2    .promptExecutor(simpleOpenAIExecutor(System.getenv("OPENAI_API_KEY")))3    .systemPrompt("You are a helpful assistant. Answer user questions concisely.")4    .llmModel(OpenAIModels.Chat.GPT4o)5    .build();67var result = agent.run("What is Koog?");

이 예에서 에이전트는 자동으로 텍스트 프롬프트를 Prompt 개체로 변환하고 이를 프롬프트 실행자에게 보냅니다.

1flowchart TB2    A([Your application])3    B{{Configured AI agent}}4    C["Text prompt"]5    D["Prompt object"]6    E{{Prompt executor}}7    F[LLM provider]89    A -->|"run() with text"| B10    B -->|"takes"| C11    C -->|"converted to"| D12    D -->|"sent via"| E13    E -->|"calls"| F14    F -->|"responds to"| E15    E -->|"result to"| B16    B -->|"result to"| A

고급 구성의 경우 AIAgentConfig을 사용할 수도 있습니다. 상담원의 초기 프롬프트를 정의합니다.

자동 프롬프트 업데이트

에이전트가 전략을 실행하면 predefined nodes가 프롬프트를 자동으로 업데이트합니다. 예를 들어:

  • nodeLLMRequest: 프롬프트에 사용자 메시지를 추가하고 LLM 응답을 캡처합니다.
  • nodeLLMSendToolResult: 도구 실행 결과를 대화에 추가합니다.
  • nodeAppendPrompt: 워크플로의 어느 지점에서나 프롬프트에 특정 메시지를 삽입합니다.

컨텍스트 창 관리

장기 실행 상호 작용에서 LLM 컨텍스트 창을 초과하지 않도록 에이전트는 다음을 사용할 수 있습니다. history compression 기능.

수동 프롬프트 관리

복잡한 워크플로의 경우 LLM sessions을 사용하여 프롬프트를 수동으로 관리할 수 있습니다. 에이전트 전략 또는 사용자 정의 노드에서 llm.writeSession을 사용하여 Prompt 개체에 액세스하고 변경할 수 있습니다. 이를 통해 필요에 따라 메시지를 추가, 제거 또는 재정렬할 수 있습니다.