Nacho

[냉부] 👨‍🍳 레시피 AI 만드는 여정 (3) 본문

Toys

[냉부] 👨‍🍳 레시피 AI 만드는 여정 (3)

Nacho_13 2024. 11. 12. 16:17
반응형

자네 돈 좀 있나?

본문에서는...

  • 끝까지 해결하지 못한 오류
  • OpenAi 한테 호구당한 이야기
  • Flask 서버
  • EC2
  • LLama3.1 파인튜닝
  • 웹 크롤링 (완료)

과 같은 내용을 다룹니다..

 

 

5. OpenAi API 사용하기

Llama3.1 모델 로드를 실패하고 Colab 비용을 확인하니 chat gpt 비용이랑 별 다를 게 없는 슬픈 사실을 발견..

 

어차피 모델 로드도 안되는 거 GPT API나 사용해보자는 심정으로 GPT 결제하고 API 충전했다.

 

api 키 발급

API 키를 발급받고나서

 

사용할만큼 지갑을 채워준다. gpt-4o 기준 답변 1개당 14원 정도였다. 

 

발급받은 api 키를 복사해서 환경변수에 선언해준다.

vi ~/.zshrc 
#vi ~/.bashrc 
export OPENAI_API_KEY = "여기에 키 입력"

 

사용하는 zsh, bash 에 맞게 설정하면 api 사용 준비는 끝이다.

 

from openai import OpenAI

client = OpenAI()

user_chat = '치즈 감자 크림 스파게티면'

completion = client.chat.completions.create(
    model="gpt-4o-2024-08-06",
    messages=[
      {
          "role": "system", 
          "content": '''당신은 주어진 재료를 이용하며 맛있는 요리 레시피를 작성하는 AI입니다.
              주어진 역할에 충실하게 단계적으로 음식을 만드는 과정을 쉽고 자세히 설명합니다.
              요리를 처음 하는 사람도 따라 할 수 있는 친절한 설명이 필요합니다.
              한국어로 단계에 맞춰 설명해주세요.
            '''
          },
      {"role": "user", "content": f"{user_chat}"}
    ]
  }
)

generated_text = completion.choices[0].message.content
print(generated_text)

# Input : 치즈 감자 크림 스파게티면
# Output
'''
치즈 감자 크림 스파게티 
감자와 치즈, 그리고 크림의 부드러운 맛이 어우러진 스파게티입니다. 간단하지만 고급스러운 맛을 즐길 수 있는 이 레시피는 어떤 식사 자리에서도 사랑받을 것입니다.
- 스파게티 면 200g
- 감자 2개, 우유 1컵
- 생크림 1/2컵, 버터 2큰술
- 다진 마늘 1작은술
- 모짜렐라 치즈 100g
- 파르메산 치즈 50g
- 소금 적당량
- 후추 적당량

**Step.1**큰 냄비에 물을 넣고 끓입니다. 물이 끓어오르면 소금을 조금 넣고 약 8분 정도 스파게티 면을 삶습니다.
**Step.2**감자는 껍질을 벗기고 작은 크기로 잘라줍니다
**Step.3**다른 팬에 버터를 녹이고 다진 마늘을 넣어 1분간 볶아 향을 내줍니다.
**Step.4**다진 감자를 넣고 중불에서 감자가 반쯤 익을 때까지 약 5분간 볶습니다.
**Step.5**팬에 우유와 생크림, 소금, 후추를 넣고 잘 섞어 중약불에서 크림 소스가 되도록 끓여줍니다.
**Step.6**삶아 놓은 스파게티 면을 건져 팬에 넣고 골고루 섞어줍니다. 그 위에 모짜렐라 치즈를 뿌리고 치즈가 녹을 때까지 끓입니다.
**Step.7**마지막으로 파르메산 치즈를 뿌린 후, 스파게티를 그릇에 옮겨 담습니다.
**Tips**스파게티 면의 알덴테 상태를 원하시면 포장지에 기재된 시간보다 1-2분 짧게 삶아주세요. 감이에 따라 소금과 후추의 양을 조절하여 마무리하시면 더 맛있게 즐길 수 있습니다. 감자 대신 다른 야채나 버섯을 추가해도 좋습니다.
'''

 

진짜 돈쓰는 맛난다. 레시피 파인튜닝 없이 그냥 가져와 버린다.

 

나는 json 형식으로 받아와서 post로 내보내는 것이 목정이기 때문에 response_format 을 지정해 준다.

 

