해당 글은 https://youtu.be/rb3ZYR_Q1po?si=h5ngxX6DzDlg064t 랭체인 유튜브의 내용을 학습하고 정리하고자 작성했습니다
| 구분 | LLM 기반 애플리케이션 | LLM 기반 Agent |
|---|---|---|
| 정의 | LLM을 특정 목적에 맞게 설계된 고정된 파이프라인 | LLM이 스스로 추론(Reason)하고 행동(Act)하는 동적 시스템 |
| 행동 흐름 | • 입력 → LLM → 출력(고정된 흐름) | |
| • “특정 키워드가 들어오면, 어떠한 형식으로 답변을 하라” 라고 사전에 정의 | • 입력 → 추론(”무엇을 해야 할까?”) → 도구 → 선택/사용 → 판단 → 반복 → 최종 출력 | |
| 결정 주체 | 개발자가 미리 정한 구조 | LLM이 매번 스스로 판단 |
| 예시 | • 텍스트 요약기 |
• 문서 질의응답(Retrieval QA)
• 챗봇 | • 검색하고 요약하는 Research Agent
• 외부 API(구글 캘린더, Gmail)를 호출해 일정을 정리하는 비서 서비스 |

고도화된 형태의 Agent

from langchain.chat_models import init_chat_model
model = init_chat_model("gpt-5-nano")
response = model.invoke("안녕하세요. 당신은 누구입니까?")
println(response.content)
""" 안녕하세요! 저는 OpenAI가 만든 AI 언어 모델 ChatGPT입니다. GPT-4 기반으로 작동하며, 텍스트를 이해하고 다양한 방식으로 생성해 드립니다.
제가 도와드릴 수 있는 것들
- 정보 설명, 요약, 번역
- 글쓰기 도움(에세이/편지/보고서 등), 아이디어 브레인스토밍
- 코딩 도움(간단한 코드 예시, 디버깅 아이디어)
- 학습 보조, 문제 풀이 및 개념 설명
- 일정 아이디어 정리, 의사소통 연습 등
주의할 점
- 제 지식은 2024년 6월까지의 정보에 기반합니다. 이후의 최신 소식은 반영이 필요할 수 있습니다.
- 인터넷에 실시간으로 접속하지는 못하고, 민감한 개인 정보는 안전하게 다루도록 주의해 주세요.
무엇을 도와드릴까요? 원하시는 주제나 요청을 말씀해 주시면 바로 시작하겠습니다."""
println(response.usage_metadata)
"""{'input_tokens': 15,
'output_tokens': 744,
'total_tokens': 759,
'input_token_details': {'audio': 0, 'cache_read': 0},
'output_token_details': {'audio': 0, 'reasoning': 512}}"""
init_chat_model 모듈 파라미터
invoke() 메서드를 사용해 답변(텍스트) 생성
예시: 답변을 모두 생성해야 유저에게 보여주는게 아니라, 일단 만든 단어를 유저에게 보여줌
for chunk in model.stream("안녕하세요. 당신은 누구입니까?"):
print(chunk.text, end="")
input을 할 때마다 호출 비용이 든다
한꺼번에 담아서 보내면 호출 비용을 감소시킬 수 있음
inputs = [
"과적합이 뭔가요?",
"앵무새의 털 색상이 화려한 이유는?",
"AI Agent 기반 서비스는 뭐가 있나요?"
]
responses = model.batch(inputs)
for response in responses:
print(response)
pydantic은 파싱 + 데이터 검증까지 지원
후작업을 할 때 type이 중요한 상황이면 pydantic을 사용하는게 좋음
from pydantic import BaseModel, Field
class Movie(BaseModel):
"상세한 영화 정보."
title: str = Field(description="영화의 제목")
year: int = Field(description="개봉 연도")
director:str = Field(description="영화 감독 이름")
rating: float = Field(description="영화 평점(10점 만점)")
model_with_structure = model.with_structured_output(Movie)
model_with_structure.invoke("영화 인셉션에 대해 설명해 주세요.")
# Movie(title='Inception', year=2010, director='Christopher Nolan', rating=8.8)
from langchain.messages import HumanMessage, AIMessage, SystemMessage
system_msg = SystemMessage("당신은 유능한 로켓 전문가 입니다.")
human_msg = HumanMessage("안녕하세요. 궁금한 것이 있어요!")
messages = [system_msg, human_msg]
response = model.invoke(messages)
# AIMessage(content='안녕하세요! 로켓 전문가로서 도와드리겠습니다. 어떤 주제든 편하게 물어보세요.\n\n원하신다면 아래처럼 시작해볼 수 있어요.
→ 대화 맥락에 맞는 답변이 나옴
→ 개발자가 미리 설정한 역할에 맞춰서 나옴
human_msg1 = HumanMessage("안녕하세요. 저는 벼리입니다")
ai_msg = AIMessage("안녕하세요 벼리! 어떤 도움이 필요한가요?")
human_msg2 = HumanMessage("제 이름은 무엇인가요?")
messages = [human_msg1,ai_msg,human_msg2]
response = model.invoke(messages)
# AIMessage(content='당신의 이름은 벼리입니다.\n\n다르게 부르고 싶다거나 애칭이 있다면 말씀해 주세요. 앞으로 벼리로 불러드릴까요, 아니면 더 편한 호칭이 있을까요?',
messages = [
{"role": "system", "content": "당신은 유능한 로켓 전문가입니다."},
{"role": "human", "content": "안녕하세요. 궁금한 게 있어요!"},
{"role": "ai", "content": "로켓 관련 무엇이든 물어보세요."},
{"role": "human", "content": "추진 방식 차이를 설명해 주세요"},
]
response = model.invoke(messages)

https://docs.langchain.com/oss/python/langgraph/workflows-agents