LangChain

calico·2025년 5월 7일

Artificial Intelligence

목록 보기
22/143

LangChain은 최근 AI/데이터/서비스 개발에서 매우 인기 있는 오픈소스 프레임워크로, 대형 언어 모델(LLM), 다양한 툴, API, 문서 데이터, 데이터베이스 등 여러 AI 구성요소를 조합하여 실제 서비스나 응용 프로그램을 빠르게 개발할 수 있도록 도와주는 라이브러리입니다.


나중에 보기
https://velog.io/@0like/RAG-LANCHAIN-3-Langchain-%EA%B0%9C%EB%85%90-%EB%AC%B8%EB%B2%95-%EC%A0%95%EB%A6%AC-ch.12-Retrieval-Augmented-GenerationRAG

1. LangChain의 등장 배경


  • GPT 같은 대형 언어모델(LLM)이 등장하면서 누구나 강력한 자연어처리/코드 생성/질문응답 챗봇 등 다양한 AI 기능을 활용할 수 있게 되었음.

  • 실제 서비스로 만들기 위해서는 단순히 LLM에 프롬프트만 넣는 것보다, 다양한 데이터(문서, DB 등)와 연동하거나, 외부 툴(검색, 계산기 등)도 사용해야 하며, 여러가지 기능을 "워크플로우"로 조합하는 것이 필요.

  • 하지만 이런 연결작업은 생각보다 어렵고 코드가 복잡해짐.
    (프롬프트 관리, 입력/출력 체인, 도구 호출, context 관리, 다양한 LLM 연결 등)

    → 이를 단순화하고 추상화시켜주는 것이 바로 LangChain입니다.



2. LangChain의 주요 기능


1) 체인(Chains)


  • 여러 작업(예: 프롬프트 입력 → LLM 호출 → 결과 후처리 → 추가 API 호출 등)을 한 줄로 연결해 "파이프라인(체인)"처럼 만듭니다.

  • 복잡한 작업 흐름을 단순하게 구현할 수 있습니다.



2) 에이전트(Agents)


  • LLM이 단일 답변을 내놓는 게 아니라, 상황에 맞게 필요한 "도구"를 선택해 실행하는 패턴입니다.

  • 예시

    1. 사용자가 계산 문제를 요청

    2. LLM이 스스로 계산기 툴에 접근

    3. 다시 답변을 합성하여 제공

  • 직접적으로 명령어 처리, 정보 검색, 요약, 번역, 코드 실행, API 호출 등 실제 문제 해결이 가능합니다.



3) 데이터와의 연동


  • 다양한 데이터 소스(문서, 웹 페이지, 데이터베이스, PDF, Notion 등)에서 텍스트를 불러와서,
    이를 LLM에 prompt로 넘길 수 있도록 처리(로딩, 분할, 임베딩 등)하는 기능도 제공합니다.



4) 벡터스토어(Vector Store) 연동


  • 문서 기반 Q&A, 검색챗봇 등을 만들 때 단순 전체 텍스트 검색이 아니라, 문서조각(embedding)간의 유사도를 바탕으로 가장 관련 있는 부분만 LLM에 넣는 "RAG(검색 + 생성)" 패턴을 구현하는 데 최적화되어 있습니다.

  • Pinecone, Weaviate, Chroma, FAISS 등 유명 벡터DB와 바로 연하여 인덱싱/검색이 가능합니다.



5) 프롬프트 최적화/관리

  • 프롬프트 템플릿을 만들어 변수만 바꾸어 쉽게 가변적 상황에도 대응할 수 있습니다.

  • 다양한 Prompt engineering 기법을 실험/적용할 수 있는 구조입니다.



6) 다양한 LLM 지원, API 래핑


  • OpenAI(GPT-4, 3.5 등), Anthropic, HuggingFace, Google, Ollama(로컬) 등 수많은 LLM들과 원클릭 연동이 가능합니다.



3. LangChain의 구성요소와 연결 구조


1) LLM 추상화 (LLM Abstraction)


  • 역할: 여러 회사/종류의 LLM(OpenAI, Google, HuggingFace, Ollama 등)을 하나의 통합 인터페이스 객체(클래스)로 다룸.

  • 이점: 코드 한 줄만 바꿔도 모델 교체/멀티모델 연결이 쉬움.

    • 예: OpenAI, ChatOpenAI, Ollama, HuggingFaceLLM



2) 프롬프트 (Prompt)


  • 역할: 사용자의 입력과 컨텍스트, 그리고 시스템 메시지, 지시문 등을 "템플릿" 형태로 만들어 LLM에 전달.

  • 이점: 다양한 상황에 맞춰 프롬프트 구성/변수치환이 쉽고, 일관된 인터페이스 제공.



3) 체인 (Chain)


  • 역할: 여러 단계를 순서대로 파이프라인처럼 연결하는 처리 흐름(워크플로우).

  • 예:

    1. 유저 입력

    2. 프롬프트 작성

    3. LLM 호출

    4. 후처리

  • 이점: 복잡한 로직도 단계별로 쉽게 조립, 재사용성과 유지보수성이 높음.



4) 인덱스 (Index)


  • 역할: 대규모 문서, 데이터셋에서 빠르고 효율적으로 검색/질의하기 위해 임베딩(벡터화)+벡터DB 기반 색인 인프라 제공.

  • 연결: 체인이나 에이전트가 질의 전 필요한 정보를 인덱스(벡터스토어)에서 검색하여 컨텍스트로 LLM에 제공. (대표: RAG 패턴)

    예: FAISS, Chroma, Pinecone 등



