Python - 구글 AI Gemini API 사용하기 (사용법, API 키 발급, 샘플 코드)

반응형

개요

구글의 인공지능인 제미나이를 API를 통해 사용해 보자.

API를 이용하면 제미나이를 웹사이트나 응용 프로그램에서도 사용할 수 있다.

체험용으로 잠깐 사용해 보았지만 개인적으로 사용 만족도가 매우 높았다.

무엇보다도 월간 무료 사용량이 존재해서 무료 사용이 가능하며, 한국어를 지원한다.

* 물론 챗GPT도 한국어 지원은 동일하긴 하나 월간 무료사용량은 없고,

2023년 사용 당시, ChatGPT API는 초기 3달에만 무료 5달러 제공되는 것으로 알고 있는데,

현재는 ChatGPT API를 유료 자동 결제로 사용하기 때문에 무료 정책이 어떻게 바뀌었는지는 자세히는 모르겠다.

 

 

 

 

포스팅에서는 Gemini API를 간단히 콘솔에 출력하여 테스트해 보았다.

제미나이 프로 API를 사용한 예시
<제미나이 프로 API를 사용한 예시>


[ 제미나이 프로젝트 다운로드 ]

포스팅에서 설명하는 코드는 깃허브에서 다운로드할 수 있다.

특이사항으로 공유되어 있는 파일 중, Config.py 파일은 반드시 자신의 API 키를 입력하여야 사용 가능하다.

 

python-example/Google_AI_Gemini_API_Example at main · luvris2/python-example

Contribute to luvris2/python-example development by creating an account on GitHub.

github.com


구글 제미나이  API란?

기본 설명

텍스트와 코드의 방대한 데이터 세트로 학습된 대규모 언어 모델(LLM)이다.

구글의 AI인 제미나이를 API를 이용하여 다양한 프로그래밍 언어로 코드를 작성하여 활용할 수 있다.

제미나이 API는 텍스트 성, 번역, 코드 작성, 질문 답변 등 다양한 작업을 수행할 수 있다.


제미나이 API는 유료일까? 무료일까?

무료로 사용할 수 있다.

하지만 사용량에 제한이 있으며 초과할 경우, 사용량만큼 금액이 책정된다.

사용 제한은 월별 제공되며, 자세한 내용은 아래의 내용에서 확인해 볼 수 있다.

월별 가격 표시 화면
월별 가격 표시 화면

 

 

 

 


제미나이 API 키 발급받기

구글 제미나이 API를 사용하려면 API 키가 있어야 한다.

제미나이 API 사용을 위한 구글 AI 개발자 사이트 접속

구글 AI 개발자 사이트에 접속한다.

 

Build with the Gemini API  |  Google AI for Developers

Integrate the Gemini API, quickly develop prompts, and transform ideas into code to build AI apps.

ai.google.dev

 

Get API Key in Google AI Studio를 눌러 페이이지를 이동한다.

제미나이 홈페이지 화면
제미나이 홈페이지 화면


서비스 약관 동의

구글 제미나이 AI를 API로 사용하려면 서비스 약관에 동의해야 한다.

서비스 약관을 읽어보고 API 서비스 약관과 개인정보 취급 방침을 동의하자.

첫 번째 사항만 체크하면 진행할 수 있고, 나머지 두 개의 사항은 선택이다.

자신이 선호하는 사항을 선택한 후 Contine 버튼을 눌러 다음 단계를 진행한다.

  • [필수] Generative AI API 추가 서비스 약관Google API 서비스 약관에 동의하며 Google 개인정보취급방침을 읽었음을 인정합니다.
  • [선택] Google AI에 대한 모델 업데이트, 제안, 유용한 팁 및 뉴스를 이메일로 받고 싶습니다.
  • [선택] Google AI 개선을 위한 연구에 참여하라는 초대를 받고 싶습니다.

서비스 약관 동의 화면
서비스 약관 동의 화면


제미나이 API 키 새로 생성하기

서비스 약관을 동의한 후, 아래와 같이 뜬다면 Get API key 버튼을 누른다.

서비스 약관 동의 후 화면
서비스 약관 동의 후 화면

 

