프롬프트 다루기
프롬프트 다루기 (Prompts)
LLM의 표현력을 끌어내는 핵심 입력이 바로 프롬프트예요. LlamaIndex는 인덱스 구축, 데이터 삽입, 쿼리 중 탐색, 최종 답변 합성까지 전 과정에서 프롬프트를 사용해요. 특히 에이전트 워크플로우를 만들 때 프롬프트를 잘 만들고 관리하는 건 개발 과정의 핵심이에요. LlamaIndex는 프롬프트를 유연하고 강력하게 관리하는 방법을 제공하고 다양한 방식으로 활용하게 해주는데, 그 구조를 같이 뜯어볼게요.
출처: 공식문서
개념 이해하기
LlamaIndex는 스타일이 다른 세 가지 프롬프트 템플릿을 제공해요.
RichPromptTemplate— 최신 스타일. 변수와 로직을 넣은 jinja 스타일 프롬프트를 만드는 데 사용PromptTemplate— 구형 스타일. 단일 f-string 하나로 프롬프트를 만드는 단순 템플릿ChatPromptTemplate— 구형 스타일. 메시지와 f-string으로 채팅 프롬프트를 만드는 템플릿
LlamaIndex는 기본적으로 잘 동작하는 기본 프롬프트 템플릿 세트를 사용해요. 추가로 gpt-3.5-turbo 같은 채팅 모델 전용으로 작성된 프롬프트도 별도 파일에 있어요.
사용자는 자신만의 프롬프트 템플릿을 제공해 프레임워크 동작을 더 커스터마이즈할 수도 있어요. 커스터마이징의 가장 좋은 방법은 위 링크의 기본 프롬프트를 복사해서 그걸 기준으로 수정하는 거예요. 처음부터 새로 쓰는 것보다 훨씬 안전하죠.
사용 패턴
프롬프트 사용은 간단해요. 아래는 RichPromptTemplate으로 jinja 스타일 템플릿을 만드는 예시예요.
from llama_index.core.prompts import RichPromptTemplate
template_str = """We have provided context information below.
---------------------
{{ context_str }}
---------------------
Given this information, please answer the question: {{ query_str }}
"""
qa_template = RichPromptTemplate(template_str)
# 텍스트 프롬프트 생성 (completion API용)
prompt = qa_template.format(context_str=..., query_str=...)
# 또는 손쉽게 메시지 프롬프트로 전환 (chat API용)
messages = qa_template.format_messages(context_str=..., query_str=...)
RichPromptTemplate을 최대한 활용하는 방법과 다른 템플릿에 대한 자세한 내용은 사용 패턴 가이드를 참고해요.
예시 가이드
프롬프트 엔지니어링 가이드
단순 커스터마이즈 예시
실험적