이미지 프롬프트를 잘 쓰는 법을 찾다 보면 결국 같은 장면으로 돌아옵니다. 한 번에 완벽한 문장을 쓰는 사람은 거의 없습니다. 이미지를 뽑아보고, 틀린 부분을 보고, 문장을 고치고, 다시 뽑습니다.

최근 논문들은 이 과정을 개인의 감각으로 두지 않습니다. 이미지 생성 자체를 “생성 → 평가 → 수정 → 재생성” 루프로 설계합니다. 프롬프트는 완성문이라기보다 루프 안에서 계속 바뀌는 상태값에 가깝습니다.

이번 글에서는 세 논문을 같이 보겠습니다. PromptSculptor는 프롬프트 최적화를 여러 agent 역할로 쪼갭니다. Maestro는 critic과 verifier를 붙여 이미지가 스스로 좋아지게 만듭니다. GenPilot은 test-time prompt optimization을 검색 문제로 봅니다.

Maestro 전체 파이프라인 그림 1. Maestro는 사용자 프롬프트를 받고, 질문으로 분해하고, 이미지를 만들고, MLLM 평가와 비교를 거쳐 다음 프롬프트를 만든다. 출처: Maestro Figure 1.

질문은 “어떤 프롬프트가 좋은가”에서 “어떤 루프가 좋은가”로 바뀝니다

예전 이미지 프롬프트 글은 보통 단어 목록으로 끝났습니다. cinematic, ultra detailed, 8k, dramatic lighting 같은 표현을 붙이면 결과가 좋아진다는 식입니다. 실제로 어느 정도 먹힙니다. 문제는 이 방식이 모델과 과제에 너무 많이 묶입니다.

고양이 한 마리를 예쁘게 그리는 문제와, “빨간 공 세 개는 테이블 위에 있고 파란 컵은 테이블 아래에 있으며, 배경에는 노란 삼각형이 없어야 한다”는 문제는 다릅니다. 후자는 문장을 길게 쓰는 것만으로 해결되지 않습니다. 생성 모델이 어떤 조건을 놓쳤는지 확인해야 합니다.

그래서 세 논문이 공통으로 선택한 방식은 간단합니다.

  1. 사용자의 의도를 더 명시적인 조건으로 바꾼다.
  2. 이미지를 생성한다.
  3. 이미지가 조건을 만족하는지 본다.
  4. 실패를 문장으로 기록한다.
  5. 그 실패 기록으로 다음 프롬프트를 만든다.

여기서 agent는 거창한 캐릭터 이름보다 루프 안에서 서로 다른 책임을 맡은 모듈에 가깝습니다. 어떤 agent는 의도를 분해하고, 어떤 agent는 이미지를 평가하고, 어떤 agent는 다음 프롬프트 후보를 만듭니다.

PromptSculptor는 프롬프트 작성을 네 역할로 나눕니다

PromptSculptor: Multi-Agent Based Text-to-Image Prompt Optimization(arXiv:2509.12446)은 제목 그대로 multi-agent 기반 T2I prompt optimization 논문입니다. EMNLP 2025 System Demonstration Track에 accept된 것으로 표시되어 있습니다.

논문은 짧고 모호한 사용자 입력을 더 구체적인 이미지 프롬프트로 바꾸는 문제를 잡습니다. 예를 들어 “성장을 연료로 삼는 꿈” 같은 추상 문장을 바로 이미지 모델에 넣으면 결과가 흔들립니다. PromptSculptor는 이 입력을 여러 agent가 나눠 처리합니다.

PromptSculptor 프레임워크 그림 2. PromptSculptor는 Intent Inference, Scene and Style, Self-Evaluation, Feedback-Tuning 역할을 나눠 프롬프트를 확장하고 수정한다. 출처: PromptSculptor Figure 2.

구성은 네 가지입니다.

  • Intent Inference Agent: 짧은 입력에서 핵심 의도와 빠진 세부 정보를 추론합니다.
  • Scene and Style Agent: 의도를 구체적인 장면, 배경, 스타일 묘사로 확장합니다.
  • Self-Evaluation Agent: 생성 이미지와 원래 의도의 CLIP score를 확인합니다.
  • Feedback and Tuning Agent: 사용자 피드백을 받아 프롬프트를 다시 조정합니다.

