API Key와 같은 민감한 정보는 소스 코드에 직접 노출하지 않고 환경변수로 관리하는 것이 보안상 필수입니다.
import os
os.environ['LANGUAGE']
os.environ['GEMINI_API_KEY'] #여기에 제미나이 키 입력
# 별도의 환경변수 파일을 만들고
# 실행시 환경변수 로딩을 하고 사용하기
# .env 파일 작성
from dotenv import load_dotenv
load_dotenv() # 환경변수 파일(기본 '.env')을 읽어들여 환경변수 등록.
# 성공하면 True 리턴
api_key = os.environ['GEMINI_API_KEY'] #여기에 제미나이 키 입력
라이브러리 설치: pip install google-genai
from google import genai
client = genai.Client()
# 모델 호출
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents="Google Gemini에 대해 설명해줘",
)
print(response.text) # 설명이 다 나옵니다.
답변이 생성되는 대로 즉시 출력하여 사용자 경험을 개선합니다.
from google import genai
client = genai.Client()
# 모델 호출
response = client.models.generate_content_stream( # generate_content_stream 는 iterable 리턴
model="gemini-3-flash-preview",
contents="Google Gemini 에 대해 설명해줘",
)
for chunk in response:
print(chunk.text, end="")
모델의 페르소나나 답변 스타일을 고정할 수 있습니다.
from google import genai
from google.genai import types
client = genai.Client()
# 모델 호출
response = client.models.generate_content(
model="gemini-3-flash-preview",
config= types.GenerateContentConfig(
system_instruction="너는 고양이다. 너의 이름은 '냐코' 다"
),
contents="안녕?",
)
print(response.text) #고양이처럼 말해줍니다.
0.0에 가까울수록 결정론적(일관적)이고, 1.0에 가까울수록 창의적인 답변을 생성합니다.
config = types.GenerateContentConfig(temperature=0.1)
# ... 호출 시 config 적용
from google import genai
from google.genai import types
client = genai.Client()
# 모델 호출
response = client.models.generate_content(
model="gemini-3-flash-preview",
config= types.GenerateContentConfig(
temperature=0.1
),
contents="AI 가 어떻게 동작하는지 알려줘",
)
print(response.text)
텍스트뿐만 아니라 이미지를 함께 입력으로 전달하여 분석할 수 있습니다.
import requests
from PIL import Image
from io import BytesIO
from google import genai
# 이미지 로드
url = "https://cdn.britannica.com/18/129118-050-BF48319E/organ.jpg"
img_data = requests.get(url).content
image = Image.open(BytesIO(img_data))
# 이미지와 텍스트를 함께 전달
client = genai.Client()
response = client.models.generate_content(
model="gemini-3-flash-preview",
contents=[image, "이 악기에 대해 설명해 줘"],
)
print(response.text)