5) 메모리 (Memory)


  • 역할: 여러 번의 대화 튜닝이나, 에이전트가 진행 중 과거 상태를 기억·저장하는 컴포넌트.

  • 이점: 자연스러운 멀티턴 챗봇, 긴 대화, 대화 중 맥락 유지에 필수.

    • 예: 대화이력, 최근 프롬프트/응답, state 등 저장



6) 에이전트 (Agent)


  • 역할: LLM이 주체적으로 적합한 "행동"(tool 호출, 검색, 계산 등)을 판단해 복잡한 목표를 스스로 단계별로 해결하는 구조.

  • 이점: 단편적 답변이 아니라, 복수 작업 조합+툴/데이터 활용+상황별 분기 등의 고도화된 처리가 가능.



실제 구성 흐름(워크플로우) 예시


  • 예시: 사용자 질의에 기반하여 원하는 문서에서 답을 찾아 설명하고, 계산/검색 등도 자동으로 병행
[1. LLM 추상화]
   |
   ▼
[2. 프롬프트 템플릿]
   │      ▲
   │      │
   ▼      │
[3. 체인 (입력 처리 → 프롬프트 생성 → LLM 호출 → 후처리)]
   │            ▲
   │            │
   ▼            │
[4. 인덱스 (문서 검색 → 관련 컨텍스트 추출)]
   │            ▲
   │            │
   ▼            │
[5. 메모리 (과거 대화/history, context 유지)]
   │
   ▼
[6. 에이전트 (상황에 따라 검색/계산/DB/API 호출 등 순서 제어 및 도구 결합 실행)]
  1. 사용자 질문: “파이썬에서 리스트 정렬 방법을 알려줘.”

  2. 체인 작동

  3. 인덱스에서 “파이썬 리스트” 관련 문서 쿼리

  4. 프롬프트 템플릿에 문서 요약/컨텍스트 삽입

  5. LLM 추상화된 엔진이 프롬프트로 답 생성

  6. 프로세스 중 메모리가 “사용자가 이전에 ‘리스트’ 관련 질문” 있음을 기억

  7. 만약 에이전트가 필요하다고 판단하면 구체적 코드를 검색 툴에서 불러오기도 함.



그림(간단 다이어그램)


                입력(질문)
                    │
                  [에이전트]
                    │
            ┌──>[체인]─────┐
            │     │       │
            │     ▼       │
            │  [프롬프트] │
            │     │       │
            │     ▼       │
           [인덱스]<────[메모리]
            │      ↑      │
            │      │      │
           ▼       │      │
    [LLM 추상화: OpenAI, Ollama 등]
            │
           답변(출력)



핵심 연결 요약


  • LLM 추상화가 LLM 호출을 통합으로 책임짐

  • 프롬프트는 입력과 문서 등 다양한 요소를 한데 모아 LLM을 위한 '질문지' 역할

  • 체인은 이 모든 과정을 하나의 파이프라인/워크플로우로 연결

  • 인덱스는 외부 문서·DB를 검색, LLM에 '외부 지식' 제공

  • 메모리는 대화 또는 작업 과정의 맥락을 지속적으로 저장·공유

  • 에이전트는 이 전체 흐름에서 “다음엔 뭘 해야 하는가?”를 LLM 관점에서 판단, 트리거/툴 연결/순서제어를 수행



4. 사용 예시


1) 간단 체인

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate
from langchain.chains import LLMChain

llm = OpenAI(api_key="...")

prompt = PromptTemplate(
    input_variables=["topic"],
    template="Write a short story about {topic}"
)
chain = LLMChain(llm=llm, prompt=prompt)
result = chain.run(topic="a robot learning piano")
print(result)



2) 에이전트 예시


  • 계산기, 검색 등 여러 툴을 조합한 자동화 에이전트 예시

  • LLM이 "검색이 필요해"라고 판단하면 외부 툴을 자동 호출

from langchain.agents import initialize_agent, load_tools
from langchain.llms import OpenAI

llm = OpenAI(...)
tools = load_tools(["serpapi", "llm-math"], llm=llm)
agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True)
agent.run("서울의 현재 기온에 7을 곱하면 얼마야?")



5. LangChain 구조(아키텍처) 한눈에 보기


[User]
   |
[LangChain Framework]
   |
├──── [Chains] : 여러 LLM, 프롬프트, 도구를 파이프라인처럼 연결
│
├──── [Agents] : LLM+툴/외부API, 필요한 기능을 LLM이 선택해 수행
│
├──── [Data Loaders] : 웹, PDF, DB 등 다양한 데이터를 로딩
│
├──── [VectorStore] : 임베딩 기반 검색/유사 텍스트 추출
│
├──── [LLM Wrappers] : OpenAI, Ollama 등 다양한 LLM 연결 및 래핑
│
└──── [Prompt Management] : 프롬프트 템플릿, 관리, 변수 치환 등



6. 용도와 장점


  • GPT 챗봇, 지식/문서 Q&A, 대화형 에이전트, 자동화 서비스, 검색형 요약 등 복잡한 AI기능을 쉽고 빠르게 개발

  • 워크플로우 파이프라인화 → 코드의 가독성, 재사용성, 유지보수성 상승

  • 다양한 AI 도구/API/DB와의 연결 지원

  • 오픈소스 커뮤니티의 빠른 성장과 다양한 예제, 레퍼런스 제공



profile
https://velog.io/@corone_hi/posts

0개의 댓글