LangChain + Google Gemini API 실습 정리

CHZEE93·2026년 2월 9일

AI개발

목록 보기
4/11

1. 환경 설정 및 API 연결 테스트

먼저 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/' 접두사 없이 모델명만 입력합니다.


2. LangChain 설치 및 모델 초기화

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 제공자를 통일된 인터페이스로 사용할 수 있습니다.


3. 스트리밍 응답 (실시간 출력)

응답을 실시간으로 받아볼 수 있는 스트리밍 기능입니다.

for chunk in model.stream("AI Agent란 무엇인지 100자 이내 간단하게 설명해 주세요"):
    print(chunk.content, end="")

포인트: stream() 메서드를 사용하면 응답이 생성되는 대로 실시간으로 출력됩니다.


4. 배치 처리 (여러 질문 한번에)

여러 개의 질문을 한 번에 처리할 수 있습니다.

inputs = [
    "과적합이란 무엇인지 100자 이내 간단하게 설명해 주세요",
    "앵무새가 화려한 색상인 이유를 100자 이내 간단하게 설명해 주세요"
]

responses = model.batch(inputs)

for r in responses:
    print(r.content)

포인트: batch() 메서드로 여러 프롬프트를 효율적으로 처리할 수 있습니다.


5. 구조화된 출력 (Structured Output)

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 응답을 정의된 스키마에 맞게 받을 수 있습니다.


6. 메시지 기반 대화 (Message Objects)

LangChain의 메시지 객체를 사용한 대화 구성입니다.

from langchain.messages import HumanMessage, AIMessage, SystemMessage

# 시스템 메시지와 사용자 메시지 구성
smsg = SystemMessage("당신은 유능한 로켓 전문가 입니다.")
hmsg = HumanMessage("안녕하세요 궁금한것이 있어요")

msgs = [smsg, hmsg]
response = model.invoke(msgs)
print(response.content)

포인트: 시스템 메시지로 AI의 역할을 지정하고, 대화 맥락을 구성할 수 있습니다.


7. 딕셔너리 형식의 대화 이력

딕셔너리 형식으로도 대화 이력을 관리할 수 있습니다.

msgs2 = [
    {"role": "system", "content": "당신은 유능한 AI 어시스턴트입니다."},
    {"role": "user", "content": "안녕하세요 궁금한것이 있어요"},
    {"role": "assistant", "content": "안녕하세요 JAY! 어떤 도움이 필요하신가요?"},
    {"role": "user", "content": "제 이름이 뭐라고 했죠?"}
]

response = model.invoke(msgs2)
print(response.content)

포인트: 대화 이력을 딕셔너리 리스트로 관리하면 이전 대화 맥락을 유지할 수 있습니다. AI는 이전 대화에서 언급된 "JAY"라는 이름을 기억합니다.


마무리

이 실습을 통해 배운 내용:

  • ✅ Google Gemini API 기본 연결
  • ✅ LangChain을 통한 통합 인터페이스 사용
  • ✅ 스트리밍, 배치 처리 등 다양한 호출 방식
  • ✅ 구조화된 출력으로 데이터 추출
  • ✅ 메시지 기반 대화 맥락 관리

LangChain을 사용하면 다양한 LLM을 일관된 방식으로 다룰 수 있어 매우 유용합니다.

profile
치즈 키우는 사람

0개의 댓글