AI Agent/텍스트 분석과 LLM

9. Gemini API & LangChain - LLM 활용의 실전

427paul 2026. 7. 22. 19:36

1. 왜 Gemini API인가? (비용 및 성능 우위)

주요 LLM API 비교

서비스 무료 여부 무료 제한
Google Gemini 무료 Tier 신용카드 불필요, 일 250회
OpenAI GPT-4o ❌ 유료 가입 시 소량 크레딧
Anthropic Claude ❌ 유료 -

Free Tier 모델

모델 분당 요청 일 요청 특징
gemini-2.5-flash 10 250 ✅ 추천! 빠르고 충분한 성능
gemini-2.5-flash-lite 15 1,000 가장 빠름, 간단한 과제
gemini-2.5-pro 5 100 가장 똑똑함, 제한 빡빡

2. Gemini 공식 SDK (google-genai) 기초 실무

2025년부터 기존 구버전(google-generativeai)은 Deprecated(비권장)되었으며, 한국어 인코딩 오류 등을 해결한 새로운 공식 SDK인 google-genai를 사용하는 것이 표준입니다.

💻 기본 호출 및 파라미터 제어 치트시트

Python

from google import genai
from google.genai import types

# 1. 클라이언트 인증 객체 생성
client = genai.Client(api_key="YOUR_GEMINI_API_KEY")

# 2. 텍스트 생성 및 Config 제어
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="리뷰: 이 영화 진짜 강력 추천합니다!",
    config=types.GenerateContentConfig(
        # 모델의 페르소나, 규칙, 행동 강제 지정
        system_instruction="감성을 긍정/부정/중립 중 하나만 단어로 답변하세요.",
        # 창의성 조절 (0: 결정론적/항상 같은 답, 0.7: 대화형, 1.0: 창작)
        temperature=0,
        # 최대 생성 길이 제한 (토큰 수)
        max_output_tokens=100,
    ),
)
print(response.text) # 최종 응답 텍스트 파싱

 

파라미터 설명 추천값
system_instruction 모델의 역할/규칙 과제에 맞게 설정
temperature 창의성 (0~2) 분류: 0, 대화: 0.7, 창작: 1.0
max_output_tokens 최대 생성 토큰 수 100~4000

3. 링체인(LangChain)의 핵심: LCEL 문법

🔹 1) 파이프라인 조립의 본질 (| 연산자)

LangChain은 내부적으로 google-genai SDK를 매핑하여 구동되지만, 데이터 전처리 및 구조화를 획기적으로 돕는 LCEL(LangChain Expression Language) 구조를 제공합니다.

PromptTemplate (프롬프트 틀) → LLM (Gemini 모델)} → OutputParser (출력 정제)

이 세 가지 컴포넌트를 리눅스 파이프라인 기호인 | 연산자로 직관적으로 연결하여 체인을 생성합니다.

  • chain = prompt | llm | parser
  • result = chain.invoke({"변수명": "입력값"})

🔹 2) 모델 불가지론(Model Agnostic) 아키텍처

LCEL 패턴을 사용하면 향후 비즈니스 요구사항에 따라 다른 모델(ex: OpenAI GPT, Claude 등)로 변경할 때, 하단의 파이프라인 구조를 전혀 건드리지 않고 단 한 줄의 모델 선언부만 교체하면 되므로 결합도가 매우 낮고 유지보수성이 극대화됩니다.

4. LangChain 실무형 심화 패턴

🛠️ 패턴 A: 구조화된 데이터 추출 (JsonOutputParser)

텍스트 형태의 답변이 아닌, 백엔드 API 시스템과 연동할 수 있도록 결과물을 파이썬 딕셔너리(JSON) 형태로 자동 파싱해주는 기법입니다.

from langchain_core.output_parsers import JsonOutputParser

chain = prompt | llm | JsonOutputParser()
result = chain.invoke({"review": "좋은데 비싸다"})
# result = {"sentiment": "중립", "keywords": ["좋다", "비싸다"]}

🛠️ 패턴 B: 고속 대량 처리 (batch)

단 건씩 루프를 돌며 호출하는 invoke와 달리, 여러 데이터셋을 리스트 형태로 묶어 병렬로 고속 처리하는 메서드입니다.

results = chain.batch([
    {"review": "재미있다"},
    {"review": "별로다"},
])
  • ⚠️ 주의(꿀팁): 무료 티어 환경에서 batch를 너무 빡빡하게 돌리면 429 에러(RESOURCE_EXHAUSTED)가 발생할 수 있으므로, 요청 사이에 의도적인 지연 시간(time.sleep(1))을 두는 가드레일이 안전함

🛠️ 패턴 C: 다단계 연결 (Chaining 파이프라인)

앞선 체인의 출력(Output)을 다음 체인의 입력(Input)으로 유기적으로 연결하여 고도화된 태스크를 수행합니다.

# 1단계: 요약
summary = chain_summary.invoke({"text": long_text})

# 2단계: 1단계 결과로 번역
translation = chain_translate.invoke({"text": summary})

🔥 최종 핵심 요약

단순히 문장을 툭 던져서 답변을 받는 챗봇 형태의 가벼운 서비스라면 Gemini 공식 SDK만으로 충분하지만, "입력 데이터의 템플릿화(PromptTemplate), 출력의 구조화(JSON Parsing), 여러 AI 기능을 유기적으로 엮는 엔지니어링 파이프라인"을 안정적으로 구축해야 하는 백엔드/데이터 엔지니어링 실무 환경에서는 LangChain LCEL 패턴을 도입하는 것이 글로벌 표준 아키텍처입니다.

마무리

Gemini API 기본 패턴

from google import genai
from google.genai import types

client = genai.Client(api_key="KEY")
response = client.models.generate_content(
    model="gemini-2.5-flash",
    contents="질문",
    config=types.GenerateContentConfig(
        system_instruction="역할",
        temperature=0,
    ),
)
print(response.text)

LangChain LCEL 기본 패턴

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

prompt = ChatPromptTemplate.from_messages([...])
llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash")
chain = prompt | llm | StrOutputParser()
result = chain.invoke({"변수": "값"})

 

https://github.com/427paul/AI_Agent/blob/main/Text%20_Analysis_and_LLM/%5BBDA%5D_9%E1%84%8C%E1%85%AE%E1%84%8E%E1%85%A1_GeminiAPI_LangChain_%E1%84%89%E1%85%B5%E1%86%AF%E1%84%89%E1%85%B3%E1%86%B8.ipynb

 

AI_Agent/Text _Analysis_and_LLM/[BDA]_9주차_GeminiAPI_LangChain_실습.ipynb at main · 427paul/AI_Agent

Contribute to 427paul/AI_Agent development by creating an account on GitHub.

github.com