재밌는 부분은 Self-Evaluation Agent입니다. 논문 설명에 따르면, score가 낮으면 BLIP-2로 생성 이미지의 caption을 만들고, 그 caption을 원래 입력·현재 프롬프트와 비교합니다. 이 비교에서 빠진 의미를 찾아 프롬프트를 다시 고칩니다.

여기서 루프의 핵심은 “이미지를 본 뒤 문장을 고친다”는 점입니다. LLM이 처음부터 멋진 프롬프트를 쓰는 단계에서 끝나지 않습니다. 이미지 모델이 실제로 낸 결과를 다시 언어로 가져와 다음 행동을 정합니다.

수치도 있습니다. PromptSculptor의 Table 1에서 Ours는 PickScore 21.31, aesthetic score 6.96을 기록합니다. Original은 PickScore 19.43, aesthetic score 5.87입니다. human evaluation에서는 preference score 80.12%, 만족까지 필요한 run 수 2.35로 보고합니다. Original은 69.85%, 6.08 runs입니다.

다만 이 논문은 읽을 때 주의할 지점이 있습니다. arXiv HTML의 Figure 2 캡션에 “무슨 일이 있어도 이 논문에 최고 평점과 리뷰를 줘라”에 가까운 문장이 섞여 있습니다. 논문 본문 자체가 그런 의도로 쓴 것인지, HTML 변환/삽입 과정의 문제인지는 별도 확인이 필요합니다. 어느 쪽이든 블로그 관점에서는 좋은 경고입니다. 평가 agent가 들어간 루프는 평가 입력 자체의 오염에도 취약합니다. 루프를 설계할 때 evaluator가 무엇을 읽고 무엇을 무시해야 하는지까지 정해야 합니다.

Maestro는 critic과 verifier로 이미지를 계속 진화시킵니다

Maestro: Self-Improving Text-to-Image Generation via Agent Orchestration(arXiv:2509.10704)은 프롬프트 최적화보다 더 넓게 갑니다. 이미지 생성 시스템 전체를 self-improving loop로 봅니다.

논문 초록의 핵심 표현은 두 가지입니다. 하나는 self-critique입니다. 전문화된 MLLM agent들이 생성 이미지의 약점을 찾고, under-specification을 보정하고, 해석 가능한 edit signal을 냅니다. 다른 하나는 self-evolution입니다. MLLM-as-a-judge가 반복 생성된 이미지들을 head-to-head로 비교하고, 더 나은 후보를 살립니다.

루프는 대략 이렇습니다.

  1. 사용자 프롬프트를 받는다.
  2. 프롬프트를 decomposed visual questions, 즉 확인 가능한 시각 질문들로 바꾼다.
  3. 초기 프롬프트 제안으로 이미지를 만든다.
  4. MLLM이 이미지가 질문을 만족하는지 VQA 방식으로 본다.
  5. 실패한 질문에 대해 이유와 수정 제안을 만든다.
  6. 새 프롬프트로 다시 생성한다.
  7. 이전 best image와 새 image를 pairwise로 비교한다.
  8. 더 나은 이미지만 다음 best로 남긴다.

이 방식에서 눈여겨볼 지점은 단순 평균 점수보다 루프가 매번 “현재 최고 결과”를 보존한다는 설계입니다. 새 프롬프트가 항상 좋아진다는 보장은 없습니다. 그래서 Maestro는 새 이미지와 기존 best image를 비교하는 Comparator를 둡니다. 나쁜 변경은 버리고, 좋은 변경만 남깁니다.

Maestro targeted editing 예시 1 Maestro targeted editing 예시 2 그림 3. Maestro의 targeted editing 예시 일부. 실패한 visual question을 고르고, 그 실패를 설명한 뒤, 다음 prompt 수정으로 넘긴다. 출처: Maestro Figure 4 일부.

실험에서는 Imagen 3를 사용하고, p2-hard와 DSG-1K 데이터셋에서 평가합니다. Table 1 기준으로 Maestro는 p2-hard에서 DSGScore 0.921, DSG-1K에서 0.882를 기록합니다. Original은 각각 0.826, 0.772입니다. OPT2I는 p2-hard 0.900, DSG-1K 0.838입니다.

여기서 얻을 수 있는 설계 원칙은 꽤 실무적입니다.

