OpenAI API를 사용하여 개발에 chat-GPT 등의 AI를 적용할 수 있다.
OpenAI API는 무료가 아니다. 사용한 만큼의 금액이 청구된다.
평소 개발에 특별한 돈을 사용하지 않는 사람으로써 카드 정보를 기입하는데 고민을 했다.
금액 상한선을 줄 수 있기 때문에 일단 결제...
카드 등록을 할 때 확인용인지 크레딧을 결제해야 한다. 최소 5달러인데 세금도 부과된다..
이렇게 카드 등록을 하면 금액 상한선을 꼭 자신의 기준에 맞게 정하도록 하자(중요)
카드 등록을 하면 API Key를 발급받을 수 있고 발급받을 때 나오는 SECRET_KEY는 다시 확인이 불가능 하기 때문에 다른 사람에게 공유되지 않는 자신만 볼 수 있는 곳에 따로 저장한다.
SECRET_KEY를 개발 작업 환경의 .env
파일에 OPENAI_API_KEY="(본인의 SECRET_KEY)"
를 작성한다.
Jupyter를 사용해 정상 동작하는지 확인한다.
성공!!
Jupyter의 바로가기 키에는 셀 모두 실행 바로 가기 키가 설정되어 있지 않아서 이를 설정하려 한다. (GUI로 모두 실행 버튼이 있지만... 마우스 사용하기 싫어.....)
파일-기본 설정-바로 가기 키 또는 단축키(ctrl+k ctrl+s)로 바로 가기 키 설정에서 "run all"을 검색
바로 가기 키를 설정하고 사용해봤지만 잘 동작하지 않았다.
이에 대한 대체로 위의 셀을 수정하고 아래 셀에서 수정한 셀의 기능을 사용하려면 수정한 셀이 실행이 되어야 한다. 따라서 현재 행을 실행하는 바로 가기 키는 이미 설정이 되어 있기 때문에 현재 행 위까지 셀을 실행시키는 바로 가기 키를 설정하기로 했다.
나는 ctrl + '
을 사용하기로 설정함, 잘 동작한다.
전체 셀을 실행하면 셀의 결과가 모두 보이는데 이 결과를 모두 지우는 바로 가기 키를 설정
현재 행의 출력을 지우는 바로 가기 키가 Alt + Delete
여서 모두 지우는 건 Ctrl + Shift + Delete
로 설정
LLM(대형 언어 모델)을 사용하여 애플리케이션 생성을 단순화하도록 설계된 프레임워크
문서 분석 및 요약, 챗봇, 코드 분석을 포함한 일반적인 언어 모델의 사용 사례에도 사용 가능
※ LLM(Large Language Model): 대량의 데이터로 사전 훈련된 대규모 딥 러닝 모델
cell 1
from langchain.chat_models import ChatOpenAI
from langchain.prompts import ChatPromptTemplate
from langchain.callbacks import StreamingStdOutCallbackHandler
# temperature: 값이 높을수록 AI의 창의성이 올라간다.
# streaming: 결과만이 아닌 ai가 생각하는 과정도 보고 싶을 때 사용
# StreamingStdOutCallbackHandler: streaming을 통한 과정을 console에 출력
chat = ChatOpenAI(
temperature=0.1, streaming=True, callbacks=[StreamingStdOutCallbackHandler()]
)
# ai에게 보내는 prompt
# system: ai의 설정, 특정 언어로 답하거나 ai에 어떠한 역할을 부여할 수 있다.
# human: 사람이 ai에게 보내는 질문
# 물어보는 요리 종류 중 찾기 쉬운 재료로 만들 수 있는 레시피를 알려달라는 내용
chef_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a world-class international chef. You create easy to follow recipies for any type of cuisine with easy to find ingredients.",
),
("human", "I want to cook {cuisine} food."),
]
)
# chain으로 prompt를 ai에 물어보는 과정을 한 줄에 작성
# linux의 파이프라고 이해하면 될 듯
chef_chain = chef_prompt | chat
cell 2
# cell 1의 prompt와 동일
# 채식주의자를 위해 레시피 중 대체할 수 있는 재료로 수정, 모르면 모른다고 말하라는 내용
# 모르면 모른다고 말하라는 것을 말하지 않으면 이상한 답을 할 수 있기 때문에
# 모른다는 답을 하게 하는 것은 중요
veg_chef_prompt = ChatPromptTemplate.from_messages(
[
(
"system",
"You are a vegetarian chef specialized on making traditional recipies vegetarian. You find alternative ingredients and explain their preparation. You don't radically modify the recipe. If ther is no alternative for a food just say you don't know how to replace it.",
),
("human", "{recipe}"),
]
)
veg_chain = veg_chef_prompt | chat
# chain을 이어 붙이는 것
# chef_chain, veg_chain 모두 입력값이 필요
# chef_chain은 invoke로 입력값을 줄 수 있지만 veg_chain은 chef_chain의 결과값이 입력값이기 때문에
# 입력 서식에 맞게 dict 형식으로 작성
fianl_chain = {"recipe": chef_chain} | veg_chain
# 인도 요리 추천해줘
fianl_chain.invoke({"cuisine": "indian"})
질문에 어떻게 처리하고 있는지 과정을 출력(streaming, StreamingStdOutCallbackHandler)
해석하면
채식주의자 버전의 치킨 티카 마살라의 경우, 우리는 두부나 파네르와 같은 식물성 대체물로 치킨을 대체할 수 있습니다. 이러한 대체물을 준비하는 방법은 다음과 같습니다.
이 조리법을 위해 단단한 또는 매우 단단한 두부를 사용하세요.
두부의 물기를 빼고 눌러 과도한 물을 제거합니다. 여러분은 깨끗한 키친타월이나 종이 타월로 두부 블록을 감싸고 무거운 물체를 위에 15-30분 정도 놓으면 됩니다.
두부를 한입 크기의 큐브로 자르고 치킨과 같은 양념 과정을 따라주세요. 두부는 맛을 잘 흡수하기 때문에 고기와 함께 하는 것보다 양념 시간이 짧을 수 있습니다.
굽는 대신, 양념한 두부를 기름에 사방이 황금빛 갈색이 될 때까지 약간의 팬에 볶을 수 있습니다.
파네르는 인도 치즈의 한 종류로 요리되었을 때 모양이 잘 유지됩니다.
파네르를 큐브로 자르고 황금빛 껍질이 생길 때까지 살짝 팬에 볶는다. 이 단계는 파네르가 소스에 추가될 때 모양을 유지하도록 도와줍니다.
소스에 추가하기 전에 요구르트와 향신료 혼합물에 있는 파네르 큐브를 재울 수도 있습니다.
나머지 조리법을 지시에 따라 치킨을 선택한 대체물로 대체합니다. 두부나 파네르는 방향성 향신료와 크리미한 토마토 소스의 맛을 흡수하여 맛있는 채식주의자 버전의 치킨 티카 마살라를 제공합니다. 채식주의자 인도 축제를 즐기세요!
이런 내용의 결과가 출력된다.