이 글에서는 LangChain이 무엇인지, 왜 필요한지, 어떻게 쓰일 수 있는지를 실습을 통해 학습한다.
- LangChain, Model, Structured Output, Memory, LangSmith
모든 내용의 출처는 다음 페이지임을 밝힌다.
01장. 시작하며
이 책에서는 랭체인과 랭그래프 1.0을 기반으로, 실무 현장에 바로 투입할 수 있는 **'AI 에이전트'**의 단계별 구현 방법을 다룹니다. 단순히 질문에 답하는 평범한 챗봇을 …
wikidocs.net
LangChain이란?
랭체인은 LLM을 이용할 때 발생하는 파편화된 작업들을 통일된 규격으로 묶어 통해 구현할 수 있게 해주는 프레임워크다. 단순한 LLM은 사용자의 질문에 텍스트 형태로 답을 한다. LangChain은 LLM을 사용해 애플리케이션을 개발하거나 에이전트를 개발할 때 도움을 주는 프레임워크다.
LangChain을 사용하면 고도화된 AI Agent를 만들 수 있다. Agent의 세부 동작을 설정할 수 있기에 Model, Structured Ouput, Memory등 Agent의 성능에 영향을 주는 메뉴들을 직접 조작할 수 있다. 특히 가드레일과 같은 보안을 위한 미들웨어 개발에도 큰 도움을 준다.
이처럼 LangChain은 LLM을 이용한 서비스를 개발하는데 도움을 준다. 그러나, LangChain을 사용할 경우 비용과 시간, 보안 등 관리해야 할 항목이 늘어나기 때문에 복잡성이 증가한다. 성공적인 LLM 서비스 설계를 위해선 흑백논리가 아닌, '어디까지 파이프라인으로 통제하고, 어디부터 에이전트에게 자율성을 부여할 것인가'를 결정해야 한다.
Model
LangChain은 개발자가 설정한 모델을 기준으로 동작한다. 사실 LLM에 틀을 입혀 개발자가 관리하기 편하게 제공하는게 LangChain이기 때문에 개발자는 환경변수 등을 이용해 자신이 사용할 LLM API Key를 입력해야 한다.

모델을 설정하면 개발자는 invoke() 메소드를 사용해 LLM을 호출할 수 있다.
LangChain에 내장되어 있는 create_model() 메소드를 통해 모델에 대한 시스템 프롬프트, 툴을 지정할 수도 있다.
📍 모델 호출 결과
{'input_tokens': 15, 'output_tokens': 824, 'total_tokens': 839, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 640}}
추론 결과를 보면 'reasoning'이라는 항목이 보인다. LLM은 개발자의 답변을 생성하기 위해 '추론'이라는 과정을 거치는데, 답변의 2/3을 차지할 정도로 추론의 양이 많다. 추론의 양을 많게 설정하면 LLM은 창의적이고 다양한 말 표현을 생각해 내며 문제를 해결하기 위해 답변을 깊게 생각한다. 반대로 추론의 양이 적다면 문제 해결을 위해 깊게 생각하기 보단 사실을 위주로 생각할 확률이 높아진다.
Structured Output
AI Agent를 이용하기 위해선 각 도구들이나 다른 LLM들에게 다른 내용을 주어선 안된다. 평소 LLM처럼 추상적이고 언어로 이루어진 말을 전달할 경우 통일된 동작을 이끌어낼 수 없고, LLM들마다 다른 결과를 가져오기 때문이다.
백엔드 엔지니어링의 DTO처럼 구조화된 답변을 사용해야 컴포넌트들에게 통일된 데이터를 전달할 수 있고 에러가 발생할 경우 원인을 찾기 쉬워진다.
구조화된 답변은 흔히 데이터 스키마라고 한다. 데이터 스키마란 데이터의 구조, 타입(문자열, 숫자, 리스트 등), 그리고 제약 조건을 명시해 둔 일종의 '설계도'이자 '표준 규격서'이다.
모델에게 명확한 스키마를 제공하는 것은, 모델과 시스템 사이에 "반드시 이 필드명과 데이터 타입을 준수하고, 필수 여부 규칙에 맞춰 데이터를 생성하라"는 엄격한 계약을 맺는 것과 같다. 설계도가 정교할수록 모델이 엉뚱한 답변을 내놓는 환각(Hallucination) 현상이 현저히 줄어들며, 전체 시스템의 안정성은 비약적으로 상승한다.
데이터 스키마대로 구조화된 데이터를 만들기 위해선 '구조화 전용 래퍼'가 필요하다.
LangChain에선 구조화된 답변을 구성하기 위해 두 가지 방법을 사용한다.
- Pydantic (Python 환경)
- JSON
1️⃣ Pydantic