Create API key 버튼을 누른다.

  • 만약 Get API key 페이지가 뜨지 않을 경우, 좌측의 메뉴에서 첫 번째 아이콘(열쇠모양, 'Get API key')을 누르면 된다.

구글 AI 스튜디오 Get API Key 페이지 화면
구글 AI 스튜디오 Get API Key 페이지 화면

 

Create API key 팝업이 나온다.

우리는 API 키를 발급할 예정이므로 'Create API key in new project' 버튼을 누른다.

  • API키가 없을 경우 새 프로젝트에 API키를 만든다. (포스팅에서 선택한 버튼)
  • 기존 쓰기 권한이 있는 Google Cloud 프로젝트를 선택한다.

API 키 생성 화면
API 키 생성 화면

 

API 키가 생성되었다는 팝업이 나오며, API 키가 출력된다.

API 키가 생성된 화면
API 키가 생성된 화면


API 키 재확인하기

API 키를 보통 따로 저장해 두는 게 좋긴 하지만,

구글 AI 스튜디오 내에서 재확인이 가능하므로 API 키 따로 보관 여부는 사용자 선호도에 맞게 선택하자.

생성된 API 키는 Get API key 페이지에서 출력되는 리스트 내에서 API 키를 누르면 된다.

API 키 재확인 화면
API 키 재확인 화면

 

 

 

 


파이썬에서의 제미나이 API 사용 설정

필요 사항

파이썬이 설치되어 있다는 전제하에 포스팅을 진행한다.

만약 파이썬 SDK가 설치되어 있지 않다면 설치를 한 후 내용을 계속 진행해 주자.

파이썬은 3.9 이상의 버전을 설치하여야 한다.


패키지 설치

제미나이 API를 사용하려면, google-generativeai 패키지를 설치하여야 한다.

pip 명령어를 이용하여 설치를 진행해 주자.

pip install -q -U google-generativeai

 

서식이 지정된 마크다운 텍스트를 표시하기 위해서는 IPython 패키지를 추가로 설치해주어야 한다.

pip install ipython​

기본 구조 코딩 및 API 키 설정

기본 구조는 다음과 같다.

genai.configure 메서드의 api_key 속성에 자신의 API 키를 입력해 주자.

  • 포스팅에서는 Config 클래스 파일을 생성하여 API 키를 따로 입력해 두고 호출하다.

import pathlib
import textwrap

import google.generativeai as genai

from IPython.display import display
from IPython.display import Markdown
from config import Config

# 서식이 지정된 Markdown 텍스트를 표시하는 함수
def to_markdown(text):
  text = text.replace('•', '  *')
  return Markdown(textwrap.indent(text, '> ', predicate=lambda _: True))

# 제미나이 API 키 설정
genai.configure(api_key=Config.GOOGLE_API_KEY)

모델 종류 및 모델 리스트 확인

제미나이 API를 사용할 준비는 끝났다.

이제 자신에게 어떤 모델이 필요한지 확인해 보자.

포스팅에서는 제미나이 모델만을 위주로 설명하였다.

 

[ 모델 종류 ]

  • Gemini 1.0 Pro
    • 기능과 효율성의 균형을 이루는 모델, 텍스트 전용 프롬프트에 최적화됨
    • 모델 최종 업데이트 : 2024년 4월 기준, 2024년 2월까지
    • 입력 토큰 한도 : 30720
    • 출력 토큰 한도 : 2048
    • 제한 : 분당 요청 60개
  • Gemini 1.0 Pro Vision
    • 텍스트 및 이미지 프롬프트에 최적화 
    • 모델 최종 업데이트 : 2024년 4월 기준, 2023년 12월까지
    • 입력 토큰 한도 : 12288
    • 출력 토큰 한도 : 4096
    • 제한 : 분당 요청 60개
  • Gemini 1.5 Pro (미리 보기 전용)
    • 현재 시각 2024년 4월 기준으로 아직 출시되지 않아 사용 불가능함
    • 코드 및 텍스트에 최적화되어 문제 해결과 추천, 데이터 추출 또는 생성 기능을 제공
    • 모델 최종 업데이트 : 2024년 4월 기준, 2024년 2월까지
    • 입력 토큰 한도 : 1048576
    • 출력 토큰 한도 : 8192
    • 제한 : 분당 쿼리 2회, 일일 1000개 쿼리

