
Promptim: 프롬프트 최적화를 위한 실험적 라이브러리
요약
Promptim은 데이터셋과 평가 지표를 활용하여 프롬프트를 자동으로 개선하는 실험적인 프롬프트 최적화 라이브러리입니다. 사용자가 제공한 초기 프롬프트와 커스텀 평가기를 바탕으로 최적화 루프를 실행하여 성능이 향상된 정제된 프롬프트를 생성합니다. 특히 LangSmith와 통합되어 데이터셋 관리 및 결과 추적을 효율적으로 지원합니다.
핵심 포인트
- 프롬프트 엔지니어링 과정을 자동화하여 개발 시간을 절약하고 작업의 엄밀함을 부여합니다.
- 평가 주도 개발(Evaluation-driven development) 방식을 채택하여 모델 변경 시에도 프롬프트 최적화를 통해 빠르게 적응할 수 있습니다.
- LangSmith와 통합되어 데이터셋 큐레이션, 프롬프트 관리, 결과 추적 및 인간 피드백 반영이 가능합니다.
- 수동적인 프롬프트 수정 대신 모델에 무관한 평가(evals) 중심의 개발 환경을 구축하도록 돕습니다.
Promptim은 AI 시스템을 체계적으로 개선할 수 있도록 돕는 실험적인 프롬프트 (prompt) 최적화 (optimization) 라이브러리입니다.
Promptim은 특정 작업에 대한 프롬프트를 개선하는 과정을 자동화합니다. 사용자가 초기 프롬프트, 데이터셋, 그리고 커스텀 평가기 (custom evaluators) (및 선택 사항인 인간 피드백)를 제공하면, promptim은 최적화 루프 (optimization loop)를 실행하여 기존 프롬프트보다 더 나은 성능을 목표로 하는 정제된 프롬프트를 생성합니다.
평가 주도 개발에서 프롬프트 최적화로
AI 엔지니어의 핵심 책임 중 하나는 프롬프트 엔지니어링 (prompt engineering)입니다. 이는 더 나은 결과를 얻기 위해 프롬프트를 수동으로 미세 조정하는 과정을 포함합니다.
이에 접근하는 유용한 방법은 **평가 주도 개발 (evaluation-driven development)**을 통하는 것입니다. 이는 먼저 입력값의 데이터셋 (및 선택 사항인 예상 출력값)을 생성한 다음, 여러 평가 지표 (evaluation metrics)를 정의하는 것을 포함합니다. 프롬프트에 변경을 가할 때마다 데이터셋에 대해 실행하여 출력값의 점수를 매길 수 있습니다. 이러한 방식으로 프롬프트의 성능을 측정하고, 성능이 개선되고 있는지 또는 최소한 퇴보하고 있지는 않은지 확인할 수 있습니다. LangSmith와 같은 도구들이 데이터셋 큐레이션 (dataset curation) 및 평가를 도와줍니다.
프롬프트 최적화의 이면에 있는 아이디어는 이러한 잘 정의된 데이터셋과 평가 지표를 사용하여 프롬프트를 자동으로 개선하는 것입니다. 자동화된 방식으로 프롬프트 변경을 제안할 수 있으며, 그 후 이 평가 방법을 통해 새로운 프롬프트의 점수를 매길 수 있습니다. DSPy와 같은 도구들이 한동안 이러한 시도를 선구적으로 이끌어왔습니다.
왜 프롬프트 최적화를 해야 하는가?
프롬프트 최적화를 수행하는 데에는 몇 가지 동기가 있습니다:
시간 절약: 수동 프롬프트 엔지니어링은 종종 시간이 많이 소요되는 과정이 될 수 있습니다. 자동화된 프롬프트 최적화는 프롬프트 엔지니어링 노력을 가속화하고 엔지니어링 시간을 절약할 수 있습니다.
엄밀함 부여: 프롬프트 엔지니어링은 때때로 과학이라기보다 예술에 가깝습니다. 따라서 프롬프트 최적화는 이 과정에 어느 정도의 엄밀함 (rigor)을 가져다줍니다. 일반적인 평가 주도 개발 또한 이를 달성하는 데 도움이 될 수 있음에 유의하십시오.
모델 간 전환 용이화: 서로 다른 모델은 종종 서로 다른 프롬프팅 전략 (prompting strategies)을 요구합니다. 모델 제공자 (model providers)를 변경하는 것은 단순히 호출하는 URL을 바꾸는 것만큼 간단하지 않습니다. 프롬프트 또한 변경해야 하는 경우가 많기 때문입니다. 프롬프트 최적화 (Prompt optimization)는 이 과정을 가속화할 수 있는데, 이는 사용자가 프롬프팅 (prompting, 모델에 종속적임) 대신 평가 (evals, 모델에 무관함)를 개발하는 데 대부분의 노력을 집중할 수 있게 해주기 때문입니다.
Promptim의 작동 방식
프롬프트 최적화를 위한 저희의 첫 번째 시도를 출시하게 되어 기쁩니다. 이는 LangSmith와 통합되는 오픈 소스 라이브러리 (promptim)입니다 (저희는 데이터셋 관리, 프롬프트 관리, 결과 추적, 그리고 (선택적으로) 인간 라벨링 (human labeling)을 위해 LangSmith를 사용합니다).
핵심 알고리즘은 다음과 같습니다:
- LangSmith 데이터셋, LangSmith 내의 프롬프트, 그리고 로컬에서 정의된 평가기 (evaluators)를 지정합니다. 선택적으로
train/dev/test데이터셋 분할 (splits)을 지정할 수 있습니다. - 초기 프롬프트를
dev(또는 전체) 데이터셋에 실행하여 베이스라인 점수 (baseline score)를 얻습니다. - 그런 다음
train(또는 전체) 데이터셋의 모든 예시 (examples)에 대해 루프를 돕니다. 모든 예시에 대해 프롬프트를 실행한 다음 점수를 매깁니다. 그 후 결과 (입력, 출력, 기대 출력, 점수)를 **메타프롬프트 (metaprompt)**에 전달하여 현재 프롬프트에 대한 변경 사항을 제안하도록 요청합니다. - 그다음 업데이트된 새 프롬프트를 사용하여
dev분할에서 지표 (metrics)를 다시 계산합니다. - 지표가 개선된 것으로 나타나면 업데이트된 프롬프트를 유지합니다. 개선되지 않았다면 원래의 프롬프트를 유지합니다.
- 이 과정은
N번 반복됩니다.
선택적으로, 인간의 피드백 (human feedback)을 남기는 단계를 추가할 수 있습니다. 이는 좋은 자동화된 지표 (automated metrics)가 없거나, 자동화된 지표가 제공할 수 있는 것 이상의 피드백을 기반으로 프롬프트를 최적화하고 싶을 때 유용합니다. 이는 LangSmith의 어노테이션 큐 (Annotation Queues)를 사용합니다.
프롬프트 최적화의 한계
프롬프트 최적화에 대해 기대가 크지만, 이것이 만능 해결책(silver bullet)이라고 생각하지는 않습니다. 최종 결과물에 대한 건전성 검사(sanity check)를 제공하는 용도일지라도, 이 과정에 인간 참여형(human-in-the-loop) 방식을 유지하는 것은 여전히 가치가 있습니다. 이것이 우리가 프롬프트를 저장하기 위해 LangSmith의 Prompt Hub를 사용하는 이유 중 하나이기도 합니다. 나중에 프롬프트를 쉽게 검토할 수 있기 때문입니다.
Promptim과 DSPy 비교
DSPy는 최적화 분야를 선도하는 도구입니다. 우리의 접근 방식과 그들의 방식을 비교해 볼 가치가 있습니다.
첫째, 이번 초기 작업은 단일 프롬프트를 최적화하는 데에만 집중하고 있습니다. DSPy는 전체 "복합 AI 시스템 (compound AI system)"을 최적화하는 데 집중합니다. 우리는 현재로서는 단일 프롬프트가 더 다루기 쉬운 문제(tractable problem)라고 생각하여 단일 프롬프트에 집중하기로 선택했습니다.
둘째, 우리는 인간 참여형(human-in-the-loop) 방식을 유지하는 데 더 집중하는 반면, DSPy는 인간을 조금 더 배제합니다. 이에 대한 한 가지 예로, 최적화 과정의 일부로서 인간의 피드백을 받기 위해 어노테이션 큐(annotation queues)에 연결하는 방식이 있습니다. 또 다른 예는 사후에 쉽게 검토할 수 있도록 LangSmith에 이러한 프롬프트들을 저장하는 것입니다. 마지막 예로는 LangSmith에서 평가 결과(evaluation results)를 추적하는 것이 있습니다.
셋째, 우리는 오로지 프롬프트를 다시 작성(rewriting)하는 데에만 집중하며 그 분야에서 정말 뛰어난 성능을 내는 것을 목표로 합니다. 반면 DSPy는 시스템을 최적화하기 위한 더 넓은 범위의 솔루션(미세 조정 (finetuning), 퓨샷 프롬프팅 (few shot prompting))을 제공합니다.
💡
이러한 차이점 때문에, 우리는 promptim과 dspy를 서로 다른 문제를 해결하기 위한 서로 다른 도구로 보고 있습니다.
향후 계획
파운데이션 모델(foundation models)이 안정화됨에 따라, 우리는 프롬프트 최적화에 대해 점점 더 큰 기대를 품고 있습니다. 우리가 기대하고 있는 작업들은 다음과 같습니다:
- 동적 퓨샷 프롬프팅 (dynamic few shot prompting)에 대한 추진
promptim을 LangSmith UI에 통합promptim에 더 많은 최적화 방법 추가- 프롬프트뿐만 아니라 LangGraph 그래프 전체를 최적화 (이상적으로는 DSPy와의 통합을 통해)
지금 바로 Promptim을 사용해 보세요: pip install promptim.
워크스루(walkthrough)를 보려면 이 YouTube 영상을 확인하시고, 피드백이 있다면 GitHub이나 Twitter로 메시지를 남겨주세요.
AI 자동 생성 콘텐츠
본 콘텐츠는 LangChain Blog의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기