먼저 Google Generative AI 패키지를 설치하고 API 연결을 테스트합니다.
!pip install -q -U google-genai
from google import genai
# API 키 설정
client = genai.Client(api_key='YOUR_API_KEY_HERE')
try:
# Gemini 2.5 Flash 모델로 테스트
response = client.models.generate_content(
model="gemini-2.5-flash",
contents="API가 잘연결되었는지 테스트 중이야."
)
print("✅ 성공:", response.text)
except Exception as e:
print(f"❌ 여전히 에러 발생: {e}")
포인트: model 파라미터에는 'models/' 접두사 없이 모델명만 입력합니다.
LangChain을 통해 Gemini 모델을 더 편리하게 사용할 수 있습니다.
!pip install -U langchain
!pip install -U langchain-google-genai
from langchain.chat_models import init_chat_model
import os
# 환경 변수로 API 키 설정
os.environ["GOOGLE_API_KEY"] = "YOUR_API_KEY_HERE"
# 모델 초기화
model = init_chat_model(
"gemini-2.5-flash",
model_provider="google_genai"
)
# 간단한 질문
response = model.invoke("안녕하세요. 당신은 누구입니까?")
print(response.content)
포인트: init_chat_model을 사용하면 다양한 LLM 제공자를 통일된 인터페이스로 사용할 수 있습니다.
응답을 실시간으로 받아볼 수 있는 스트리밍 기능입니다.
for chunk in model.stream("AI Agent란 무엇인지 100자 이내 간단하게 설명해 주세요"):
print(chunk.content, end="")
포인트: stream() 메서드를 사용하면 응답이 생성되는 대로 실시간으로 출력됩니다.
여러 개의 질문을 한 번에 처리할 수 있습니다.
inputs = [
"과적합이란 무엇인지 100자 이내 간단하게 설명해 주세요",
"앵무새가 화려한 색상인 이유를 100자 이내 간단하게 설명해 주세요"
]
responses = model.batch(inputs)
for r in responses:
print(r.content)
포인트: batch() 메서드로 여러 프롬프트를 효율적으로 처리할 수 있습니다.
Pydantic을 사용해 JSON 형식의 구조화된 응답을 받을 수 있습니다.
from pydantic import BaseModel, Field
class Movie(BaseModel):
title: str = Field(description="영화 제목")
year: str = Field(description="영화 개봉연도")
director: str = Field(description="영화 감독")
genre: str = Field(description="영화 장르")
# 구조화된 출력 설정
mws = model.with_structured_output(Movie)
# 영화 정보 요청
result = mws.invoke("영화 인셉션에 대해 설명해 주세요")
print(result)
포인트: with_structured_output()을 사용하면 LLM 응답을 정의된 스키마에 맞게 받을 수 있습니다.
LangChain의 메시지 객체를 사용한 대화 구성입니다.
from langchain.messages import HumanMessage, AIMessage, SystemMessage
# 시스템 메시지와 사용자 메시지 구성
smsg = SystemMessage("당신은 유능한 로켓 전문가 입니다.")
hmsg = HumanMessage("안녕하세요 궁금한것이 있어요")
msgs = [smsg, hmsg]
response = model.invoke(msgs)
print(response.content)
포인트: 시스템 메시지로 AI의 역할을 지정하고, 대화 맥락을 구성할 수 있습니다.
딕셔너리 형식으로도 대화 이력을 관리할 수 있습니다.
msgs2 = [
{"role": "system", "content": "당신은 유능한 AI 어시스턴트입니다."},
{"role": "user", "content": "안녕하세요 궁금한것이 있어요"},
{"role": "assistant", "content": "안녕하세요 JAY! 어떤 도움이 필요하신가요?"},
{"role": "user", "content": "제 이름이 뭐라고 했죠?"}
]
response = model.invoke(msgs2)
print(response.content)
포인트: 대화 이력을 딕셔너리 리스트로 관리하면 이전 대화 맥락을 유지할 수 있습니다. AI는 이전 대화에서 언급된 "JAY"라는 이름을 기억합니다.
이 실습을 통해 배운 내용:
LangChain을 사용하면 다양한 LLM을 일관된 방식으로 다룰 수 있어 매우 유용합니다.