* 사용 제한 내용은 보장되지 않으며 실제와 다를 수 있다고 구글 측에 공지되어 있으니 상황에 따라 다를 수 있다.

 

 

[ 버전 정보 ]

  • 최신 버전
    • 모델 뒤에 latest 패턴을 사용한다.
    • <model>-<generation>-<variation>-latest 패턴을 사용
    • 예 : gemini-1.0-pro-latest
  • 최신 안정화 버전
    • 모델과 버전 이름을 그대로 사용한다.
    • <model>-<generation>-<variation> 패턴을 사용
    • 예 : gemini-1.0-pro
  • 공개 버전
    • 특정 안정화 버전을 가리킨다. 뒤에 버전 번호를 사용한다.
    • <model>-<generation>-<variation>-<version> 패턴을 사용
    • 예 : gemini-1.0-pro-001

 

[ 사용 가능한 제미나이 모델 리스트 확인 ]

아래의 파이썬 코드를 이용하면 현재 사용 가능한 Gemini 모델 리스트를 확인할 수 있다.

for m in genai.list_models():
  if 'generateContent' in m.supported_generation_methods:
    print(m.name)

2024-04-01 날짜를 기준으로 현재는 아래와 같이 조회된다.

  • models/gemini-1.0-pro
  • models/gemini-1.0-pro-001
  • models/gemini-1.0-pro-latest
  • models/gemini-1.0-pro-vision-latest
  • models/gemini-pro
  • models/gemini-pro-vision

 

 

 

 


Gemini Pro 사용 방법 : 텍스트로 텍스트 생성하기

모델 생성하기

Gemini Pro 모델을 사용하려면 GenerativeModel 메서드를 이용하여 호출한다.

# 모델 설정
model = genai.GenerativeModel('gemini-pro') # 텍스트 전용 모델

텍스트 생성하기

간단한 텍스트 생성하기

generate_content 메서드를 이용하여 텍스트 생성한다.

신기하게도 제미나이 모델은 한글로 질문을 하면 답변이 한글로 온다.

잠깐 써본 경험으로 각 AI 모델에 대해 함부로 평가할 수는 없지만,

개인적으로는 여태 써봤던 인공지능 API 중 가장 만족도가 높다.

# 텍스트 생성
response = model.generate_content("파이썬에 대해 알려줄래?")

# 답변 내용 보기
print(response)

>>> '**파이썬**\n\n파이썬은 다음과 같은 특징을 갖춘 고수준 프로그래밍 언어입니다.\n\n*
>>> **해석적:** 파이썬 코드는 실행 전에 컴파일되지 않고 실행 중에 해석됩니다.\n*
>>> **동적  타이핑:** 변수에 따로 타입을 선언할 필요가 없으며, 파이썬이 실행 중에 타입을 자동으로 추론합니다.\n*
>>> **객체 지향:** 모든 것이 객체이고, 데이터와 메서드를 캡슐화합니다.\n*
>>> **다목적:** 웹 개발, 데이터 과학, 머신 러닝, 스크립팅 등 다양한 애플리케이션에 사용 됩니다.\n*
>>> **초보자 친화적:** 파이썬은 읽기와 쓰기가 쉽고 배우기 쉽습니다.\n\n
>>> **핵심 원리**\n\n파이썬은 다음과 같은 핵심 원리에 기반합니다.\n\n*
>>> **가독성:** 코드가 직관적으로 이해되고 유지 관리가 용이해야 합니다.\n*
>>> **일관성:** 규칙과 관례가 일관되어야 합니다.\n*
>>> **오류 감소:** 오류를 방지하거나 감지하는 메커니즘을 제공해야 합니다.\n*
>>> ** 인터페이스의 단순성:** 모듈과 객체는 사용하기 쉽고 일관되어야 합니다.\n\n
>>> **특징**\n\n파이썬의 주요 특징은 다음과 같습니다.\n\n*
>>> **독특한 구문:** 들여쓰기를 사용하여 블록 을 구분합니다.\n*
>>> **풍부한 라이브러리:** 표준 라이브러리와 외부 라이브러리 모두 엄청 나게 많습니다.\n*
>>> **인터프리터 및 IDE:** 파이썬 인터프리터와 통합 개발 환경(IDE)이 제공됩니다.\n*
>>> **플랫폼 독립성:** 다양한 플랫폼에서 실행될 수 있습니다.\n*
>>> **지역사회  지원:** 활성적이고 지지적인 커뮤니티가 있습니다.\n\n
>>> **애플리케이션**\n\n파이썬은 다양한 애플리케이션에 사용됩니다.\n\n*
>>> **웹 개발:** Django, Flask와 같은 프레임워크를 사 용하여 웹 애플리케이션을 구축합니다.\n*
>>> **데이터 과학:** NumPy, Pandas와 같은 라이브 러리를 사용하여 데이터 분석 및 시각화를 수행합니다.\n*
>>> **머신 러닝:** Scikit-learn, TensorFlow와 같은 라이브러리를 사용하여 머신 러닝 모델을 훈련하고 예측합니다.\n*
>>> **스 크립팅:** 자동화 작업, 시스템 관리, 테스트를 수행합니다.\n*
>>> **교육:** 컴퓨터 과학과  프로그래밍의 도입으로 사용됩니다.