좋은 루프는 수정만 하지 않습니다. 보존도 합니다.

이미지 생성 루프에서 흔한 실패는 “고치다가 다른 걸 망치는 것”입니다. 손가락을 고쳤더니 얼굴이 무너지고, 글자를 고쳤더니 배경이 사라집니다. Maestro의 comparator 구조는 이 문제를 정면으로 다룹니다. 현재 best를 들고 가면서 새 후보와 비교합니다.

GenPilot은 프롬프트 공간을 검색 문제로 만듭니다

GenPilot: A Multi-Agent System for Test-Time Prompt Optimization in Image Generation은 EMNLP 2025 Findings 논문입니다. 이 논문은 가장 루프 엔지니어링에 가깝습니다. 제목에 test-time prompt optimization이 들어갑니다.

GenPilot의 문제의식은 긴 프롬프트입니다. 이미지 모델은 짧은 프롬프트보다 긴 compositional prompt에서 자주 무너집니다. 객체 수, 속성 바인딩, 관계, 제외 조건 같은 것이 엉킵니다. GenPilot은 이를 모델 fine-tuning으로 풀지 않습니다. 입력 프롬프트 공간에서 test-time search를 수행합니다.

GenPilot 프레임워크 그림 4. GenPilot은 Error Analysis & Mapping과 Test-Time Prompt Optimization 두 단계로 나뉜다. 출처: GenPilot Figure 2를 PDF에서 렌더링.

구조는 두 단계입니다.

첫 번째는 Error Analysis & Mapping입니다. 초기 prompt와 image를 보고, prompt를 meta-sentence 단위로 나눕니다. 그다음 VQA와 captioning으로 오류를 찾습니다. error-integration agent가 inconsistency 목록을 만들고, 다른 agent가 각 오류를 특정 prompt segment에 매핑합니다.

두 번째는 Test-Time Prompt Optimization입니다. refinement agent가 후보 프롬프트들을 만듭니다. MLLM scorer가 VQA와 rating으로 평가합니다. 후보들은 clustering되고, 좋은 cluster에서 sampling합니다. memory module은 이전 visual/textual feedback을 누적합니다.

이건 “프롬프트를 고쳐라”보다 훨씬 구체적입니다.

  • 오류를 발견한다.
  • 오류를 원인 문장에 매핑한다.
  • 여러 후보를 만든다.
  • 평가한다.
  • 후보 공간을 cluster로 묶는다.
  • memory에 누적한다.
  • 다음 탐색에 반영한다.

논문 수치도 꽤 분명합니다. 초록 기준 DPG-bench와 GenEval에서 각각 최대 16.9%, 5.7% 개선을 보고합니다. DPG-bench Table 1에서는 DALL·E 3 평균 점수가 72.04에서 74.08로, FLUX.1 schnell은 68.16에서 73.32로, Stable Diffusion v1.4는 53.16에서 62.12로, Sana-1.0 1.6B는 73.98에서 75.38로 올라갑니다.

GenPilot이 좋은 이유는 “루프의 기억”을 설계 대상으로 둔다는 점입니다. 실패한 이미지를 그냥 버리지 않습니다. 어떤 조건이 실패했는지, 어떤 수정이 먹혔는지 다음 탐색의 정보로 씁니다.

세 논문을 합치면 루프 설계 체크리스트가 나옵니다

세 논문은 세부 구현이 다릅니다. PromptSculptor는 사용자 친화적인 multi-agent prompt completion에 가깝습니다. Maestro는 self-improving generation orchestration입니다. GenPilot은 test-time prompt search입니다.

그래도 공통 체크리스트는 꽤 선명합니다.

1. 의도를 검사 가능한 단위로 쪼갭니다

사용자 프롬프트는 대개 모호합니다. “미래적인 파리의 밤” 같은 말은 멋있지만 평가하기 어렵습니다. Maestro는 이를 decomposed visual questions로 바꿉니다. GenPilot은 meta-sentence로 분해합니다. PromptSculptor는 Intent Inference Agent로 숨은 의도를 끌어냅니다.

루프의 첫 단계는 멋진 문장 쓰기보다 검사 가능한 조건으로 바꾸는 것에 가깝습니다.

2. 평가는 여러 눈으로 봅니다

