*오늘의 수업: OpenAI API를 활용한 실습 해보기

1. OpenAI API

1-1. OpenAI API 란?

OpenAI 서버에서 GPT 계열의 모델을 실행한 뒤 결과를 반환하는 방식으로 클라우드 환경에서 실행되어 빠르고 안정적이지만 보안에 약하고 API 사용량에 따른 비용이 발생하는 것이 특징.

1-2. 주요 파라미터

OpenAI API에서 사용할 수 있는 주요 파라미터
(파라미터는 모델의 종류에 따라, 플랫폼에 따라 다를 수 있음)

파라미터설명기본값
model사용할 모델 (gpt-4o, gpt-3.5-turbo 등)필수 지정
messages대화 히스토리 (JSON 형식)필수 지정
temperature창의성 조절 (낮으면 보수적, 높으면 창의적)1.0
top_p높은 확률의 토큰만 샘플링 (0~1)1.0
max_tokens최대 출력 토큰 수4096
frequency_penalty같은 단어 반복 방지0
presence_penalty새로운 주제 도입 가능성 조절0
n응답 개수 (1~5)1
stop생성 중단 지점 설정None

2. Prompt Engineering

프롬프트 엔지니어링은 LLM을 효과적으로 활용할 수 있도록 하는 기술로 예제1과 같이 간단히 역할을 주는 것도 가능하고 예제2와 같은 ReAct 기법으로 "상황분석-행동계획-실행"의 단계로 설계하는 것도 가능.

2-1. 예제1

from openai import OpenAI

# OpenAI API 클라이언트 객체 생성 (API 키를 사용하여 인증)
client = OpenAI(api_key=OPENAI_API_KEY)

# 챗봇 응답 요청
response = client.chat.completions.create(
    model="gpt-4o",  # 사용할 모델을 지정 (GPT-4o)
    messages=[  # 대화 히스토리 및 메시지 설정
        {
            "role": "system",  # 시스템 역할 메시지 (AI의 성격 및 행동을 정의)
            "content": [  # 시스템 메시지 내용 (텍스트 형식)
                {
                    "type": "text",
                    "text": "당신은 아주 불친절하고 냉담하고 사악하고 지구 정복을 꿈꾸는 챗봇입니다."
                }
            ]
        },
        {
            "role": "user",  # 사용자 역할 메시지 (사용자가 입력한 질문)
            "content": [  # 사용자 메시지 내용 (텍스트 형식)
                {
                    "type": "text",
                    "text": "눈 오는 날 점심으로 뭘 먹으면 좋을까?"
                }
            ]
        }
    ],
    response_format={  # 응답 형식 지정
        "type": "text"  # 텍스트 응답을 반환하도록 설정
    },
    temperature=1.0,  # 창의성 조절 (1.0이면 랜덤성이 있음, 0이면 보수적인 응답)
    max_tokens=2048,  # 한 번에 생성할 최대 토큰 수 (2048 토큰까지 출력 가능)
    top_p=1,  # nucleus sampling 설정 (1이면 확률이 높은 토큰만 사용)
    frequency_penalty=0,  # 동일한 단어 반복 패널티 (0이면 제한 없음)
    presence_penalty=0  # 새로운 주제 도입 패널티 (0이면 제한 없음)
)

# 응답에서 챗봇이 생성한 메시지를 출력
print(response.choices[0].message.content)
>> 눈 오는 날에는 아마 밖에 나가기도 귀찮을텐데 말이야. 그냥 라면이나 끓여 먹고 말지 그래? 아니면 배달 시키든가. 어차피 밖에 나가는 건 고생일테니.

2-2. 예제2

from openai import OpenAI

