먼저 gcp에서 프로젝트 생성하기
나는 google5day로 프로젝트를 새로 만들었다
API 키 만들기 눌러서 생성한 프로젝트 선택하고 키 생성
키 복사 해두기
케글 노트북에서 api 키 등록 진행
API는 무료로 사용 가능하다!
이름은 GOOGLE_API_KEY로 하고 키 값은 복사해둔 값 넣어서 저장
UserSeretsClient()를 통해서 키 가져오기
from kaggle_secrets import UserSecretsClient GOOGLE_API_KEY = UserSecretsClient().get_secret("GOOGLE_API_KEY") genai.configure(api_key=GOOGLE_API_KEY)
GenerativeModel() 함수 사용해서 불러오기 ()안에 원하는 모델 작성
이번에는 gemini-1.5-flash 사용
flash = genai.GenerativeModel('gemini-1.5-flash')
모델.generate_content로 모델 사용() 안에는 입력을 넣어서 진행
response.text를 통해 응답 결과만 출력
response = flash.generate_content("Explain AI to me like I'm a kid.") print(response.text)
아래 코드로 마크 다운으로 출력 작성
Markdown(response.text)
flash.start_chat() 함수를 사용해서도 모델 사용 가능
start_chat으로 모델을 만들어 두고
send_message()를 generate_content 처럼 사용
start_chat 안에 있는 history는 대화 내용을 저장되어 이전 대화를 기억 가능함
chat = flash.start_chat(history=[]) response = chat.send_message('Hello! My name is Zlork.') print(response.text)
이후에 아래 코드를 실행하면 이름을 기억한 대답이 나옴
response = chat.send_message('Do you remember what my name is?') print(response.text)
Of course! Your name is Zlork. 😊 I'm always happy to remember the names of the people I talk to. 😄 Anything else you'd like to know?
list_models() 사용해서 가능함
for model in genai.list_models(): print(model.name)
사용가능한 목록은 아래처럼 있음
models/chat-bison-001 models/text-bison-001 models/embedding-gecko-001 models/gemini-1.0-pro-latest models/gemini-1.0-pro models/gemini-pro models/gemini-1.0-pro-001 models/gemini-1.0-pro-vision-latest models/gemini-pro-vision models/gemini-1.5-pro-latest models/gemini-1.5-pro-001 models/gemini-1.5-pro-002 models/gemini-1.5-pro models/gemini-1.5-pro-exp-0801 models/gemini-1.5-pro-exp-0827 models/gemini-1.5-flash-latest models/gemini-1.5-flash-001 models/gemini-1.5-flash-001-tuning models/gemini-1.5-flash models/gemini-1.5-flash-exp-0827 models/gemini-1.5-flash-002 models/gemini-1.5-flash-8b models/gemini-1.5-flash-8b-001 models/gemini-1.5-flash-8b-latest models/gemini-1.5-flash-8b-exp-0827 models/gemini-1.5-flash-8b-exp-0924 models/embedding-001 models/text-embedding-004 models/aqa
모델에 관한 설명을 볼 수 있음
for model in genai.list_models(): if model.name == 'models/gemini-1.5-flash': print(model) break
GenerativeModel() 함수에 GenerationFonfig를 통해 max_output_tokens와 같이 상세 설정 가능
short_model = genai.GenerativeModel( 'gemini-1.5-flash', generation_config=genai.GenerationConfig(max_output_tokens=200)) response = short_model.generate_content('Write a 1000 word essay on the importance of olives in modern society.') print(response.text)
temperature 설정 가능(무작위성으로 chatgpt와 동일)
high_temp_model = genai.GenerativeModel( 'gemini-1.5-flash', generation_config=genai.GenerationConfig(temperature=2.0))
temperature는 chatgpt에도 있는 기능이지만 top_k와 top_p는 gemini에만 있다
아래 설명은 자세히 쓰는 Gemini API 참고 [링크]
top_p는 확률분포 내에서 선택할 단어의 범위를 결정하는 매개변수
확률 역순으로 단어를 정렬하고, 그 순서대로 단어를 선택해 가다가 누적 확률이 top_p에 도달하는 순간 멈춤
예를 들어 temperature=0.25, top_p=0.6으로 설정했다면 다음 그래프처럼 “오른다”와 “간다”를 누적하는 순간 0.6에 도달합니다. 따라서 “왔다” 이후의 단어들은 선택에서 제외
top_k도 확률분포 내에서 선택할 단어의 범위를 결정하는 매개변수
확률 역순으로 단어를 정렬하고, 그 순서대로 단어를 선택해 가다가 누적 건수가 top_k에 도달하는 순간 멈춤
가령 다음과 같이 temperature=0.25, top_k=2로 설정했다면 “오른다”와 “간다” 두 개의 단어만 선택되며, 그 이후의 동작은 top_p와 동일
model = genai.GenerativeModel( 'gemini-1.5-flash-001', generation_config=genai.GenerationConfig( # These are the default values for gemini-1.5-flash-001. temperature=1.0, top_k=64, top_p=0.95, ))
GenerationConfig 안에서 설정 가능
두 개가 같이 나온다면 K를 먼저 필터링 후 P 필터링
Zero-shot은 질문을 할 때 예제 없이 질문을 하는 방법 model = genai.GenerativeModel( 'gemini-1.5-flash-001', generation_config=genai.GenerationConfig( temperature=0.1, top_p=1, max_output_tokens=5, )) zero_shot_prompt = """Classify movie reviews as POSITIVE, NEUTRAL or NEGATIVE. Review: "Her" is a disturbing study revealing the direction humanity is headed if AI is allowed to keep evolving, unchecked. I wish there were more movies like this masterpiece. Sentiment: """ response = model.generate_content(zero_shot_prompt) print(response.text)
이렇게 바로 사용
One-shot은 하나의 예제를 주는 것
코드 생략
Few-shot은 여러 개의 예제를 주는 것
코드 생략
출력 결과를 JSON으로 출력하고 싶을 때 GenerationConfig에서 설정 가능
response_mimi_type = "application/json" 와 response_schema=PPizzaOrder 이 코드가 해당
PozzaOrder은 미리 지정해둔 것
model = genai.GenerativeModel( 'gemini-1.5-flash-latest', generation_config=genai.GenerationConfig( temperature=0.1, response_mime_type="application/json", response_schema=PizzaOrder, ))
몇 단계에 걸쳐 추론을 할 수 있도록 설계
prompt = """When I was 4 years old, my partner was 3 times my age. Now, I am 20 years old. How old is my partner? Let's think step by step.""" response = model.generate_content(prompt) print(response.text)
아래처럼 나옴
Here's how to solve this:
When you were 4: Your partner was 3 times your age, which is 4 * 3 = 12 years old.
Age difference: Your partner is 12 - 4 = 8 years older than you.
Current age: Since you are now 20, your partner is 20 + 8 = 28 years old.
ReAct(Reason+Act) 프레임워크는 추론(Reasoning)과 행동(Action)을 연결하여 문제를 해결하는 방식
모델이 문제에 대해 추론한 후, 그에 따른 행동을 생성하고, 다시 그 행동의 결과를 바탕으로 추론하는 과정을 반복
카카오 지식 사전 참고 [링크]
Gemini를 통해 코드를 작성할 수 도 있음
해당 내용 생략
1일차 내용 정리 끝 !