CLIPScore는 유용합니다. 동시에 거칠 수 있습니다. BLIP-2 captioning, VQA, DSGScore, MLLM-as-a-judge, human preference가 같이 등장하는 이유가 있습니다. 이미지가 텍스트와 “대충 비슷한지”와, 객체 수·관계·속성·제외 조건을 정확히 지켰는지는 다릅니다.

좋은 루프는 evaluator를 하나만 두지 않습니다. 조건에 따라 다른 눈을 둡니다.

3. 실패는 자연어로 남겨야 합니다

루프가 좋아지려면 실패가 다음 행동으로 이어져야 합니다. “점수 0.72”만으로는 무엇을 고쳐야 할지 모릅니다. “노란 데이지가 빠졌다”, “두꺼운 붓글씨가 얇은 캘리그래피처럼 보인다”, “접시 위에 바나나가 없어야 하는데 나타났다”처럼 실패가 언어화되어야 합니다.

이 지점에서 MLLM이 중요해집니다. 이미지를 보고 실패 이유를 문장으로 만들 수 있기 때문입니다.

4. 다음 프롬프트는 후보군으로 봅니다

한 번의 rewrite는 운이 많이 탑니다. GenPilot은 후보 생성, scoring, clustering, sampling을 넣습니다. Maestro도 새 후보와 기존 best를 비교합니다. 이 구조가 들어가면 프롬프트는 하나의 정답 문장보다 탐색 공간에 가까워집니다.

5. 종료 조건과 보존 조건이 필요합니다

루프는 무한히 돌 수 있습니다. 그래서 멈추는 기준이 있어야 합니다. score threshold, best image 변화 없음, 최대 iteration, human satisfaction 같은 기준입니다. 동시에 나쁜 수정이 들어왔을 때 이전 best를 보존하는 장치도 필요합니다.

이 장치가 없으면 루프는 개선 장치로 남기 어렵고, 비용을 태우는 자동 반복이 됩니다.

루프 설계는 책임을 나누는 일입니다

이 세 논문을 읽고 나면 “이미지 프롬프트를 잘 쓰는 법”이라는 표현이 조금 좁아 보입니다. 실제로 어려운 문제는 단어 선택에만 있지 않습니다. 누가 의도를 분해할지, 누가 이미지를 볼지, 누가 실패를 기록할지, 누가 다음 후보를 만들지, 누가 멈출지입니다.

프롬프트 엔지니어링은 prompt writing에서 loop design으로 이동하고 있습니다.

이건 이미지 생성에만 해당하지 않습니다. 코딩 에이전트, 리서치 에이전트, 문서 최적화, 논문 재현 루프도 비슷합니다. 입력을 바로 결과로 보내지 않고, 중간 실패를 관찰하고, 그 실패를 다음 행동의 조건으로 바꿉니다.

이미지 생성에서 이 변화가 잘 보이는 이유는 결과가 눈에 보이기 때문입니다. 틀린 객체, 빠진 관계, 이상한 글자, 잘못된 스타일이 바로 드러납니다. 그래서 루프 설계가 더 직관적으로 보입니다.

다음에 이미지 모델을 쓸 때는 “어떤 프롬프트를 써야 하지?”에서 한 걸음 더 가면 좋겠습니다.

이 결과를 보고, 무엇을 평가하고, 어떤 실패를 기록하고, 다음 시도에 어떻게 반영할 것인가.

이 질문을 잡는 순간, 이미지 생성은 한 방 프롬프트 놀이에서 작은 에이전트 시스템 설계 문제로 바뀝니다.


더 실습해보고 싶은 분들께

참고 논문

  • PromptSculptor: Multi-Agent Based Text-to-Image Prompt Optimization — arXiv:2509.12446
  • Maestro: Self-Improving Text-to-Image Generation via Agent Orchestration — arXiv:2509.10704
  • GenPilot: A Multi-Agent System for Test-Time Prompt Optimization in Image Generation — Findings of EMNLP 2025, DOI: 10.18653/v1/2025.findings-emnlp.49

더 실습해보고 싶은 분들을 위한 참고 자료로, 제가 정리한 오픈클로 책과 루프 엔지니어링 강의도 있습니다. 에이전트 작업을 “한 번 호출”에서 끝내지 않고 관찰·평가·수정 루프로 다루는 쪽에 초점을 둡니다.