ChatGPT 프롬프트 엔지니어링 과정: 반복적인 프롬프트 작성 방법

반응형

최근에 앤드류 응(Andrew Ng) 교수님은 OpenAI와 협력하여 개발자를 위한 ChatGPT 프롬프트 엔지니어링 과정을 출시했습니다 .


이전글


반복적인 프롬프트 개발

이번 강의에서는 제품 규격서를 기반으로 마케팅 카피를 생성하기 위해 반복적으로 프롬프트를 분석하고 개선하는 방법을 설명합니다.

프롬프트 가이드라인

  1. 프롬프트는 명확하고 구체적이어야 합니다.
  2. 원하는 결과가 나오지 않는다면 이유를 분석합니다.
  3. 아이디어와 프롬프트를 재작성합니다.
  4. 이 과정을 계속 반복합니다.

앤드류 응 교수님은 "이 세상에 완벽한 프롬프트는 없다"라고 말씀하셨습니다. 따라서 완벽한 프롬프트가 있다는 인터넷 기사에 큰 관심을 가질 필요는 없습니다. 중요한 것은 애플리케이션에 맞는 적절한 프롬프트를 개발하는 프로세스를 갖추는 것입니다.

제품 규격서에서 마케팅 제품 설명 생성하기

다음 코드는 의자에 대한 기술 규격서입니다.

fact_sheet_chair = """
OVERVIEW
- Part of a beautiful family of mid-century inspired office furniture,
including filing cabinets, desks, bookcases, meeting tables, and more.
- Several options of shell color and base finishes.
- Available with plastic back and front upholstery (SWC-100)
or full upholstery (SWC-110) in 10 fabric and 6 leather options.
- Base finish options are: stainless steel, matte black,
gloss white, or chrome.
- Chair is available with or without armrests.
- Suitable for home or business settings.
- Qualified for contract use.

CONSTRUCTION
- 5-wheel plastic coated aluminum base.
- Pneumatic chair adjust for easy raise/lower action.

DIMENSIONS
- WIDTH 53 CM | 20.87”
- DEPTH 51 CM | 20.08”
- HEIGHT 80 CM | 31.50”
- SEAT HEIGHT 44 CM | 17.32”
- SEAT DEPTH 41 CM | 16.14”

OPTIONS
- Soft or hard-floor caster options.
- Two choices of seat foam densities:
medium (1.8 lb/ft3) or high (2.8 lb/ft3)
- Armless or 8 position PU armrests

MATERIALS
SHELL BASE GLIDER
- Cast Aluminum with modified nylon PA6/PA66 coating.
- Shell thickness: 10 mm.
SEAT
- HD36 foam

COUNTRY OF ORIGIN
- Italy
"""

그리고 위 기술 규격을 활용하여 마케팅 팀이 온라인 소매 웹사이트의 제품 설명을 작성하는 것을 돕고 싶다고 가정해 보겠습니다.

prompt = f"""
Your task is to help a marketing team create a
description for a retail website of a product based
on a technical fact sheet.

Write a product description based on the information
provided in the technical specifications delimited by
triple backticks.

Technical specifications: ```{fact_sheet_chair}```
"""
response = get_completion(prompt)
print(response)

(번역) 당신의 임무는 마케팅 팀이 기술 규격서에 명시된 내용을 토대로 제품 소매 웹사이트의 제품 설명 작성하는 것을 돕는 것입니다.
세 개의 백틱으로 구분된 기술 규격서에 제공된 정보를 바탕으로 제품 설명을 작성합니다.

코드를 실행하면 다음과 같이 긴 설명이 생성됩니다.

설명이 너무 깁니다. 더 간결하게 요약하도록 프롬프트를 개선하여 다시 시도해 봅시다.

이슈 1: 텍스트가 너무 길다.

프롬프트에 단어, 문장 또는 문자 수를 제한하는 지침을 추가할 수 있습니다.

최대 50 단어로 요약하기