마크다운 텍스트 생성하기

마크다운 텍스트를 사용하려면 to_markdown 메서드에 파라미터를 입력한다.

# 마크다운 사용
to_markdown(response.text)

실시간 응답형 텍스트 생성하기

기본적으로 모델은 요청 프로세스를 완료한 후 응답을 반환한다.

그러나 응답을 실시간으로 처리하여 모델의 응답이 생성되는 즉시 값을 반환할 수도 있다.

응답을 스트리밍 하려면 기존 텍스트 생성 메서드인 generate_content의 속성에 stream=True를 설정해 주면 된다.

속도는 환경에 따라 다르지만, 테스트를 진행한 환경에서는 대략 20초 정도가 소요되었다.

그래도 기존의 CahtGPT 페이지에서 질문하던 것처럼 응답 내용이 조금씩 볼 수 있도록 생성되니 비교적 지루함을 덜 느끼는 것 같다.

제미나이 응답 스트리밍 옵션을 사용한 콘솔 응답 화면
<제미나이 응답 스트리밍 옵션을 사용한 콘솔 응답 화면>


채팅 대화 나누기

대화 내역 초기화

간단한 텍스트를 생성하는 것이 아닌 여러 차례에 걸쳐 자유로운 대화를 나눌 수 있다.

ChatGPT API를 C#으로 사용할 때에는 대화 내역을 목록으로 저장하여 대화를 유지하였는데,

제미나이는 ChatSession 클래스에서 대화 상태를 관리하여 프로세스를 단순화하므로,

사용자가 직접 대화 내역을 목록으로 저장할 필요가 없다. 이 부분이 개발자 입장에서 너무 좋다...

# 채팅 초기화
model = genai.GenerativeModel('gemini-pro')
chat = model.start_chat(history=[])
chat

대화 나누기

제미나이와 대화를 나누려면 generate_content 메서드가 아닌 send_message 메서드를 사용한다.

간단히 대화가 유지되는지 확인하기 위하여 파이썬 기본 입력 내장 모듈의 input 메서드를 사용하여 대화를 구성하였다.

# 첫 번째 질문 내용 작성
q1 = input("첫 번째 질문 내용을 입력해주세요. : ")

>>> 첫 번째 질문 내용을 입력해주세요. : 초등학교 1학년이 배우는 수학은 어떤 내용?

# 첫 번째 질문 내용에 대한 답변 응답
response = chat.send_message(q1)
print("첫 번째 답변 : " + response.text)

>>> 첫 번째 답변 : 초등학교 1학년 수학 교육 과정에서 배울 수 있는 주요 내용은 다음과 같습니다.
>>> 내용 생략

# 두 번째 질문 내용 작성
q2 = input("두 번째 질문 내용을 입력해주세요. : ")

