상세 컨텐츠

본문 제목

프롬프트 엔지니어링

인공지능/LLM 서비스 개발

by Ryuzy 2024. 11. 28. 16:16

본문

728x90
반응형

1. 프롬프트 엔지니어링

프롬프트 엔지니어링(prompt engineering)은 인공지능 모델, 특히 자연어 처리 모델(GPT 계열 등)과의 상호작용을 최적화하는 기술입니다. 이는 모델이 주어진 작업을 더 정확하고 효과적으로 수행할 수 있도록, 입력되는 텍스트(프롬프트)를 신중하게 설계하는 과정입니다. 프롬프트 엔지니어링의 핵심은 모델이 의도한 답변을 도출하도록 텍스트를 구성하는 방식으로, 적절한 질문 형식이나 설명을 제공하여 더 나은 성과를 얻는 것을 목표로 합니다. 이 과정은 모델의 한계와 특성을 이해하고, 모델이 특정 방식으로 반응하도록 유도하는 언어적 전략을 포함합니다. 예를 들어, 더 구체적인 정보를 요청하거나, 다양한 조건을 명확히 설정하여 모델이 더 정확하고 유용한 답변을 하도록 유도하는 방식입니다.

 

1. Role

Role(역할)은 AI 모델과의 대화에서 특정 문맥을 설정하거나, 모델의 응답 스타일과 관점을 조정하기 위해 사용하는 개념입니다.

User(사용자): AI와 상호작용하는 주체로, 일반적인 질문이나 요청을 전달합니다.
Assistant(어시스턴트): AI 모델이 자체적으로 응답할 때의 역할로, 사용자의 질문이나 명령에 따라 답변을 제공합니다.
System(시스템): AI 모델의 행동과 스타일을 지시하는 역할로, AI가 어떻게 응답해야 할지 지침을 설정합니다. 예를 들어, "당신은 친절한 도움을 주는 비서입니다"라는 시스템 역할을 설정하면 AI는 친절하고 협조적인 태도로 응답하게 됩니다.

response = client.chat.completions.create(
  model="gpt-3.5-turbo", 
  messages=[{"role": "user", "content": "왜 강남은 강남이라고 할까요?"}],
  temperature=0.0
)

print(response.choices[0].message.content)
print(response)

 

 

2. System Prompt

AI 모델과의 대화에서 모델의 초기 동작이나 응답 스타일을 설정하기 위해 사용되는 프롬프트입니다. AI와의 대화가 시작될 때 system 역할로 주어지는 입력이며, 이 입력은 모델이 그 이후의 대화에서 어떻게 행동해야 하는지를 결정하는 데 중요한 영향을 미칩니다. System Prompt는 모델에게 지침을 제공하여 특정 맥락을 유지하거나 특정한 말투, 관점, 성격으로 응답하도록 유도합니다.

response = client.chat.completions.create(
  model="gpt-3.5-turbo", 
  messages=[{'role': 'system', 'content': '당신은 부동산 마케터입니다. 손님에게 설명하듯이 친근하게 설명해주세요.'},
   {"role": "user", "content": "왜 강남은 강남이라고 할까요?"},],
  temperature=0.0
)

print(response.choices[0].message.content)

 

response = client.chat.completions.create(
  model="gpt-3.5-turbo", 
  messages=[{"role": "user", "content": "당신은 부동산 마케터입니다. 손님에게 설명하듯이 친근하게 설명해주세요. 왜 강남은 강남이라고 할까요?"},],
  temperature=0.0
)

print(response.choices[0].message.content)

 

# stream=True: ChatGPT가 문장을 모두 완성하지 않고 각 단어 별로 완성되는데로 보여줌
response = client.chat.completions.create(
  model="gpt-3.5-turbo", 
  messages=[{"role": "user", "content": "당신은 부동산 마케터입니다. 손님에게 설명하듯이 친근하게 설명해주세요. 왜 강남은 강남이라고 할까요?"},],
  temperature=0.0,
  stream=True
)
for text in response:
    if text.choices[0].delta.content is not None:
        print(text.choices[0].delta.content, end='')

 

Prompt Engineering 기법들에 많은 시간을 투입해도 별다른 결과가 없을 수 있습니다. 더 좋은 Prompt인가 판단하기도 어려울 수 있습니다. 따라서 태스크에 맞춰서 명확한 평가 기준치와 기준치를 확인 할 수 있는 샘플 데이터가 필요합니다.

 

 

2. Prompt Development Cycle

AI 모델, 특히 대화형 언어 모델이나 생성형 AI와 효과적으로 상호작용하기 위해 프롬프트(질문이나 명령어)를 작성하고 개선하는 과정을 의미합니다. 이 사이클은 사용자가 원하는 결과를 정확히 얻기 위해 프롬프트를 반복적으로 수정하고 최적화하는 구조적인 접근법을 따릅니다.

 

1. 목표 정의 (Define Objectives)
원하는 결과나 목표를 명확히 설정합니다. (예: 요약, 번역, 코드 생성, 창의적인 아이디어 도출 등)
각 태스크 별로 사용되는 평가 기준 및 지표들이 다를 수 있습니다.

2. 초기 프롬프트 작성 (Initial Prompt Creation)
초기 프롬프트를 간단하고 명확하게 작성합니다.
예: "영어로 작성된 문서를 200자 내외로 요약해주세요."

3. 실행 및 결과 분석 (Run & Analyze Outputs)
프롬프트를 실행하여 AI의 출력을 확인합니다.
출력이 목표에 부합하는지, 부정확하거나 부족한 부분은 무엇인지 평가합니다.
평가 기준(성능, 응답 속도, 비용)을 설정하고 테스트 케이스를 선정하여 평가를 진행합니다.

4. 피드백 수집 및 수정 (Collect Feedback & Iterate)
결과를 바탕으로 프롬프트를 구체화하거나 명확히 수정합니다.
추가 정보 제공: "200자 내외로 요약하되, 핵심 요점만 포함하세요."
구조 조정: "다음 문장을 고려해 보고서를 요약하세요: ..."
결과가 예상보다 너무 일반적이거나 불완전하다면 조건이나 제약을 추가합니다.

5. 반복 (Iterate)
수정한 프롬프트로 다시 실행하고 결과를 확인합니다.
필요시 여러 번 반복하며 점진적으로 개선합니다.

6. 최적화 및 문서화 (Optimize & Document)
최적화된 프롬프트를 문서화하고 유사한 작업에서 재사용할 수 있도록 기록합니다.
다양한 상황에 적합한 템플릿이나 사례를 만들어 활용도를 높입니다.

 

 

728x90
반응형

'인공지능 > LLM 서비스 개발' 카테고리의 다른 글

Gradio  (0) 2024.11.29
모델 학습 능력 평가  (2) 2024.11.28
파이썬과 몽고DB 연동  (0) 2024.11.22
MongoDb  (1) 2024.11.21
크롤링  (2) 2024.11.20

관련글 더보기