모델 파라미터를 건드리지 않고, 입력 텍스트만 바꿔서 원하는 출력을 얻어내는 작업이다. LLM 은 같은 능력을 갖고 있어도 요청을 어떻게 적느냐에 따라 결과가 크게 달라진다.
미세조정과 비교하면 위치가 분명해진다. 미세조정은 데이터를 모아 학습을 돌려야 하지만 프롬프트는 즉시 고쳐 볼 수 있다. 대신 프롬프트로 할 수 있는 일은 모델이 이미 가진 능력을 끌어내는 데까지이고, 없는 지식을 넣어주지는 못한다.
자주 쓰는 방식
few-shot — 요청만 적는 대신 입력·출력 예시를 몇 개 함께 넣는다. 모델이 예시에서 출력 형식과 판단 기준을 읽어낸다. 예시를 하나도 안 주면 zero-shot 이다.
chain-of-thought — 답만 요구하는 대신 중간 추론 과정을 적게 한다. 여러 단계를 거쳐야 하는 문제에서 정확도가 올라가는데, 중간 단계를 토큰으로 뱉으면 그 토큰이 다음 계산의 입력이 되어 실질적인 계산 공간이 늘어나기 때문이다.
역할과 형식 지정 — 어떤 관점에서 답할지, 출력을 어떤 구조(JSON, 표, 정해진 항목)로 낼지 명시한다. 뒤에서 프로그램이 결과를 파싱해야 할 때 특히 중요하다.
self-consistency — 같은 질문을 여러 번 샘플링해 가장 많이 나온 답을 고른다. 한 번의 추론이 중간에 어긋날 확률을 다수결로 눌러준다.
한계와 다음 단계
프롬프트만으로는 모델이 모르는 사실을 알게 할 수 없다. 사내 문서나 최신 정보가 필요하면 관련 문서를 검색해 프롬프트에 붙여주는 RAG 로 넘어간다.
출력 형식이나 말투를 아주 일관되게 유지해야 하거나, 프롬프트가 계속 길어져 비용이 문제가 되면 미세조정이 더 싸진다.
프롬프트가 제품의 일부가 되면 코드처럼 다뤄야 한다. 버전을 관리하고, 바꿨을 때 결과가 어떻게 달라지는지 평가셋으로 재고, 모델 버전이 올라갈 때 다시 검증하는 흐름이 LLMOps 의 한 축이다.