>>> 두 번째 질문 내용을 입력해주세요. : 방금 내가 질문한 내용은?

# 두 번째 질문 내용에 대한 답변 응답
response = chat.send_message(q2)
print("두 번째 답변 : " + response.text)

>>> 두 번째 답변 : 방금 질문하신 내용은 **초등학교 1학년 수학 교육 과정**에 대해서였습니다.
>>> 구체적으로는 1학년 학생들이 배울 수 있는 주요 내용을 묻고 계셨습니다.
>>> 내용 생략

채팅 내역 확인하기 (히스토리 확인)

제미나이와 나눈 대화를 확인하려면 history 키워드를 사용하면 된다.

# 첫 번째 질문 내용 작성
q1 = input("첫 번째 질문 내용을 입력해주세요. : ")

>>> 첫 번째 질문 내용을 입력해주세요. : 초등학교 1학년은 몇 살?

# 첫 번째 질문 내용에 대한 답변 응답
response = chat.send_message(q1)

# 채팅 내역 확인
print(chat.history)

>>> [parts {
>>>   text: "초등학교 1학년은 몇 살?"
>>> }
>>> role: "user"
>>> , parts {
>>>   text: "6~7세"
>>> }
>>> role: "model"
>>> ]

 

 

 

 


Gemini Pro Vision 사용 방법 : 이미지와 텍스트로 텍스트 생성하기

모델 생성하기

# 모델 설정
model = genai.GenerativeModel('gemini-pro-vision') # 이미지/텍스트 혼합 모델

샘플 이미지 다운로드하기

우선 이미지를 사용하기 위해 예제 이미지를 다운로드하자.

아래의 이미지는 구글 AI 개발자 문서에서 제공되는 예제 이미지 다운로드 링크이다.

터미널에서 입력해 주어 다운로드를 진행해 준다.

curl -o image.jpg https://t0.gstatic.com/licensed-image?q=tbn:ANd9GcQ_Kevbk21QBRy-PgB4kQpS79brbmmEG7m3VOTShAn4PecDU5H5UxrJxE3Dw1JiaG17V88QIol19-3TM2wCHw

 

다음과 같은 이미지가 프로젝트 내 다운로드되었다.

프로젝트 내 샘플 이미지 다운로드 화면
<프로젝트 내 샘플 이미지 다운로드 화면>


이미지로 텍스트 생성하기

generate_content 메서드를 사용한다.

파라미터에 텍스트가 아닌 이미지 파일이 저장된 변수를 지정해 주면 된다.

  • 베이스 언어가 영어이기 때문에 답변도 영어로 응답했다.

# 이미지 관련 패키지 및 이미지 파일 호출
import PIL.Image
img = PIL.Image.open('image.jpg') # 다운로드한 이미지 파일

# 이미지로 텍스트 생성
response = model.generate_content(img)
print(response.text)

>>> These are meal prep containers with chicken, brown rice, broccoli, and peppers.

텍스트와 이미지로 텍스트 생성하기

이번엔 텍스트와 함께 이미지를 혼합하여 텍스트를 생성해 보자.

generate_content 메서드에 리스트 형식으로 파라미터를 입력해 준다. [텍스트, 이미지]

# 이미지와 텍스트로 텍스트 생성
response = model.generate_content(["이 그림이 어떤 그림인지 한국말로 답해줘.", img])
print(response.text)

>>> 이 그림은 도시락입니다.
>>> 도시락은 한국의 전통적인 도시락으로, 보통 밥, 김, 야채, 고기 등을 넣어 만듭니다.
>>> 도시락은 한국인의 식생활 문화를 잘 보여주는 음식입니다.

마크다운, 실시간 응답형 텍스트 생성하기

해당 내용은 위에서 설명한 제미나이 프로 모델과 메서드와 사용방법이 동일하므로 생략한다.

자세한 내용을 Gemini Pro 파트를 확인하면 된다.


채팅 대화 나누기

안타깝게도 제미나이 프로 비전 모델은 다중 턴 채팅에 최적화되어 있지 않다.

 


참고

 

반응형