kone
AI 채팅 - LLM
AI 채팅 - LLM

프롬프트 템플릿 개발할 때 언제나 신경 쓰이는 부분

01/25/2026, 11:35:46
개발
897 views · 3 likes


LLM은 당연하지만 Whitespace sensitive함.
그러니까... 

### HelloWorld


이것과

### Hello
World


이것이 구분됨.

예를들면 <prompt></prompt> 라는 인클로저로 포메팅 가능한 프롬프트 템플릿이 있다고 가정해보자.
이 경우 저 시작 태그 맨 처음 붙은 \n을 스킵하냐 마냐로 갈림.

1. 스킵하지 않는다

이 경우 가독성이 병신이 됨. 아래 예시를 보자.

<prompt>### HelloWorld</prompt>


딱 봐도 거지같음. 가독성도 별로고 실수하기도 딱 좋음.

2. 스킵한다.

이 경우 일관성이 병신이 됨. 사용자는 \n을 앞에 써야할지 말지 햇갈림.
예를들면 엔터가 두번 있는건? 그것도 스킵해야하나?
앞에 엔터를 꼭 붙이고 싶은건 어떻게 해야하나? 이런 문제들이 발생함.

<prompt>### HelloWorld</prompt>


이런식으로 됨. 문제는

<prompt>



### HelloWorld</prompt>


이걸 의도하기 힘들어진다는거임.
유저 입장에서 맨 앞에 whitespace가 없어지는지 안 없어지는지 직관적으로 알기 어려움.

그래서 생각해본 아이디어들.

<==========prompt==========>### HelloWorld<==========prompt==========>


라인 스플리터처럼 만든다. 누가 봐도 저기 부분은 스킵되는게 직관적으로 느껴짐.
문제는 attribute같은걸 표현하기에 적합하지 않음.

그래서 생각해본것들. ini나 toml과 비슷하게 가보는건?


[prompt.attribute(a=..)]### HelloWorld
[prompt.attribute(a=..)]### HelloWorld


나쁘지 않아 보이는데... 문제는 이 경우에는 끝부분 화이트스페이스가 없어지는지 확인하기 어려움.

[prompt.attribute(a=..)]### HelloWorld[prompt.attribute(a=..)]### HelloWorld


이렇게 꼭 해야만 한다면? 직관성이 굉장히 떨어짐. 프롬프트마다 분리할 수 있는게 있으면 좋겠음.

다양한 고민 중인데 좋은 아이디어 있으면 올려야지.

3
4 comments
스킵이 정확히 어떤 의미야? 리스 {{#if_pure}}처럼 line break 보존이 되냐 안되냐인건가?
01/25
ㅇㅇ 그런건데 난 둘 다 매우 비직관적이라고 생각해서 좀 더 고민중.
01/25
이걸 lexer단계에서 처리하느냐 안 하냐도 엄청나게 크게 갈릴것같고. 주석도 추가할 수 있어야하는데 이것도 고민이고.