LangChain CH01-Basic

Jeong-yun Lee·2025년 10월 4일

LangChain

목록 보기
1/3

테디노트님의 LangChain 한국어 튜토리얼을 참고해 공부한 내용입니다.

LangChain 스터디 정리 💬

이번 글에서는 LangChain의 개념, 구성요소, 환경 설정, 주요 사용법을 학습한 내용을 정리했습니다.
LLM 애플리케이션을 직접 구성하기 위한 기초 개념을 중심으로 다룹니다.


1. LangChain이란?

LangChain은 LLM 기반 애플리케이션을 구축하기 위한 프레임워크입니다.
상호운영 가능한 구성요소와 서드파티 간 연결(Chain)을 통해 AI 애플리케이션 개발을 간소화합니다.

💡 LangChain을 활용하면 LLM이 다양한 소스의 context를 인식 및 유지하여 일관된 응답 성능을 확보할 수 있습니다.

Inference: 주어진 context를 바탕으로 어떤 응답이나 액션을 취할지 스스로 결정하며, 종합적 상황 판단을 통해 적절한 해결책을 제시합니다.


2. LangChain 구성

🔹 LangChain Library

Python, JS 기반 라이브러리로, 컴포넌트의 인터페이스 통합 및 체인·에이전트 구성 런타임을 제공합니다.
👉 공식 문서

🔹 LangChain Template

참조 아키텍처 모음. 빠른 개발용 예제 템플릿.
👉 LangChain Templates

🔹 LangServe

LangChain 체인을 REST API로 배포할 수 있는 라이브러리.
👉 LangServe GitHub

🔹 LangSmith

LangChain 기반 체인을 디버그, 테스트, 평가, 모니터링할 수 있는 통합 개발자 플랫폼.
👉 LangSmith

🔹 LangGraph

LangChain 위에서 상태유지 가능한 다중 액터 애플리케이션을 구축하기 위한 라이브러리.
👉 LangGraph Docs


3. 주요 모듈

모듈설명
모델 I/O프롬프트 관리 및 LLM 인터페이스 유틸리티
검색(Search)외부 데이터 소스에서 필요한 데이터를 조달
에이전트(Agent)LLM의 행동 결정 및 실행, 관찰, 반복

4. 환경 구성

기본적으로 anaconda3 기반의 Python 3.13이 설치되어 있다면, 버전 충돌 방지를 위해 별도의 환경 설정이 필요합니다.

✅ pyenv로 Python 3.11 설치

pyenv install 3.11

프로젝트 폴더 내에서 해당 버전을 사용하도록 설정합니다.

pyenv local 3.11
python --version

✅ conda 비활성화

conda가 기본 활성화된 경우, 다음 명령으로 비활성화합니다.

conda deactivate
conda config --set auto_activate_base false

이후 poetry로 가상환경을 생성하면 다음과 같이 구분됩니다:

poetry shell (프로젝트 내부)  → Python 3.11.9
poetry shell exit (프로젝트 외부) → Python 지정 안됨
conda activate  → Python 3.13.5

📌 LangChain 프로젝트 폴더 전용 Python 환경(3.11.9)을 관리할 수 있습니다.


5. Log Probability (LogProb)

Log Probability는 모델이 특정 토큰이나 시퀀스를 생성할 확률의 로그값입니다.

문장: I love cats
→ 토큰별 확률: P(I), P(love|I), P(cats|I love)

로그를 적용하는 이유는 확률의 곱이 너무 작기 때문에 덧셈 연산으로 안정화하기 위함입니다.

활용:

  • 출력 신뢰도 평가: 낮은 logprob → 모델의 자신 없는 응답
  • 생성 비교: 여러 문장 중 자연스러운 선택 판단
  • LangSmith 디버깅: 의사결정 과정 추적 가능

6. 스트리밍 출력

# 스트리밍 요청
answer = chain.stream({"question": "미국에서 피자 주문"})
stream_response(answer)

❓ Python은 인터프리터 언어인데 어떻게 실시간 출력이 가능할까?

chain.stream()제너레이터 또는 비동기 스트리밍으로 구현되어 chunk 단위로 데이터를 반환합니다.
따라서 전체 데이터를 메모리에 모두 올리지 않고 실시간 처리가 가능합니다.


7. System Prompt vs User Prompt

구분역할
System모델의 성격, 말투, 규칙 설정. 대화 전체의 일관성 유지.
User사용자의 질문, 명령, 요청 전달.

System Prompt는 대화의 ‘기본 성격’을 정의하고, User Prompt는 구체적 요청을 수행합니다.


8. 프롬프트 템플릿

from langchain import PromptTemplate

prompt_template = PromptTemplate.from_template("What is {var}?")
prompt = prompt_template.format(var="LangChain")

9. 체인(Chain) 생성

prompt = PromptTemplate.from_template(template)
model = ChatOpenAI(model_name="gpt-4.1-nano")
output_parser = StrOutputParser()

chain = prompt | model | output_parser
input = {"var": "LangChain"}

chain.invoke(input)
answer = chain.stream(input)

Output Parser

모델의 출력 데이터를 특정 형식(JSON, dict, text 등)으로 변환하는 역할.

invoke() vs stream()

둘 다 입력을 딕셔너리 형태로 전달하지만, stream()은 실시간 출력.


10. LCEL (LangChain Expression Language)

LangChain의 체인 실행 인터페이스입니다.

🔹 Runnable

호출, 일괄처리, 스트리밍 등을 수행할 수 있는 작업 단위입니다.

chain.invoke({"var": "LangChain"})

answer = await chain.ainvoke({"var": "LangChain"})

🔹 Batch / Async Batch

chain.batch([
    {"var": "LangChain"},
    {"var": "LangSmith"},
    {"var": "LangServe"},
])

접두사 a비동기(async) 메서드를 의미합니다.


11. 병렬 실행 (Parallel)

여러 체인을 동시에 실행할 수 있습니다.

chain1 = prompt | model | parser
chain2 = prompt | model | parser

combined = RunnableParallel(one=chain1, two=chain2)
combined.invoke({"var": "LangChain"})

12. RunnablePassThrough

입력을 그대로 전달하거나, 새로운 키를 추가할 때 사용합니다.

runnable_chain = {"num": RunnablePassThrough()} | model | parser
runnable_chain.invoke(10)

(RunnablePassThrough.assign(new_num=lambda x: x["num"] * 3)).invoke({"num": 1})
# {'num': 1, 'new_num': 3}

13. RunnableLambda

사용자 정의 함수를 체인에 연결할 수 있습니다.

from datetime import datetime

def get_today(a):
    return datetime.today().strftime("%b-%d")

prompt = PromptTemplate.from_template(
    "{today} 가 생일인 유명인 {n}명을 나열하세요."
)

llm = ChatOpenAI(temperature=0, model_name="gpt-4.1-mini")

chain = ({
    "today": RunnableLambda(get_today),
    "n": RunnablePassThrough()
} | prompt | llm | StrOutputParser())

print(chain.invoke(3))

✨ 마무리

이번 스터디를 통해 LangChain의 핵심 구조(Chain, Prompt, Runnable, Stream)를 이해했습니다.
다음 단계에서는 RAG(Retrieval-Augmented Generation)에이전트 구성 실습을 진행할 예정입니다.

profile
push hard 🥕

0개의 댓글