Python 환경에서는 Pydantic을 이용해 데이터 스키마를 정의할 수 있다. Pydantic은 Python 환경에서 사용하는 데이터 래퍼다.
2️⃣ JSON


웹 서비스를 개발할 때 흔히 사용하는 JSON을 가지고도 구조화된 답변을 설계할 수 있다.
AI 서비스가 웹 플랫폼과 합쳐져 사용된다면 JSON을 사용하는게 확장성을 높일 수 있다. Python 내에선 Dict 자료구조로 사용된다.
Memory
LLM은 기본적으로 'stateless'다. 사용자가 보낸 말의 맥락을 기억하지 않는다. LLM으로 하여금 사용자의 말을 기억하게 하고 싶다면, LangChain의 자체 기능이나 데이터베이스처럼 사용자의 말을 기억할 수단이 필요하다(그리고 그 말을 LLM에게 전달하는 로직도 필요하다).
전에 Spring AI를 활용해 LLM용 데이터베이스 인터페이스를 만든 적이 있는데, LangChain에서는 이를 한 기능으로 제공한다.
LangChain은 데이터베이스에 저장할 말을 분류하기 위해 '메세지 종류'를 활용한다.
1️⃣ LangChain 메세지 종류
- System Message (시스템 메시지): 개발자가 미리 부여하는 "역할 및 규칙 프롬프트", 모델의 답변 톤과 관점이 해당 역할에 맞춰진다.
- Human/User Message (사용자 메시지): 사용자가 입력하는 질문이나 지시사항
- AI/Assistant Message (AI 메시지): 모델이 생성한 답변
LLM은 메세지들을 토대로 다음 답변을 설계한다. 메세지들을 위의 분류대로 저장하고 있다가 다음 메세지가 보내지면 태그와 함게 LLM에게 전송한다.
2️⃣ LangChain 메세지를 보내는 방법
- 메세지 객체를 활용하기

- Dict 객체 활용하기

3️⃣ Message에 대한 생각
LLM이 대화를 기억하고 답변을 설계하면 문맥에 맞는 답변을 받을 수 있어 편리하다. 다만, LLM과의 대화를 기억하고 이를 매번 전달하는 것은 시스템 자원을 사용하는 일이므로 편리함과 자원 효율성 사이에서 고민해야 한다.
다음은 LLM에 메모리를 도입할 때 고려할 수 있는 방안이다.
- 슬라이딩 윈도우 : 최근 텍스트로부터 N개만 기억하기
- 토큰 기반 예산 트리밍 : 정해 놓은 토큰을 넘어선다면 가장 나중 메세지 자르기
- 전체 대화 요약 + 최근 대화 저장 : 전체 대화는 요약해서 전달하고, 최근 대화만 저장 후 전달
- 상태 사용 : 모든 메세지에 공통으로 저장돼야 하는 사용자 정보, 시스템 프롬프트 등은 '상태'로 저장
- 검색 기반 메모리 RAG 사용
밑 코드는 토큰 기반 예상 트리밍의 예시 코드이다.
from langchain_core.messages.utils import trim_messages, count_tokens_approximately
trimmed_messages = trim_messages(
messages,
strategy="last", # 오래된 대화를 버리고 최근 대화를 유지
token_counter=count_tokens_approximately,
max_tokens=2000,
include_system=True, # 시스템 메시지는 잘려나가지 않도록 고정(핀)
start_on="human", # 잘라냈을 때 첫 시작이 무조건 사람의 질문이 되도록 보장
end_on=("human", "tool"),
)
response = model.invoke(trimmed_messages)
LangSmith
LangSmith는 LangChain을 사용해 LLM과 대화할 때 일어나는 모든 작업에 대한 정보를 모니터링 하는 툴이다. 이를 통해 대화 내역, 토큰 사용 수, 애플리케이션 작업을 추적할 수 있다.

LangSmith를 활용하면 언제, 어떤 입력이 일어났는지 쉽게 알 수 있기 때문에 AI Agent 서비스를 쉽게 모니터링할 수 있다.

정리
LangSmith의 기본 내용을 사용해봤다. 확실히 LLM API를 단독으로 사용해 어플리케이션을 기록할 때보다 훨씬 편해보인다. 이를 이용해서 개인 서버에서 AI Agent를 한번 구축해보고 싶다. 그리고 관련된 보안을 어떻게 관리할지 궁금하다. 이것도 찾아봐야겠다.
[출처]
https://www.samsungsds.com/kr/insights/what-is-langchain.html
랭체인 LangChain 이란 무엇인가? | 인사이트리포트 | 삼성SDS
이 글에서는 AI 시대의 변화와 함께 LangChain이 어떻게 언어 모델의 한계를 극복하고 실질적인 애플리케이션 개발을 가능하게 하는지 살펴보겠습니다.
www.samsungsds.com
