본문으로 건너뛰기
r/LLMDevs조회 2

프롬프트를 구성 요소로 분리해 파일로 관리하는 Python 라이브러리 Peisinoe-Py 프로젝트

Peisinoe-Py는 프롬프트를 재사용 가능한 구성 요소로 명시해 애플리케이션 코드와 분리하고 파일 기반 저작과 구조 인식 평가로 분기 커버리지를 추적하는 오픈소스 Python 라이브러리이다.

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

프롬프트 문자열과 애플리케이션 로직이 섞여 변경 시 코드 전반을 건드리는 문제가 있어서 작성자는 프롬프트를 재사용 가능한 구성 요소(Unit, Static, Select)로 분리하는 Peisinoe를 만들었다. 이 라이브러리는 파라미터 기반 분기 선택을 프롬프트 정의 안으로 옮기고 .prompt 폴더 같은 파일 기반 저작을 통해 코드와 텍스트의 결합을 끊으며 resolve·materialize 호출로 최종 메시지를 생성한다. 추가로 구조 인식 평가 기능은 태그와 분기를 이용해 가능한 변형을 열거하고 어떤 분기가 테스트되지 않았는지를 보고해 테스트 설계와 안전성 검증을 돕는다. 단순한 템플릿 렌더링만 필요할 경우 Jinja가 더 단순한 대안이 될 수 있으며 Peisinoe는 호스팅이나 모델 라우팅 기능을 포함하지 않는 라이브러리 형태임이 명시돼 있다.

실용적 조언

  • 프롬프트가 조건부 분기와 태그 기반 커버리지 추적을 요구한다면 Peisinoe의 Unit/Select/assembly 모델을 사용해 구조화하면 테스트 설계와 안전성 검증이 쉬워진다.
  • 단순히 텍스트를 코드와 분리하고 조건부 렌더링만 필요하다면 Jinja 같은 템플릿 엔진을 선택하면 구현 복잡도를 낮출 수 있다.
  • 파일 기반 작성으로 .prompt 폴더를 사용하면 디자이너와 개발자가 역할을 분리해 프롬프트를 버전관리하고 배포 파이프라인에 통합할 수 있다.

섹션별 상세

01
프롬프트 텍스트와 애플리케이션 제어 로직이 혼재해 변경 시 애플리케이션의 다른 부분까지 건드리게 되는 문제가 프로젝트 동기였다. Peisinoe는 프롬프트를 Unit, Static, Select 같은 재사용 가능한 부분으로 모델링해 입력 파라미터를 바탕으로 분기를 해석하고 resolve 호출로 최종 메시지를 생성하는 방식으로 작동한다. 본문에는 tier 파라미터로 free/pro 분기를 선택하는 코드 예시가 포함돼 있어 동작 흐름을 재현할 수 있다. 이 접근은 프롬프트 변경이 애플리케이션 비즈니스 로직에 영향을 주지 않도록 결합도를 낮추고 유지보수를 단순화했다.
02
프롬프트 구성은 명시적 선택을 프롬프트 정의 안에 넣어 애플리케이션 제어 흐름 대신 구성 자체에서 분기 결정을 하게끔 설계됐다. Unit 정의에서 params로 입력을 받고 Select 섹션이 on 인자에 따라 cases를 골라 각 케이스의 Static 콘텐츠를 조합해 materialize 가능한 결과물을 만든다. 코드 예시는 Unit 생성과 resolve 호출을 통해 입력→처리(분기 결정)→출력(조합된 메시지) 경로를 보여 주며 API 사용법을 그대로 재현 가능한 형태로 제공하고 있다. 이 구조는 프롬프트 변형을 명확히 문서화하고 재사용성을 높였다.
python
support = p.Unit("support", params=("tier",), sections=(
    p.Static("hi", "Hello!"),
    p.Select("policy", on="tier", cases={
        "free": p.Static("f", "Basic help."),
        "pro": p.Static("pp", "Priority help.", tags=("safety",)),
    }, default="free"),
))

r = support.resolve({"tier": "pro"})

이 코드는 Peisinoe의 핵심 API 사용 예로, Unit을 정의하고 Static과 Select 섹션을 포함해 입력 파라미터(tier)에 따라 분기를 선택해 resolve로 최종 변형을 생성하는 과정을 보여 준다. Unit 생성 때 params로 외부 입력을 지정하고 Select는 조건(on)과 cases를 통해 분기별 콘텐츠를 연결한다.

03
파일 기반 저작은 .prompt 폴더 아래에 assembly, unit, markdown 파일을 배치해 코드 외부에서 프롬프트를 관리하는 방식을 의미한다. 본문은 triage.assembly.yaml, system/unit.yaml, user_message.md 같은 폴더 구조와 peisinoe_tools.storage.load로 패키지를 로드해 이름으로 어셈블리를 꺼내 resolve·materialize하는 과정을 제시해 실제 파일 기반 워크플로를 재현하고 있다. 이 방식은 디자이너나 문서 작성자가 애플리케이션 코드에 접근하지 않고 프롬프트를 갱신할 수 있게 해 협업과 버전 관리를 용이하게 만든다. 또한 파일화된 구성은 배포 시 프롬프트 변경 이력을 추적하는 데 유리하다.
python
from peisinoe_tools.storage import load
pkg = load("support.prompt") # point at the folder once
prompt = pkg["triage"] # get the assembly by name
prompt.resolve({"tier": "pro", "question": "…"}).materialize()

