LMQL 언어 레퍼런스 — 쿼리 문자열과 제약
LMQL 언어 레퍼런스 — 쿼리 문자열과 제약
LMQL은 LLM 프로그래밍을 위한 언어예요. 제약 디코딩 엔진·가벼운 프롬프팅 프로그래밍 모델·공급자 무관 추론 추상화를 핵심으로 해요.
표준 문법
LMQL의 현대 문법은 표준 파이썬 코드처럼 읽히면서, 문자열이 LLM에 대한 프롬프트로 해석돼요. 제어 흐름도 그대로 쓸 수 있어요.
"Q: What is 2x2? [ANSWER]"
while ANSWER != 4:
"Incorrect, try again: [ANSWER]"
"Good job!"
쿼리 문자열
쿼리 문자열은 프롬프트 구성과 모델 상호작용의 핵심 구성 요소예요. [NAME] 같은 플레이스홀더 변수, where 제약, distribution 분포 절, f-문자열 보간을 포함할 수 있어요.
"Hello, [NAME]!" where len(TOKENS(NAME)) < 10
"Greet Alice
:"
"Hello [WHO]" distribution WHO in ["Alice", "Bob"]
- 플레이스홀더 변수
[NAME]: LLM이 텍스트를 생성하는 템플릿 자리예요.[AGE:int]처럼 타입도 지정 가능해요. - 제약
where: 생성 출력에 대한 논리적 제약. - 디코더 절
argmax/sample/beam/best_k: 생성에 쓸 디코딩 알고리즘. 기본은argmax예요.
이스케이프 규칙
쿼리 문자열에서 [와 ]는 [[, ]]로, {와 }는 {{, }}로 이스케이프해야 비모호하게 만들 수 있어요.
쿼리 함수
@lmql.query 데코레이터로 쿼리 함수를 정의하고, LMQL 코드는 함수 본문이 아니라 독스트링에 넣어요.
@lmql.query
def my_query_function(person):
'''lmql
"Greet {person}. Hello [NAME]!"
'''
더 알아보기 (Learn more)
출처: LMQL 공식 문서