6. OpenAi 답변 양식 설정 (Json)

completion = client.chat.completions.create(
    model="gpt-4o-2024-08-06",
    messages=[
      {
          "role": "system", 
          "content": '''당신은 주어진 재료를 이용하며 맛있는 요리 레시피를 작성하는 AI입니다.
              주어진 역할에 충실하게 단계적으로 음식을 만드는 과정을 쉽고 자세히 설명합니다.
              요리를 처음 하는 사람도 따라 할 수 있는 친절한 설명이 필요합니다.
              한국어로 단계에 맞춰 설명해주세요.
            '''
          },
      {"role": "user", "content": f"{user_chat}"}
    ],
    response_format={
      "type": "json_schema",
      "json_schema": {
        "name": "recipes",
        "schema": {
          "type": "object",
          "properties": {
            "title" : {"type": "string"},
            "summary" : {"type": "string"},
            "ingredients" : {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "name": {"type": "string"},
                  "ea": {"type": "string"}
                },
                "required": ["name", "ea"],
                "additionalProperties": False
              }
            },
            "steps": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "step": {"type": "string"},
                },
                "required": ["step"],
                "additionalProperties": False
              }
            },
            "tips": {"type": "string"}
          },
          "required": ["title","summary","ingredients","steps", "tips"],
          "additionalProperties": False
        },
        "strict": True
      }
    }
)


# Output
'''
{
    "title":"치즈 감자 크림 스파게티",
    "summary":"감자와 치즈, 그리고 크림의 부드러운 맛이 어우러진 스파게티입니다. 간단하지만 고급스러운 맛을 즐길 수 있는 이 레시피는 어떤 식사 자리에서도 사랑받을 것입니다.",
    "ingredients":[
        {"name":"스파게티 면","ea":"200g"},
        {"name":"감자","ea":"2개"},
        {"name":"우유","ea":"1컵"},
        {"name":"생크림","ea":"1/2컵"},
        {"name":"버터","ea":"2큰술"},
        {"name":"다진 마늘","ea":"1작은술"},
        {"name":"모짜렐라 치즈","ea":"100g"},
        {"name":"파르메산 치즈","ea":"50g"},
        {"name":"소금","ea":"적당량"},
        {"name":"후추","ea":"적당량"}
    ],
    "steps":[
        {"step":"큰 냄비에 물을 넣고 끓입니다. 물이 끓어오르면 소금을 조금 넣고 약 8분 정도 스파게티 면을 삶습니다."},
        {"step":"감자는 껍질을 벗기고 작은 크기로 잘라줍니다."},
        {"step":"다른 팬에 버터를 녹이고 다진 마늘을 넣어 1분간 볶아 향을 내줍니다."},
        {"step":"다진 감자를 넣고 중불에서 감자가 반쯤 익을 때까지 약 5분간 볶습니다."},
        {"step":"팬에 우유와 생크림, 소금, 후추를 넣고 잘 섞어 중약불에서 크림 소스가 되도록 끓여줍니다."},
        {"step":"삶아 놓은 스파게티 면을 건져 팬에 넣고 골고루 섞어줍니다. 그 위에 모짜렐라 치즈를 뿌리고 치즈가 녹을 때까지 끓입니다."},
        {"step":"마지막으로 파르메산 치즈를 뿌린 후, 스파게티를 그릇에 옮겨 담습니다."}
    ],
    "tips":"스파게티 면의 알덴테 상태를 원하시면 포장지에 기재된 시간보다 1-2분 짧게 삶아주세요. 감이에 따라 소금과 후추의 양을 조절하여 마무리하시면 더 맛있게 즐길 수 있습니다. 감자 대신 다른 야채나 버섯을 추가해도 좋습니다."
}
'''

 

 

7. OpenAi 한테 호구당한 이야기

api를 사용하던 중 gpt 파인튜닝이 눈에 보였고,,

 

나는 의심도 없이 바로 실행에 옮겼다. 데이터 파일을 .jsonl 형식으로 맞추고 파인튜닝을 시작했다.

 

결제 한도를 10$로 설정했기 때문에 걱정도 없었다.

뭐 얼마나 나오겠어~

 

안일한 생각을 가졌다..

 

환율도 비싼데 이게 맞냐 gpt야

 

나는 장바구니에 있던 청바지를 잃었다.

 

파인튜닝은 얼마드는지 꼭 계산하고 사용하세요.

 

🥲

반응형