11장. 프레임워크 기반 에이전트 구성
LangChain 생태계와 모델 어댑터 — 이름이 여러 개인 이유
한 줄 요약
LangChain은 라이브러리 하나가 아니라 여러 꾸러미의 모음입니다. 이번 장에서 직접 쓰는 것은 둘입니다. 에이전트를 만드는 langchain과, Gemini를 LangChain의 규격에 맞춰 주는 모델 어댑터 langchain-google-genai입니다.
1. 구성 요소
| 이름 | 하는 일 | 이 과정에서 |
|---|---|---|
LangChain (langchain) |
에이전트, 도구, 메시지의 공통 규격 | create_agent, tool (이번 장) |
| langchain-google-genai | Gemini를 LangChain 규격으로 감싸는 모델 어댑터 | ChatGoogleGenerativeAI (이번 장) |
LangGraph (langgraph) |
단계와 흐름을 그래프로 실행하는 엔진 | 18장부터 직접 다룬다 |
| LangSmith | 실행 기록을 모아 보여 주는 별도 서비스 | 이 과정에서는 쓰지 않는다 |
앞의 세 가지는 2장에서 pip install -r requirements.txt로 이미 설치했습니다. 새로 설치할 것은 없습니다.
create_agent가 돌려주는 에이전트는 사실 LangGraph의 그래프입니다. 「따라하기」의 코드에서 type(agent)를 찍어 보면 CompiledStateGraph라고 나옵니다. 지금은 "에이전트 루프를 LangGraph가 돌린다"는 것만 알아 두면 됩니다.
2. 모델 어댑터 — 서로 다른 모델을 같은 모양으로
지금까지 Gemini는 구글의 SDK인 google-genai로 불렀습니다.
client.models.generate_content(model=MODEL, contents=..., config=...)
다른 회사의 모델은 함수 이름도, 넘기는 값의 모양도, 응답에서 답을 꺼내는 방법도 다릅니다. 모델을 바꾸려면 호출과 관련된 코드를 전부 다시 써야 합니다.
어댑터(adapter) 는 모양이 다른 것을 같은 모양으로 맞춰 주는 중간 부품입니다. 여행용 전원 어댑터를 떠올리면 됩니다. LangChain의 모델 어댑터는 어느 회사의 모델이든 "메시지 목록을 받아 메시지를 돌려준다" 는 한 가지 모양으로 감쌉니다.
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI(
model=MODEL,
google_api_key=os.getenv("GOOGLE_API_KEY"),
)
llm이 어댑터로 감싼 Gemini입니다. 이 뒤의 에이전트 코드는 llm이 어느 회사의 모델인지 알 필요가 없습니다. 다른 회사의 모델을 쓰려면 그 회사용 어댑터로 llm을 만드는 줄만 바꾸면 됩니다.
3. 9~10장의 호출과 무엇이 다른가
| google-genai (2~10장) | LangChain (이번 장) | |
|---|---|---|
| 모델을 가리키는 것 | client + 모델 이름 |
llm 객체 |
| 호출 | client.models.generate_content(...) |
llm.invoke(...) 또는 에이전트가 대신 호출 |
| 주고받는 것 | types.Content 목록 |
메시지 목록 |
| 설정 | types.GenerateContentConfig(...) |
어댑터를 만들 때, 또는 에이전트를 만들 때 |
API 키는 같은 것을 씁니다. config.py가 .env에서 읽어 둔 GOOGLE_API_KEY를 그대로 넘깁니다.
4. temperature를 넣지 않는 이유
10장까지는 호출마다 temperature=1.0를 넣었습니다. 이번 장의 코드에는 없습니다.
Gemini 3 계열 권장 설정에 맞춰 어댑터에서도 기본 temperature를 사용합니다.
모델 어댑터에는 temperature를 별도로 지정하지 않고 기본 설정을 사용합니다.
Gemini 3 계열에서는 temperature 기본값(1.0)을 사용합니다. 온도만으로 결과의 일관성을 보장할 수 없으므로 출력 형식과 규칙을 명시하고 실제 응답을 확인합니다.
이 사실은 3장의 결론과 이어집니다. 답을 고정하려고 temperature에 기대지 않습니다. 에이전트에서 고정해야 하는 것은 문장이 아니라 어떤 도구를 부르는가이고, 그것은 도구 설명과 시스템 프롬프트가 정합니다.
핵심 정리
- LangChain은 여러 꾸러미의 모음입니다. 이번 장은
langchain과langchain-google-genai를 씁니다. - 모델 어댑터는 서로 다른 회사의 모델을 "메시지를 받아 메시지를 돌려주는" 같은 모양으로 감쌉니다.
- 어댑터로 감싼 Gemini가
ChatGoogleGenerativeAI입니다. API 키는 지금까지 쓰던 것을 그대로 씁니다. create_agent가 만든 에이전트는 LangGraph의 그래프입니다.- Gemini 3 계열에서는 temperature 기본값(1.0)을 사용합니다. 온도만으로 결과의 일관성을 보장할 수 없으므로 출력 형식과 규칙을 명시하고 실제 응답을 확인합니다.