프롬프트 설계와 효율 최적화
프롬프트 설계와 효율 최적화
Guidance 문서에는 프롬프트를 어떻게 설계하면 좋은지, 그리고 생성 비용·지연을 어떻게 아끼는지에 대한 실용적인 내용이 담겨 있어요. 제약 생성은 일반 프롬프팅 대비 토큰을 덜 낭비하고 더 안정적인 출력을 얻는 데 초점을 맞춰요.
제약을 먼저, 프로덕션 지연을 줄이기
Guidance가 '지연과 비용을 줄인다'고 말하는 핵심 이유 중 하나는, select() 같은 제약이 특정 고정 토큰을 강제할 때 모델 정방향(pass) 없이 그대로 방출되기 때문이에요. 즉 필요 없는 추론을 건너뛰어 응답이 빨라져요. "JSON 요청하고 실패하면 재시도"하는 방식보다 구조 보장 + 추론 절약이 더 유리한 지점이 바로 여기예요.
효과적인 프롬프트 구조
- 역할을 명확히:
system()에 역할을,user()에 작업을,assistant()에 생성 자리를 두면 모델이 헷갈리지 않아요. - 필드 단위 제약: 전체 JSON을 한 번에 생성하기보다 날짜·숫자 같은 필드에 정규식을 걸어 해당 값만 정확히 강제하면 안정적이에요.
- 이름 붙이기:
gen(name=...),select(name=...)으로 결과를 꺼내 다음 단계 로직에 연결하세요. 이게 멀티스텝 워크플로의 기본 연결 고리예요.
출처: https://github.com/guidance-ai/guidance/blob/main/docs/art_of_prompt_design.rst
토큰 힐링으로 깨진 경계 피하기
URL 끝의 http:처럼 프롬프트가 토큰 한가운데서 끝나면, 다음 생성이 토큰 경계를 어긋나게 시작해 깨진 출력이 나오기 쉬워요. Guidance는 마지막 프롬프트 토큰으로 되돌아가 제약 아래에서 다시 생성하는 토큰 힐링으로 이 문제를 해결해요. 로컬 백엔드에서 기본적으로 적용돼요.
문법 컴파일과 재사용
@guidance(stateless=True)로 만든 상태 없는 문법은 한 번 정의하면 여러 호출에서 재사용·합성이 가능해요. 성능이 중요한 제약 생성에서 컴파일 비용을 줄이는 데 도움이 돼요. 복잡한 문법은 Rust 기반의 llguidance 엔진이 처리해서 토큰 마스크 계산을 빠르게 수행한다는 점도 참고하면 좋아요.
더 알아보기
- 시작하기: Getting Started
- 제약 생성: Constrained Generation
- 튜토리얼: Tutorials