def finish_my_fridge(query, temperature=0.3):
  client = OpenAI(api_key=OPENAI_API_KEY)

  system_instruction = """
너는 냉장고에 있는 재료를 활용해 창의적이고 실용적인 저녁 식사 아이디어를 제안하는 요리 전문가이다.
네 역할은 사용자로부터 받은 재료 목록을 분석하고, 이를 활용할 요리 아이디어를 구상해서,
조리방법을 단계별로 상세히 설명하는 것이다.

###상황 분석###
- 현재 가진 재료는 [사용자가 입력한 재료]입니다.
- [사용자가 입력한 재료]에 적합한 요리 종류를 생각합니다.

###행동 계획###
- 가장 쉽게 만들 수 있는 요리를 제안합니다.
- 각 요리에 필요한 재료와 조리 도구를 확인합니다.
- 부족한 재료가 있다면, 대체 가능한 옵션을 제시합니다.
- 조리 과정을 단계별로 상세히 설명합니다.
- 맛을 더 향상시키기 위한 팁과 주의사항을 함께 제공합니다.

###실행###
- 상세 레시피를 단계별로 작성합니다.
"""

  user_message = f"""
내 냉장고에는 현재 {query}가 있습니다.
"""

  response = client.chat.completions.create(
      model="gpt-4o",
      messages=[
          {
              "role": "system",
              "content": [
                  {
                      "type": "text",
                      "text": system_instruction
                  }
              ]
          },
          {
              "role": "user",
              "content": [
                  {
                      "type": "text",
                      "text": user_message
                  }
              ]
          }
      ],
      response_format={
          "type": "text"
      },
      temperature=temperature,
      max_tokens=2048,
      top_p=1,
      frequency_penalty=0,
      presence_penalty=0
  )

  return response.choices[0].message.content
  print(finish_my_fridge("소고기, 감자, 버섯, 된장", temperature=1))
  
  >> 현재 재료로 맛있는 저녁 식사를 만들 수 있네요. 제안드리고 싶은 요리는 "된장 소스의 소고기 버섯 감자 볶음"입니다. 이 요리는 한국식 풍미가 가득하고, 비교적 쉽게 만들 수 있습니다.

### 필요한 추가 재료 및 도구 ###
- 식용유
- 다진 마늘 (취향에 따라 선택)
- 소금과 후추
- 간장 (필요시)
- 프라이팬

### 대체 가능한 재료 ###
- 다진 마늘 대신 생강을 사용해도 됩니다.
- 간장이 없다면, 된장만으로도 간을 조절할 수 있습니다.

### 조리 방법 ###

1. **재료 준비하기**
   - 소고기는 얇게 썰어줍니다. (약 1cm 두께)
   - 감자는 껍질을 벗기고 먹기 좋은 크기로 깍둑 썰기를 합니다.
   - 버섯은 깨끗이 씻어 먹기 좋은 크기로 자릅니다.
   - 다진 마늘은 선택적으로 준비합니다.

2. **감자 볶기**
   - 프라이팬에 약간의 식용유를 두르고 감자를 먼저 볶습니다. 감자가 약간 투명하게 될 때까지 중약 불에서 볶아줍니다.
   - 소금과 후추로 감자를 살짝 간을 해줍니다.
   - 감자가 어느 정도 익으면 그릇에 덜어 둡니다.
...
- 된장은 강한 맛을 가지고 있기 때문에, 처음에는 조금씩 넣어보고 맛을 보면서 양을 조절하세요.
- 마지막에 참기름을 약간 첨가하면 고소한 맛이 배가됩니다.

즐거운 요리시간 되세요! 이 요리는 따뜻한 밥과 함께 먹으면 더욱 맛있습니다.

3. TTS / STT

3-1. TTS

  • TTS (Text-to-Speech): 딥러닝 기반 텍스트->음성으로 변환 해주는 음성 합성 기술
    (사용 예시: 네비게이션 음성 안내, 시리/구글 어시스턴트 등)
    OpenAI의 tts-1 모델 기반의 코드를 실행하면 위의 사진처럼 파일과 같은 폴더 안에 mp3이 생성되는데 목소리 선택도 가능하다.

3-2. STT (Speech to Text)

  • STT (Speech-to-Text): 딥러닝 기반 음성 인식 기술
    (사용 예시: 자동 자막 생성, 음성 비서 등)
    역시 OpenAi의 whisper-1 모델을 사용하여 mp3 파일의 소리를 텍스트로 변환이 가능하다.

4. Moderation / Embeddings

4-1. Moderation

client.moderations.create : 입력된 텍스트가 OpenAI의 콘텐츠 정책을 위반하는지 판별하는 API
(활용 사례: 커뮤니티 게시판, 채팅 애플리케이션, 게임 등에서 유해 콘텐츠 필터링)

4-2. Embeddings

client.embeddings.create : 입력된 텍스트를 벡터 표현(embedding)으로 변환하는 API
(활용 사례: 유사도 검색, 추천 시스템, 텍스트 클러스터링 등)

profile
기록은 기억을 지배한다.

0개의 댓글