다음 코드를 실행하면 이전에 비해 더 짧은 요약이 생성됩니다.

그리고 텍스트 길이를 확인해 보겠습니다.

47단어로 이루어져 있습니다. LLM은 정확한 단어 수 지침을 따르는 데 능숙하지 않지만, 위 결과를 보면 단어 수가 어느 정도 적절하게 나왔습니다.

최대 3 문장으로 요약하기

이번에는 최대 3문장으로 요약하도록 요청해 보겠습니다. 이는 LLM에게 원하는 출력 길이를 전달하는 또 다른 방법입니다.

최대 280 글자로 요약하기

또한 최대 280자까지 사용하도록 요청할 수도 있습니다.

일반적으로 LLM은 이 정도까지의 글자수에 근접하지 못하기 합니다. 하지만 거의 비슷한 281자가 나온 것은 조금 놀랍습니다.

출력의 길이를 제어하기 위해 다양한 방법을 시도해 볼 수 있습니다.

이슈 2. 잘못된 세부 사항에 초점을 맞춘 텍스트

프롬프트를 수정하여 더 정확한 기술적 세부 정보를 요청할 수 있습니다.

설명에 기술적인 내용을 담고 제품의 구성 재료에 초점을 맞추세요

이 설명은 가구 소매업체를 대상으로 하므로, 재료, 제품 및 구성 요소에 중점을 두며 기술적인 내용을 포함해야 한다는 지침을 추가했습니다.

응답 결과는 괜찮게 나왔습니다. 기술적인 세부 내용도 잘 포함되어 있습니다.

설명 마지막에 기술 규격서에 있는 7자리의 제품 ID를 모두 포함하세요

설명 마지막에 기술 규격서에 명시된 7자리 제품 ID를 모두 포함하도록 지침을 추가합니다.

2가지 제품인 SWC-110, SOC-100가 추가되었습니다.

이슈 3. 설명에 치수 표가 필요한 경우

정보를 추출하여 표로 정리해 달라고 요청할 수 있습니다. 다음 예시는 제품 치수를 제공하는 표를 포함하고 출력 형식을 HTML로 출력하도록 요청합니다.

prompt = f"""
Your task is to help a marketing team create a
description for a retail website of a product based
on a technical fact sheet.

Write a product description based on the information
provided in the technical specifications delimited by
triple backticks.

The description is intended for furniture retailers,
so should be technical in nature and focus on the
materials the product is constructed from.

At the end of the description, include every 7-character
Product ID in the technical specification.

After the description, include a table that gives the
product's dimensions. The table should have two columns.
In the first column include the name of the dimension.
In the second column include the measurements in inches only.

Give the table the title 'Product Dimensions'.

Format everything as HTML that can be used in a website.
Place the description in a <div> element.

Technical specifications: ```{fact_sheet_chair}```
"""

response = get_completion(prompt)
print(response)

(번역) 설명 끝에 제품의 치수가 표시된 표를 포함합니다. 표에는 두 개의 열이 있어야 합니다. 첫 번째 열에는 치수 이름을 포함합니다. 두 번째 열에는 인치 단위로만 측정값을 포함합니다.
표 제목은 '제품 치수’로 지정합니다.
웹사이트에서 사용할 수 있는 HTML로 모든 형식을 지정합니다.
설명을 <div> 요소에 배치합니다.

이제 실행해 봅시다.

Python 라이브러리를 로드하여 HTML 보기

주피터 노트북에서 HTML을 표시하여 HTML을 확인합니다.

from IPython.display import display, HTML

display(HTML(response))

마치며

효과적인 프롬프트를 개발하는 것은 반복적인 과정이며, 좋은 프로세스를 갖추는 것이 중요합니다.일단 프롬프트를 시도해보고 원하는 결과를 얻지 못한 경우 원인을 분석하고, 명확한 지침을 작성하거나, LLM이 더 많이 생각할 시간을 줍니다. 그리고 여러 예시를 통해 프롬프트를 점진적으로 구체화합니다.

반응형