프롬프트(Prompts)의 기초
프롬프트(Prompts)의 기초
프롬프트는 대규모 언어 모델(LLM)에게 무엇을 하라고 지시하는 명령이에요. 길을 물어볼 때 질문이 분명할수록 더 정확한 길 안내를 받는 것과 같은 원리죠. 다만 많은 LLM 프로바이더가 제각각 다른 역할과 메시지 타입을 가진 복잡한 프롬프트 인터페이스를 제공해서, 강력하지만 쓰고 이해하기 어려울 때가 있어요. AI SDK는 이를 단순화하기 위해 텍스트 프롬프트, 메시지 프롬프트, 시스템 프롬프트 세 가지를 지원합니다.
출처: 공식문서
본문
텍스트 프롬프트
텍스트 프롬프트는 문자열이에요. 같은 프롬프트 텍스트의 변형으로 콘텐츠를 반복 생성하는 등 단순한 생성에 이상적이에요. streamText나 generateText 같은 AI SDK 함수가 제공하는 prompt 속성으로 설정할 수 있고, 템플릿 리터럴을 쓰면 변수를 주입할 수도 있습니다.
const result = await generateText({
model: "anthropic/claude-sonnet-4.5",
prompt: 'Invent a new holiday and describe its traditions.',
});
템플릿 리터럴로 동적 데이터를 넣을 수도 있어요.
const result = await generateText({
model: "anthropic/claude-sonnet-4.5",
prompt:
`I am planning a trip to ${destination} for ${lengthOfStay} days. ` +
`Please suggest the best tourist activities for me to do.`,
});
시스템 프롬프트
시스템 프롬프트는 모델의 행동과 응답을 안내·제약하는 초기 지시 세트예요. system 속성으로 설정합니다. 시스템 프롬프트는 prompt 속성과 messages 속성 모두에서 동작해요.
주의할 점이 있어요. prompt나 messages 안의 시스템 메시지는 사용자가 시스템 메시지를 주입해 시스템 프롬프트를 덮어쓸 수 있는 프롬프트 인젝션(prompt injection) 공격 위험이 있어요. 이상적으로는 시스템 지시를 system 옵션으로 제공하고, 기존 메시지 이력에 시스템 메시지가 섞인 걸 보내야 할 때만 allowSystemInMessages: true로 설정해 경고를 없애거나, allowSystemInMessages: false로 오류를 던지게 합니다.
const result = await generateText({
model: "anthropic/claude-sonnet-4.5",
// system 속성에 시스템 지시
system:
`You help planning travel itineraries. ` +
`Respond to the users' request with a list ` +
`of the best stops to make in their destination.`,
prompt:
`I am planning a trip to ${destination} for ${lengthOfStay} days. ` +
`Please suggest the best tourist activities for me to do.`,
});
메시지 프롬프트
메시지 프롬프트는 user, assistant, tool 메시지의 배열이에요. 채팅 인터페이스나 더 복잡한 멀티모달 프롬프트에 잘 어울려요. messages 속성으로 설정합니다. 각 메시지는 role과 content 속성을 가지며, content는 텍스트이거나 그보다 복잡한 형태일 수 있어요.
더 알아보기
- 텍스트 프롬프트 —
prompt속성, 단순 생성에 적합. - 시스템 프롬프트 —
system속성과 프롬프트 인젝션 방지(allowSystemInMessages). - 메시지 프롬프트 —
messages속성, 채팅·멀티모달에 적합.