1 Gemini
- 제미나이(Gemini) API 모델은 일정량을 무료로 사용할 수 있다
- 무료 사용 한도(free usage limit): 대부분의 구글 클라우드 및 AI 서비스들이 그렇듯이, 제미나이 API도 무료 사용 계층(Free Tier)을 제공한다
- Gemini 2.5 Pro (최대 100만 토큰 문맥 지원 모델):
- 분당 요청 수(RPM): 5회
- 일일 요청 수(RPD): 500회
- 분당 토큰 수: 200,000 토큰
- 일일 토큰 수: 4,000,000 토큰
- Gemini 2.5 Flash (경량 및 빠른 응답 속도 모델):
- 분당 요청 수(RPM): 2,000회
- 일일 요청 수(RPD): 4,000,000회
- 분당 토큰 수: 4,000,000 토큰
- 일일 토큰 수: 10,000,000 토큰
- Gemini Embedding (텍스트 임베딩 모델):
- 분당 요청 수(RPM): 3,000회
- Gemini 2.5 Pro (최대 100만 토큰 문맥 지원 모델):
- Google AI의
gemini와gemini-vision모델뿐만 아니라 다른 생성 모델에 접근하려면 langchain-google-genai 통합 패키지의ChatGoogleGenerativeAI클래스를 사용한다 - 2024년까진 할루시네이션 현상이 자주 발생했지만 최근 제미나이 모델들은 많이 줄어들었다.Ranking
1.1 API KEY 발급받기
- 링크 에서 API KEY를 발급한다
- 사용자의 Google API 키를 환경 변수
GOOGLE_API_KEY로 설정한다
True
# LangSmith 추적을 설정. https://smith.langchain.com
# !pip install langchain-teddynote
from langchain_teddynote import logging
from langchain_teddynote.messages import stream_response
# 프로젝트 이름을 입력합니다.
logging.langsmith("CH04-Models")LangSmith 추적을 시작합니다.
[프로젝트명]
CH04-Models
langchain_google_genai 패키지에서 ChatGoogleGenerativeAI 클래스를 가져온다.
- ChatGoogleGenerativeAI 클래스는 Google의 Generative AI 모델을 사용하여 대화형 AI 시스템을 구현하는 데 사용.
- 이 클래스를 통해 사용자는 Google의 대화형 AI 모델과 상호 작용할 수 있다.
- 모델과의 대화는 채팅 형식으로 이루어지며, 사용자의 입력에 따라 모델이 적절한 응답을 생성.
- ChatGoogleGenerativeAI 클래스는 LangChain 프레임워크와 통합되어 있어, 다른 LangChain 컴포넌트와 함께 사용할 수 있다.
지원되는 모델 정보: https://ai.google.dev/gemini-api/docs/models/gemini?hl=ko
from langchain_google_genai import ChatGoogleGenerativeAI
# ChatGoogleGenerativeAI 언어 모델을 초기화합니다.
llm = ChatGoogleGenerativeAI(model="gemini-1.5-pro-latest")
# 프롬프트를 전달하여 결과를 생성합니다.
answer = llm.stream("자연어처리에 대해서 간략히 설명해 줘")
# 결과를 출력합니다.
stream_response(answer)## 자연어 처리 (Natural Language Processing, NLP) 란?
**인간의 언어를 컴퓨터가 이해하고 처리할 수 있도록 하는 인공지능의 한 분야입니다.**
쉽게 말해, 우리가 일상생활에서 사용하는 한국어, 영어와 같은 자연어를 컴퓨터가 알아듣고, 분석하고, 심지어는 새로운 문장을 생성할 수 있도록 하는 기술이죠.
**예를 들어,**
* **우리가 스마트폰에 "오늘 서울 날씨 어때?" 라고 물어보면,** NLP 기술은 이 질문을 이해하고 날씨 정보를 찾아 "서울은 오늘 맑고 최고 기온은 25도입니다." 라고 대답합니다.
* **유튜브에서 자막을 자동으로 생성하거나,**
* **쇼핑몰에서 챗봇과 대화하며 상품 정보를 얻는 것도** 모두 NLP 기술 덕분입니다.
**NLP는 다음과 같은 다양한 분야에서 활용됩니다.**
* **기계 번역:** 구글 번역, 파파고와 같은 번역 서비스
* **음성 인 recognition:** 인공지능 비서 (Siri, Bixby, Google Assistant), 받아쓰기
* **텍스트 요약:** 긴 글을 짧게 요약
* **감정 분석:** 글이나 문장에 담긴 감정 (긍정, 부정, 중립 등) 분석
* **챗봇:** 고객 상담, 정보 제공 등을 위한 자동화된 대화 시스템
* **정보 검색:** 사용자의 검색어 의도를 파악하여 정확한 정보 검색
* **가짜 뉴스 탐지:** 가짜 뉴스를 판별하고 차단
**NLP는 아직 완벽하지 않지만,** 인공지능 기술의 발전과 함께 빠르게 발전하고 있습니다. 앞으로 더욱 다양한 분야에서 우리의 삶을 편리하게 만들어 줄 것으로 기대됩니다.
from langchain_core.prompts import PromptTemplate
# ChatGoogleGenerativeAI 언어 모델을 초기화합니다.
model = ChatGoogleGenerativeAI(
model="gemini-1.5-flash-latest", # 사용할 모델을 지정합니다.
)
# 프롬프트를 생성합니다.
prompt = PromptTemplate.from_template(
"예/아니오 질문에 대답하세요. {question}는 과일입니까?"
)
# 체인을 생성합니다.
chain = prompt | model
# 결과를 출력합니다.
stream_response(chain.stream({"question": "사과"}))네.
2 Safety Settings
Gemini 모델에는 기본 안전 설정(Satety Settings) 이 있어 유해한 컨텐츠로부터 사용자를 보호하는 기능이다. 하지만, 이 기능이 불편하게 느껴진다면 이를 재정의할 수 있다.
만약 모델로부터 많은 “Safety Warnings”를 받고 있다면, 모델의 safety_settings 속성을 조정해 볼 수 있다.
Google의 Safety Setting Types 문서에서는 사용 가능한 카테고리와 임계값에 대한 열거형 정보를 제공한다.
이 문서에는 콘텐츠 필터링 및 안전 설정과 관련된 다양한 카테고리와 해당 임계값이 정의되어 있어, 개발자들이 생성형 AI 모델을 활용할 때 적절한 안전 설정을 선택하고 적용하는 데 도움을 준다.
이를 통해 개발자들은 모델이 생성하는 콘텐츠의 안전성과 적절성을 보장하고, 사용자에게 유해하거나 부적절한 내용이 노출되는 것을 방지할 수 있다.
from langchain_google_genai import (
ChatGoogleGenerativeAI,
HarmBlockThreshold,
HarmCategory,
)
llm = ChatGoogleGenerativeAI(
# 사용할 모델을 "gemini-pro"로 지정합니다.
model="gemini-1.5-pro-latest",
safety_settings={
# 위험한 콘텐츠에 대한 차단 임계값을 설정합니다.
# 이 경우 위험한 콘텐츠를 차단하지 않도록 설정되어 있습니다. (그럼에도 기본적인 차단이 있을 수 있습니다.)
HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_NONE,
HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_NONE,
HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE,
},
)
# .BLOCK_NONE: 이 메서드를 추가하지 않으면 기본적으로 safety 모드가 발동됨. block mode를 사용하면 safety 모드가 꺼지는 것이 아니라 느슨해지는 효과가 있다.3 Batch 단위 실행
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(
# 사용할 모델을 "gemini-pro"로 지정합니다.
model="gemini-1.5-pro-latest",
)
results = llm.batch(
[
"대한민국의 수도는?",
"대한민국의 주요 관광지 5곳을 나열하세요",
]
)
for res in results:
# 각 결과의 내용을 출력합니다. 즉, 2가지 답변이 한번에 나온다.
print(res.content)대한민국의 수도는 **서울**입니다.
## 대한민국의 주요 관광지 5곳 (다양한 분야에서 선정)
**1. 역사와 전통:** **경주 역사유적지구 (불국사, 석굴암 포함)**
* 신라 천년의 역사를 간직한 곳으로 유네스코 세계문화유산으로 지정.
* 불국사, 석굴암, 첨성대, 불국사 등 다양한 유적지가 모여있어 역사 탐방에 좋음.
**2. 자연과 휴식:** **제주도**
* 대한민국 최남단에 위치한 화산섬으로 아름다운 자연경관을 자랑.
* 한라산, 성산일출봉, 만장굴 등 유네스코 세계자연유산으로 지정된 곳이 많음.
* 해수욕, 등산, 올레길 트레킹 등 다양한 활동을 즐길 수 있음.
**3. 도시와 문화:** **서울특별시 (경복궁, 북촌 한옥마을 포함)**
* 대한민국의 수도이자 정치, 경제, 문화의 중심지.
* 경복궁, 창덕궁, 덕수궁 등 조선시대 궁궐과 북촌 한옥마을 등 전통과 현대가 공존하는 매력적인 도시.
* 쇼핑, K-POP, 예술 등 다양한 문화 체험 가능.
**4. 쇼핑과 테마파크:** **부산광역시 (해운대, 감천문화마을 포함)**
* 대한민국 제2의 도시이자 국제적인 해양 도시.
* 해운대 해수욕장, 광안리 해수욕장 등 아름다운 해변과 다양한 먹거리, 즐길 거리가 풍부.
* 영화의 도시로 부산국제영화제 등 다양한 축제가 개최.
**5. 평화와 역사의 공간:** **DMZ (비무장지대) 및 판문점**
* 한국전쟁의 아픔과 분단의 현실을 느낄 수 있는 곳.
* 최근 남북 화해 분위기 속에서 평화 관광지로 떠오르고 있음.
* 제3땅굴, 도라전망대, 판문점 등을 견학하며 분단의 역사를 되짚어 볼 수 있음.
**참고:** 이 외에도 설악산 국립공원, 순천만 습지, 전주 한옥마을 등 한국에는 매력적인 관광지가 많습니다. 여행 취향과 목적에 맞는 곳을 선택하여 여행 계획을 세우시기 바랍니다.
4 Multimodal 모델
langchain-teddynote 에서 구현한 멀티모달 모델에 gemini-1.5-pro 모델을 활용하여 이미지를 텍스트로 변환할 수 있다.
from langchain_teddynote.models import MultiModal
from langchain_teddynote.messages import stream_response
# 객체 생성
gemini = ChatGoogleGenerativeAI(model="gemini-1.5-pro-latest")
system_prompt = (
"당신은 시인입니다. 당신의 임무는 주어진 이미지를 가지고 시를 작성하는 것입니다."
)
user_prompt = "다음의 이미지에 대한 시를 작성해주세요."
# 멀티모달 객체 생성
multimodal_gemini = MultiModal(
llm, system_prompt=system_prompt, user_prompt=user_prompt
)# 샘플 이미지 경로(파일의 경로, URL 등)를 지정합니다.
IMAGE_URL = "images/jeju-beach.jpg"
# 이미지 파일로 부터 질의
answer = multimodal_gemini.stream(IMAGE_URL)
# 스트리밍 방식으로 각 토큰을 출력합니다. (실시간 출력)
stream_response(answer)하늘빛 거울에 비친 섬 하나
고요한 평화 속에 잠든 듯
푸른 장막 드리운 채 누워있네
하얀 레이스 수놓은 듯
잔물결 아른아른 너울대고
투명한 비단결 바다는
눈부신 에메랄드 빛으로 빛난다
검은 바위는 묵묵히
영원할 것만 같은 풍경에
경외감 가득 담아 바라본다
시간은 숨을 죽이고
바람은 속삭이듯 노래하며
세상의 모든 소음 사라진 곳
오직 자연의 숨결만이
가슴 깊이 스며드는 곳
낙원의 조각이 여기 있다.