Prompt Engineering

프롬프트 엔지니어링 기법 with 실습(3) / XML tagging

jjowahye 2025. 3. 2. 21:20

프롬프트 엔지니어링 기법- 4번

  1. 명확하고 직접적으로 전달: 응답을 안내하기 위해 명확한 지침과 컨텍스트 제공
  2. Few-shot 프롬프팅 : 원하는 출력 형식이나 스타일을 설명하기 위해 프롬프트에 예제 포함
  3. 역할 프롬프팅 : 사용 사례에 대한 성능을 높이기 위해 AI가 (전문가와 같은) 특정 역할을 수행하도록 준비시킴
  4. XML 태그 사용: 명확성을 높이기 위해 XML 태그를 통합하여 프롬프트와 응답 구조화
  5. 프롬프트 연결: 더 나은 결과를 위해 복잡한 작업을 더 작고 관리 가능한 단계로 분할
  6. 생각할 시간 제공: 출력 품질을 개선하기 위해 단계별 사고 장려
  7. 응답 미리 채우기: 출력을 원하는 방향으로 안내하기 위해 몇 단어로 응답 시작
  8. 출력 형식 제어: 일관성과 가독성을 보장하기 위해 원하는 출력 형식 지정
  9. 다시 쓰기(rewrite) 요청: 루브릭에 기반하여 수정을 요청하여 반복적으로 출력을 개선하도록 함
  10. 긴 컨텍스트 창 팁: 더 긴 컨텍스트 창을 활용하는 프롬프트 최적화


4. XML 태그 사용

AI는 훈련 중에 XML 태그가 포함된 프롬프트에 노출되었기 때문에 이러한 프롬프트에 특히 익숙하다. 프롬프트의 핵심 부분(ex. 지침, 예시, 입력 데이터)을 xml 태그로 감싸면 AI가 문맥을 더 잘 이해하고 더 정확한 출력을 생성하는 데 도움이 된다. 이 기술은 복잡한 프롬프트 및 가변 입력 사용 시 특히 유용하다. 

XML 태그란?

<tag></tag>와 같은 꺾쇠 괄호 태그이다. <tag>와 같은 여는 태그와, /로 표시된 </tag>와 같은 닫는 태그로 구성된다. 

<tag>content</tag>와 같이 콘텐츠를 감싸는 데 사용된다.

여는 xml 태그와 닫는 xml 태그는 정확히 같은 이름을 써야한다. 태그 이름은 마음대로 지정할 수 있지만 태그 안의 컨텐츠와 관련된 이름으로 지정하는 것이 좋다. 항상 쌍으로 언급되어야하는 것을 주의해야한다. 

XML tag를 활용한 프롬프트 예시

1. 역할 지정 프롬프트: 
<role>당신은 경험 많은 소프트웨어 개발자입니다</role> 
<task>초보 개발자에게 객체 지향 프로그래밍의 기본 원칙을 설명해주세요.</task> 

2. 단계별 지시 프롬프트: 
<instructions> 
<step1>주어진 텍스트의 주요 주제를 파악하세요</step1> 
<step2>각 주제에 대한 핵심 포인트를 3개씩 추출하세요</step2> 
<step3>추출한 정보를 bullet point 형식으로 정리해주세요</step3> 
</instructions> 

3. 컨텍스트 제공 프롬프트: 
<context>고객 서비스 팀에서 일하는 직원입니다</context> 
<situation>불만을 가진 고객이 전화로 연락해왔습니다</situation> 
<request>이 상황을 원만하게 해결할 수 있는 대화 스크립트를 작성해주세요</request>

4. 포맷 지정 프롬프트: 
<format> 
<intro>문제 상황 설명</intro> 
<body>해결 방안 3가지 제시</body> 
<conclusion>최선의 방안 추천 및 이유</conclusion> 
</format> 
<topic>회사 내 의사소통 개선 방안</topic> 

5. 스타일 가이드 프롬프트: 
<style_guide> 
<tone>전문적이면서도 친근한 톤</tone> 
<length>각 섹션당 100 단어 이내</length> 
<audience>20-30 대 직장인</audience> 
</style_guide> 
<content>재택근무의 장단점에 대한 블로그 포스트를 작성해주세요</content>

 

