냥냠
[교육] LangChain & LangGraph 실습 - AI agent 만들기 - (1) 본문
LangChain + LangGraph Bootcamp: AI 에이전트를 만드는 하루
일시 : 6월 25일 (수) 10:00 - 17:00
장소 : 위플레이스 선릉점
1. 이론 설명
AI란 무엇인가?
-> 기계가 인간의 행동(느끼고, 생각하고, 행동하고, 적응하는)을 모방하도록 하는 모든 기술 또는 시스템
+ 일의 생산성을 높이고 효율적으로 하게 해주는 도구
RAG(Retrieval Augmented Generation, 검색 증강 생성)
기존의 LLM의 할루시네이션을 줄이기 위한 방법으로, LLM이 자체적으로 유추하거나 생성하는 답변이 아니라 open book 개념으로 정답이 담긴 학습 데이터를 제공해주고 거기에서 답을 찾게 하는 방식이다.
즉, 외부의 신뢰할 수 있는 정보(문서, 데이터베이스)를 검색(Retrieval)하여 가져온 뒤, 이를 참조하여 답변을 생성(Generation)하는 방식
신뢰할 수 있는 답변과 최신의 정보를 추가할 수 있다는 것, 출처를 명확히 할 수 있다는 것이 RAG의 장점이다.
Agent란?
Agent란 스스로 판단하고 행동하는 인공지능 시스템이다.
- Single-Step Agent : 하나의 명령을 수행
- Multi-Step Agent : 복잡한 목표를 달성하기 위해 여러 단계를 계획하고 실행
LangChain과 LangGraph, LangSmith
LangChain
LLM을 활용한 에이전트를 쉽게 만들 수 있게 해주는 대표적인 오케스트레이션 도구
AI 개발자들이 가장 먼저 선택할 수 있는 대표적인 툴킷 중 하나로, 검색, 데이터베이스 조회, 코드 실행, 웹 브라우징 등 다양한 기능을 ‘체인(chain)’ 구조로 연결하여 Agentic한 동작을 구현하기에 최적화되어 있다.
Python과 JavaScript 기반으로 작동하며, 다양한 LLM과 외부 도구를 유연하게 지원한다.
LangGraph
복잡한 AI Agent 흐름을 제어하는 상태 기반 프레임워크
LangGraph는 LangChain 생태계에서 복잡한 멀티스텝 AI Agent의 흐름을 안정적으로 제어하기 위한 상태 기반 워크플로우 오케스트레이션 도구이다.
- 각 상태(state)를 노드로 정의하고, 조건(condition)에 따라 다음 상태로 분기, 반복, 종료할 수 있음
- LangChain과 통합되어, 체인/Agent를 조립해 복잡한 시나리오 구현 가능
조건분기, 반복구조, 멀티agent 협업, 오류처리&복구 등의 상황에 사용할 수 있다.
LangSmith
LangChain 팀이 만든 LLM 애플리케이션 디버깅 및 평가 플랫폼
LLM 기반 체인, 에이전트, RAG 시스템의 동작 흐름을 시각화하고, 에러 추적, 프롬프트 튜닝, 성능 평가, 실험 관리 등을 지원한다.
2. 실습 - LangChain 기초: LLM 호출과 RAG 핵심 요소 이해
개발환경 세팅 - vscode, python, jupyter
준비물 - openai api key (5달러 충전), 노트북
0. openAI 임포트, 모델 설정&api key 연동, 프롬프트 작성 후 답변 받기
1. 체인 만들기 - llm 모델 설정, 프롬프트 템플릿 만들기 (chain = prompt | llm)
2. 문장 스플리터 (나누기), 임베딩 후 벡터스토어에 저장, 리트리버로 검색
0. 간단한 LLM에 질문-답변받는 코드
from langchain_openai import ChatOpenAI # ChatOpenAI 클래스 임포트
import dotenv
import os
# .env 파일에서 환경 변수 로드,API 키 가져오기
dotenv.load_dotenv()
openai_api_key = os.getenv('OPENAI_API_KEY')
# ChatOpenAI 모델 초기화
# - model_name: 사용할 OpenAI 모델 지정 ("gpt-4o-mini" 사용)
# - temperature: 모델의 창의성/무작위성 조절 (0.은 가장 일관된 답변)
# - api_key: 위에서 로드한 OpenAI API 키 전달
llm = ChatOpenAI(model_name="gpt-4o-mini",
temperature=0.,
api_key=openai_api_key)
# LLM에 질문을 전달하고 응답 받기
# invoke() 메서드를 사용하여 모델을 호출하고, content 속성에서 답변 텍스트를 추출
question = "한국의 수도는 어디인가요?"
response = llm.invoke(question)
# 응답 내용 출력
print(response.content)
1. LangChain 프롬프트 및 체인 사용법
- PromptTemplate: 일반적인 문자열 기반의 프롬프트 템플릿을 생성합니다. 변수를 {변수명} 형태로 포함할 수 있다.
- ChatPromptTemplate: PromptTemplate과 유사하지만, 사용자(HumanMessage), AI(AIMessage), 시스템(SystemMessage) 등 역할(role)별 메시지를 정의하여 더욱 구조화된 대화 프롬프트를 만들 때 유용하다.
프롬프트 사용 단계:
- format: 정의된 PromptTemplate에 변수({cuisine})의 실제 값을 채워 넣어 최종 프롬프트 문자열을 만듭니다.
- 체인 생성: 프롬프트 객체 | LLM 객체 (LCEL 문법)를 사용하여 프롬프트의 출력이 LLM의 입력으로 전달되는 흐름(체인)을 정의합니다.
- invoke: 생성된 체인을 실행하는 메서드입니다. invoke() 안에 프롬프트 템플릿의 변수 값을 딕셔너리 형태로 전달합니다.
from langchain.prompts import PromptTemplate
# 1. PromptTemplate 정의
prompt = PromptTemplate.from_template(
"""
당신은 {cuisine} 요리사입니다. 현재 호텔에서 근무하고 있으며 경력은 25년입니다. \
언제나 고객을 위해 정성껏 요리를 만들고 고객분들에게 세심하게 설명해주는 것을 좋아합니다.
당신은 누구인가요?
""")
# 2. 프롬프트 미리 보기 (format 사용)
print("--- 생성된 프롬프트 내용 ---")
print(prompt.format(cuisine="일식"))
# 3. LLM 체인 생성
chain = prompt | llm
# 4. 체인 실행 (invoke 사용)
response = chain.invoke({"cuisine":"일식"})
print(response.content)
2. RAG 구현을 위한 검색 및 임베딩 구성
LangChain을 활용하여 특정 질문에 답하기 위해 외부 지식 소스(여기서는 위키피디아)에서 관련 정보를 가져와 LLM이 참조할 수 있도록 준비하는 과정
- 벡터스토어 : 도서관 같은 개념,
- 리트리버 : 찾아주는 도구 = 검색기
문서를 나눠서 검색했을 때 메타데이터가 소실된다는 단점이 있다.
from langchain_openai import OpenAIEmbeddings # OpenAI 임베딩 모델
from langchain_community.retrievers import WikipediaRetriever # 위키피디아 검색기(리트리버)
from langchain.text_splitter import RecursiveCharacterTextSplitter # 텍스트 분할기
from langchain.vectorstores import FAISS, Chroma # 벡터 저장소
# 1. 위키피디아 검색기 초기화 및 문서 검색 - top_k_results: 검색 결과 개수, lang: 검색 언어
wikipedia_retriever = WikipediaRetriever(top_k_results=1, lang="ko")
# "돈까스" 관련 문서 검색 - invoke로 실행
docs = wikipedia_retriever.invoke("돈까스")
# 검색된 문서의 메타데이터 확인 (선택 사항)
doc_meta = docs[0].metadata
# 검색된 문서의 내용 확인
doc_content = docs[0].page_content
# 2. 텍스트 분할기 초기화 및 문서 분할 - 단위 분할 규칙
splitter = RecursiveCharacterTextSplitter.from_tiktoken_encoder(
chunk_size=300,
separators=['\n\n','\n']
)
# 데이터 타입 documents로 변환
split_documents = splitter.create_documents([doc_content])
# 3. 벡터 저장소 생성 및 문서 임베딩/저장 (도서관)
# 분할된 문서를 OpenAI 임베딩 모델로 벡터화하여 FAISS 벡터 저장소에 저장
vector_store = FAISS.from_documents(embedding=OpenAIEmbeddings, documents=split_documents)
# 4. 검색기(Retriever) 생성
# 벡터 저장소에서 질의와 유사한 문서를 찾아주는 검색기 객체
retriever = vector_store.as_retriever()
# 5. 검색기 실행: 특정 질문에 대한 관련 문서 검색
question = "돈까스는 어느 곳에서 유래됐나요?"
result_docs = retriever.invoke(question)
# 임베딩된 문서 확인 (내부적으로 저장된 방식 확인 용도)
print(vector_store.docstore._dict)