이 코드는 .prompt 폴더에서 프롬프트 패키지를 로드하고 어셈블리 이름으로 접근해 resolve와 materialize를 호출해 실제 텍스트를 얻는 예시로, 파일 기반 작성물과 런타임 바인딩 과정을 보여 준다.

04
구조 인식 평가는 프롬프트 구성의 분기와 태그를 분석해 도달 가능한 변형을 열거하고 각 분기에 대한 평가 커버리지를 보고하는 기능으로 작동한다. 본문은 EvalSpec과 Target, Contains를 사용해 안전성 태그가 붙은 분기에서 특정 단어 포함 여부를 검사하는 예시를 제시하고 coverage(pl).branches_uncovered 호출로 미검증 분기('support > policy=free')를 반환하는 실제 출력 예를 포함했다. 이로 인해 안전성 검사나 특정 콘텐츠 노출 여부를 분기 단위로 추적할 수 있어 테스트 설계와 검증 체계를 구조적으로 강화할 수 있다. 다만 저자는 Jinja 같은 템플릿 엔진이 단순 텍스트 분리에는 더 단순한 해법이 될 수 있음을 명시해 사용 목적에 따라 도구 선택의 트레이드오프가 존재한다.
python
from peisinoe_tools.evals import EvalSpec, Target, Contains, plan, coverage
spec = EvalSpec("mentions_help", Target(all_of=("safety",)), Contains("help"))
pl = plan(support, [spec])
coverage(pl).branches_uncovered # ('support > policy=free',) — the free branch is untested

이 코드는 구조 인식 평가 작성 예로, EvalSpec으로 태그 기반 타깃을 정의하고 plan으로 평가 계획을 만들며 coverage로 테스트되지 않은 분기를 확인해 어느 분기가 미검증인지 보고하는 흐름을 보여 준다.

용어 해설

프롬프트 구성(Prompt Composition)
프롬프트 구성은 프롬프트를 재사용 가능한 부분들로 분해하고 이들 부분을 조합해 최종 입력을 만드는 방식이다. 본문에서는 각 부분을 Unit/Static/Select 같은 구성 요소로 명시적으로 표현해 선택 로직을 애플리케이션 흐름에서 분리하는 방식을 취했다. 이렇게 하면 프롬프트 변형을 구조적으로 열거하고 특정 분기만 평가하거나 파일로 관리할 수 있어 유지보수와 테스트가 용이해진다.
파일 기반 작성(File-based Authoring)
파일 기반 작성은 프롬프트 정의를 코드 내 문자열이 아니라 Markdown/YAML 같은 파일 구조로 보관해 버전관리와 협업을 쉽게 하는 방식이다. 본문에서는 .prompt 폴더 구조로 단위(unit), 어셈블리(assembly), 마크다운 메시지를 저장해 런타임에 로드하도록 구현했다. 이 접근은 애플리케이션 코드와 프롬프트 텍스트의 결합을 줄여 배포와 편집 권한을 분리한다.
구조 인식 평가(Structure-aware Eval)
구조 인식 평가는 프롬프트의 구성 요소와 분기를 이해해 가능한 변형(branches)을 열거하고 각 변형에 대한 평가 타깃과 커버리지를 측정하는 방법론이다. Peisinoe는 Select와 태그를 통해 도달 가능한 변형을 산출하고 어떤 분기가 테스트되지 않았는지 보고하도록 평가 스펙(EvalSpec)을 연결한다. 이를 통해 안전성 태그나 특정 콘텐츠 포함 여부를 분기 단위로 추적할 수 있다.
어셈블리 패턴(Assembly Pattern)
어셈블리 패턴은 여러 단위(unit)를 이름으로 결합해 하나의 완성된 프롬프트를 구성하는 방식이다. 본문에서는 triage.assembly.yaml 같은 파일로 named parts를 유선(wire)해 서로 다른 단위를 조합하고 resolve 호출로 최종 메시지를 생성했다. 이 패턴은 반복되는 조립 규칙을 재사용 가능하게 만들어 복잡한 프롬프트 구성을 간결하게 관리한다.

코드 예제

bash
pip install peisinoe
pip install "peisinoe[storage]" # Markdown/YAML packages

이 명령어는 패키지 설치 예시로, 기본 라이브러리와 파일 기반 작성(storage) 기능을 포함하는 추가 패키지를 설치하는 방법을 제시한다.

언급된 도구

Peisinoe-Py추천링크

프롬프트 구성 요소 모델링, 파일 기반 저작, 구조 인식 평가 도구

Jinja중립

조건부 템플릿 렌더링을 통해 코드에서 텍스트 분리를 간단히 구현하는 템플릿 엔진

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 07. 13.수집 2026. 07. 13.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.