이러한 XML 태그 구조를 사용하면 프롬프트의 각 요소를 명확히 구분하고, AI가 요청사항을 더 정확히 이해하고 실행할 수 있도록 도와준다.

실습 예시

법률 계약서 분석
Bad 이 소프트웨어 라이선스 계약서를 잠재적 위험과 책임에 대해 분석하세요: {{CONTRACT}}. 면책, 책임 제한, IP 소유권 조항에 중점을 두세요. 또한 특이하거나 우려되는 조건들을 기록하세요. 참고용 표준 계약서입니다: {{STANDARD_CONTRACT}}. 법무팀을 위한 조사 결과와 권장사항을 제시하세요. 제공된 소프트웨어 라이선스 계약서는 몇 가지 우려되는 측면이 있습니다. 면책 조항이 지나치게 광범위하여 상당한 책임에 노출될 수 있습니다. 책임 제한 섹션은 손해배상을 단 $500로 제한하는데, 이는 기업 수준의 사용에 부적절합니다. IP와 관련하여, 계약서는 우리가 만드는 모든 수정이나 통합에 대해 공급업체에 공동 소유권을 부여합니다.

요약하면, 이 계약은 우리에게 이롭지 않습니다. 과도한 위험에 노출시키고, 실패 시 구제 수단을 제한하며, 우리의 지적 재산권을 손상시킵니다. 이러한 조건들을 재협상하거나 대체 공급업체를 찾을 것을 권장합니다.
Good 이 소프트웨어 라이선스 계약서를 법적 위험과 책임에 대해 분석하세요.

우리는 핵심 데이터 인프라를 위해 이 계약을 고려하고 있는 다국적 기업입니다.

<agreement>
{{CONTRACT}}</agreement>

참고용 표준 계약서입니다:
<standard_contract>{{STANDARD_CONTRACT}}</standard_contract>

<instructions>
1. 다음 조항들을 분석하세요:
- 면책
- 책임 제한
- IP 소유권

2. 특이하거나 우려되는 조건들을 기록하세요.

3. 우리의 표준 계약서와 비교하세요.

4. 조사 결과를 <findings> 태그 안에 요약하세요.

5. 실행 가능한 권장사항을 <recommendations> 태그 안에 나열하세요.</instructions>
<findings>
1. 면책 (제8조):
- 문제: 지나치게 광범위. “모든 청구”에 대해 공급업체를 면책.
- 위험: 공급업체의 과실이나 제품 결함에도 우리가 책임질 수 있음.
- 차이: 우리의 표준은 계약 위반으로 인한 청구로 면책을 제한함.

2. 책임 제한 (제9조):
- 문제: 직접 손해를 포함한 모든 손해를 $500로 제한.
- 위험: 기업 사용에 매우 부적절. 중대한 실패는 수백만 달러의 비용 초래 가능.
- 차이: 우리의 표준은 지불된 12개월 수수료까지 직접 손해 허용.

3. IP 소유권 (제12조):
- 문제: 우리의 수정/통합에 대해 공급업체에 공동 소유권 부여.
- 위험: 공급업체가 우리의 독점 알고리즘이나 데이터 인사이트를 사용하거나 판매할 수 있음.
- 차이: 우리의 표준은 우리 작업에 대한 완전한 소유권 유지.

4. 특이 조항:
- 제5.3조: 공급업체가 우리의 사용 데이터를 “모든 목적”으로 사용 가능.
- 제7.2조: 공급업체가 7일 통지로 “편의상” 해지 가능.
- 제11조: 기본적인 상품성에 대한 보증도 전혀 없음.
</findings>

<recommendations>
1. 이 계약을 거부하세요. 기업에게는 이점보다 위험이 훨씬 큽니다.
2. 반대 제안:
- 면책: 계약 위반으로 인한 청구로 제한.
- 책임: 직접 손해는 12개월 수수료로 제한; 간접 손해는 협상.
- IP: 우리의 수정/통합에 대한 완전한 소유권.
- 데이터 사용: 서비스 개선으로만 제한.
- 해지: 최소 90일 통지; 사유가 있는 경우에만.
- 보증: 기본적인 상품성과 목적 적합성 요구.
3. 공급업체가 거부하면 대체 공급업체나 자체 솔루션 탐색.
4. 높은 위험을 고려하여 계약 협상에 법률 자문 참여.
</recommendations>