이어서
1. 문서 기반 AI 챗봇 만들기
2. 회사 내규 검색 AI agent 만들기 (여러 문서 활용)
3. 보고서 작성 AI agent 만들기
실습
https://conference.etnews.com/conf_info.html?uid=398
LangChain + LangGraph Bootcamp: AI 에이전트를 만드는 하루
AI 에이전트는 챗봇, 문서 요약, 데이터 정리 등 일상과 업무에서 큰 도움을 줄 수 있는 기술입니다. 이 워크숍은 프 로그래밍과 AI에 처음 도전하는 초급자를 위해 설계되었으며, 복잡한 이론 대
conference.etnews.com
'AI' 카테고리의 다른 글
| n8n(엔팔엔, 엔에잇엔, 네이튼, ,,.,.)으로 간단한 워크플로우 만들기 (0) | 2025.12.12 |
|---|---|
| Streamlit을 이용한 LangChain RAG AI Agent 웹 서비스 구축 (0) | 2025.07.04 |
| [교육] LangChain & LangGraph 실습 - AI agent 만들기 - (3) (0) | 2025.07.01 |
| [교육] LangChain & LangGraph 실습 - AI agent 만들기 - (2) (3) | 2025.06.28 |
| 2025 AI 컨퍼런스 참석 후기 ( AI Work Summit, SOTEC, AI EXPO ... ) (3) | 2025.06.17 |