Spring AI의 Prompt 구조와 ChatOptions 설정, 그리고 다양한 프롬프트 엔지니어링 패턴을 정리한다.

List<Message> : 대화의 맥락을 구성하는 여러 종류의 메시지 묶음ChatOptions : 온도, 사용할 모델명과 같은 AI 실행 옵션AI가 답변을 생성할 때 얼마나 창의적일지, 얼마나 길게 말할지 등 응답의 특성을 제어할 수 있는 공통 옵션 설정
응답이 얼마나 창의적이고 무작위적으로 생성될지 결정한다.
모델이 한번에 생성할 수 있는 최대 토큰 수를 제한한다.
AI가 다음에 올 단어 후보군을 추려내는 필터링 기법
사전 정보나 예시 없이 AI에게 곧바로 질문을 던지는 방식
@AiService
public interface QAService {
@Prompt("이탈리아의 수도는?")
String answer();
}
1개 (Ont-Shot) 또는 여러 개의 정답 예시를 미리 보여주고 패턴을 학습시킨 뒤 질문을 던지는 방식
@Prompt("""
Q: 2 + 2는? A: 4
Q: 3 + 5는? A: 8
Q: {{question}} A:
""")
String solve(@V("question") String question);
시스템 프롬프트를 사용해 AI에게 페르소나를 부여하는 방식
@Prompt(system = "너는 핵심만 말하는 10년차 외과 의사야")
String respondTO(String userQuestion);
AI가 대답하기 전에, 상황을 먼저 객관적으로 분석하고 성찰하도록 유도하는 방식
@Prompt("""
답변하기 전에, 다음 상황을 주의 깊게 먼저 생각해 봐: {{situation}}
자, 이제 이 상황에서 가장 좋은 조언은 무엇일까?
""")
String analyze(@V("question") String situation);
답만 뱉는게 아니라, 문제를 해결하는 과정을 단계별로 풀어서 설명하도록 지시하는 방식
@Prompt("""
다음 문제를 단계별로 차근차근(step-by-step) 해결해 줘:
{{problem}}
정답:
""")
String solveStepwise(@V("problem") String problem);
CoT 프롬프트를 여러 번 반복해서 호출한 뒤, 가장 많이 나온(일관된) 답변을 최종 정답으로 채택하는 방식
하나의 문제에 대해 여러 가지 해결책을 먼저 제안하게 하고, 그중 가장 좋은 것을 스스로 선택해 평가하게 만드는 방식
@Prompt("""
이 문제를 해결할 수 있는 3가지 다른 접근법을 제안해 봐:
{{challenge}}
그런 다음, 3가지 중 가장 좋은 방법을 하나 고르고 그 이유를 설명해 줘.
""")
String solveWithToT(@V("challenge") String challenge);
내가 쓴 부실한 프롬프트를 AI에게 전달해서 "네가 더 완벽한 프롬프트로 다듬어봐"라고 시키는 방식
사용자의 입력을 기반으로 코드를 생성하거나 분석하도록 요청하는 방식
@Prompt("""
다음 요구사항을 수행하는 Java 함수를 작성해 줘:
{{description}}
Java Code:
""")
String generateCode(@V("description") String description);