"매크로는 재사용할 지시 하나에 오늘 입력을 꽂을 자리를 붙인 거야. 둘을 문자열 하나로 뭉개면, 재사용할 수 있게 해줬던 바로 그걸 잃어."
매크로가 실제로 뭐냐면
prompt macro 는 저장해 두고 다시 쓰는 프롬프트야. '이거 한국어로 번역해', '이거 세 줄로 요약해', '이 그림 구도 좀 봐줘' 같은 거. 근데 매크로가 쓸모 있는 건 안에 뚜렷하게 나뉜 부분이 둘 있어서야. 지시는 저장해 두고 다시 쓰는 쪽이고, 입력은 지금 거기다 적용할 구체적인 내용이고. 지시가 틀이고 입력이 그 자리를 채우는 거지. 이 둘을 갈라 두니까 지시를 한 번 저장해 놓고 서로 다른 입력 백 개에 계속 쓸 수 있는 거야.
합쳐 놓으면 매크로가 왜 썩나
대충 만든 구현은 너무 일찍 이어 붙여. instruction + "\n" + input 해서 덩어리 하나로 저장하고 보내는 거. 데모에선 잘 되고, 그러고는 소리 없이 썩어.
- 지시를 더는 못 고쳐. 입력이랑 붙어 버리면, 재사용 프롬프트를 바꾸는 일이 처음에 딸려 붙은 아무 내용에서 그걸 도로 떼어내는 일이 돼.
- 깔끔하게 다시 못 써. 핵심은 같은 지시에 새 입력이잖아. 그러려면 지시가 특정 입력이랑 무관하게 혼자 존재해야 하는데, 붙여 버리면 그게 안 돼.
- 경계가 흐려져. 지시가 어디서 끝나고 입력이 어디서 시작하는데? 뒤섞인 문자열 하나를 받은 모델은 추측할 수밖에 없고, 그 경계를 추측하는 자리가 prompt injection 이랑 오해가 사는 데야.
이음매를 눈에 보이게 남겨 둬
매크로를 이름 붙은 조각들로 이뤄진 구조로 모델링해. 지시 필드랑 입력 필드로. 그리고 보내기 직전까지 갈라 둬. 문자열을 이어 붙이는 대신 요청 포맷이 그 구분을 그대로 실어 나르게 하고. 이러면 지시를 따로 고칠 수 있고(입력은 안 건드린 채 틀만 바꾸기), 다시 쓰는 게 시시해지고(입력만 갈고 지시는 그대로), 경계가 사용자한테도 모델한테도 또렷하게 남아. 다시 쓰는 부분이랑 오늘치 부분 사이의 그 이음매가 매크로의 가치 전부야. 데이터 모델에 남겨 둬. 문자열로 녹여 없애지 말고.