생성형 AI의 핵심 기술: RAG, LangChain, Agents란 무엇인가?

하영·2025년 2월 14일
1

etc.

목록 보기
22/26

📝 Agents(에이전트)란?

생성형 AI 에이전트(Generative AI Agent)는 사용자의 요청을 처리하기 위해 외부 도구(API, DB, 검색엔진 등)와 상호작용하며 목표를 달성하는 AI 시스템이다.

단순한 언어 모델과 달리, 에이전트는 정보를 검색하고, 연산을 수행하며, 여러 단계를 거쳐 최적의 답변을 생성하는 기능을 포함한다.


인지 아키텍처 (Cognitive Architecture) 핵심 요소

에이전트 작동방식을 이해하려면 인지 아키텍처 개념을 이해해야한다.

  1. The Model : 에이전트의 의사 결정을 담당하는 핵심 요소

    • 에이전트가 사용하는 언어 모델은 LLM (대규모 언어 모델)을 활용한다.
    • 단순 모델부터 멀티모달 모델까지 다양한 유형 활용 가능
    • 사용자 지침 기반 추론 및 논리 프레임워크 (ex. ReAct, Chain-of-Thought, Tree-of-Thoughs)를 따를 수 있다.
  2. The Tools : 외부 세계와 상호작용 할 수 있도록 지원하는 API 및 시스템

    • GET, POST, PATCH, DELETE 등 웹 API 호출 가능
    • 데이터베이스 검색, 실시간 정보 접근 등 다양한 형태로 존재한다.
  3. The Orchestration Layer : 데이터를 수집하고, 분석한 후 다음 실행 단계를 결정하는 과정을 관리하는 핵심 요소

    • 간단한 계산에서부터 복잡한 머신러닝 알고리즘까지 포함할 수 있다.
    • ex) 사용자가 항공권 예약할 때 출발지를 입력하지 않으면 추가 질문을 하는 과정

에이전트(Agent) vs 모델(Model) 차이점


에이전트 인지구조 작동 방식

에이전트(Agent)는 마치 요리사가 복잡한 요리를 준비하는 과정과 유사하게 작동한다.

에이전트 시스템 = 요리사 / 주어진 요리를 달성하기 위해 정보를 수집하고, 계획을 세우고, 행동을 실행하는 전체적인 과정을 담당한다.

Step 1. 정보 수집

  • 요리사(에이전트 시스템)는 고객 주문과 식재료 정보를 수집하고, 에이전트는 사용자 쿼리를 입력받거나 외부 데이터를 조회한다.

Step 2. 내부 추론

  • 요리사(에이전트 시스템)는 수집된 정보를 바탕으로 어떤 요리를 만들지 결정하고, 에이전트(Agent)는 모델을 활용하여 다음 행동을 결정

Step 3. 행동 실행

  • 요리사(에이전트 시스템)는 재료를 손질하고 요리를 만들며, 에이전트(Agent)는 도구를 사용하여 외부 시스템과 상호작용

Step 4. 피드백 및 조정

  • 요리사(에이전트 시스템)가 요리 중간에 맛을 보고, 부족한 부분을 추가하거나 요리 순서를 변경하는 행위는 에이전트(Agent)의 오케스트레이션 레이어에서 이전 결과에 기반하여 다음 행동을 조정하는 것

에이전트는 오케스트레이션 레이어에서 메모리, 상태, 추론, 계획을 관리하며, 프롬프트 엔지니어링 기술을 활용하여 더 효율적으로 작업을 수행한다.

대표적인 추론 프레임워크

  1. ReAct
  • 모델이 추론과 행동을 번갈아 수행하도록 하는 프롬프트 엔지니어링 프레임워크
  • 복잡한 문제 해결 능력을 향상시키고 인간과의 상호작용을 개선한다.
  1. Chain-of-Thought (CoT)
  • 중간 단계를 거쳐 추론 능력을 향상시키는 프롬프트 엔지니어링 프레임워크
  • 다양한 하위 기술(예: self-consistency, active-prompt, multimodal CoT)이 있으며, 응용 분야에 따라 장단점이 있다.
  1. Tree-of-Thoughts (ToT)
  • 탐색이나 전략적 예측에 적합한 프롬프트 엔지니어링 프레임워크
  • 다양한 사고 흐름을 탐색하여 문제 해결 능력을 향상시킨다.

에이전트의 도구

에이전트가 언어 모델과 외부 시스템/데이터 사이의 연결 고리 역할을 하며 형태는 아래와 같다.

🔍 Extensions

  • API와 에이전트를 연결하는 표준화 된 인터페이스
  • 에이전트(Agent)가 외부 API와 직접 상호 작용할 수 있도록 함
  • ex. Google Flights API 를 활용한 항공권 검색


  1. 에이전트에게 API 엔드포인트 사용 방법을 교육한다.
  2. 에이전트에게 성공적으로 호출하는데 필요한 API의 엔드포인트, 매개변수, 응답 형식을 정의한다.
  3. 에이전트가 API를 호출할 수 있도록 확장 코드를 구현한다. 이 코드는 API 호출에 필요한 인증, 매개변수 설정, 응답 처리 등을 담당한다.
  4. 에이전트가 확장을 언제, 어떻게 사용해야하는지 알 수 있도록 명확한 예시를 제공한다.
    ex. “사용자가 항공편을 검색할 때 get_flights API 를 호출해야한다.”

🔍 Functions

  • Model이 특정 작업을 수행할 수 있도록 하는 코드 모듈
  • 함수는 클라이언트 측에서 실행되며 API 호출을 직접 수행하지 않음
  • ex. 모델이 생성한 텍스트 정보를 JSON 형식으로 변환하는 함수 사용하기

🤔 언제 사용할까?

  • API 호출이 에이전트 아키텍처 흐름 외부에 필요한 경우
  • 보안/인증 제약으로 에이전트가 직접 호출할 수 없는 경우
  • API 호출 타이밍 또는 순서 제어가 필요한 경우
  • API 응답에 추가적인 데이터 변환 로직이 필요한 경우

✏️ 함수 호출 수명 주기 시퀀스 다이어그램

  1. 수행하고자 하는 작업을 명확히 정의한다.
  2. JavaScript, Python 등 원하는 프로그래밍 언어로 함수 구현한다.
  3. 함수 이름, 매개변수, 반환값 등을 정의하여 에이전트가 언제 어떻게 함수를 사용해야할지 알 수 있도록 만든다.
  4. 정의된 함수를 에이전트가 사용할 수 있도록 도구로 등록한다.

🔍 Data Stores

  • Model 이 학습 데이터 외에 추가적인 정보에 접근할 수 있도록 해준다.
  • PDF, CSV, 데이터베이스 등의 외부 데이터와 연결하여 최신 정보를 반영 가능
  • 검색 증강 생성(RAG) 기반 애플리케이션 구현 가능

✏️ ReAct 추론/계획을 갖춘 RAG 기반 애플리케이션 샘플

요약

  • 에이전트는 언어 모델을 확장하여 외부 세계와 상호작용 할 수 있는 자율적 시스템
  • 인지 아키텍처는 에이전트가 데이터를 수집하고, 분석하고, 실행하는 과정을 정의한다.
  • Extensions, Functions, Data Stores 도구를 활용하면 정교한 에이전트를 구축할 수 있다.
  • LangChain과 같은 프레임워크를 활용하면 쉽게 에이전트를 구현할 수 있다.

📚 참고자료


📝 RAG 란?

  • Retrieval Augmented Generation(RAG)은 대규모 언어 모델, 즉 LLM(Large Language Models)의 한계를 해결하기 위한 효과적인 방법이다.
  • RAG는 단순한 키워드 검색이 아니라, 벡터 검색(Vector Search) 기반의 정보 검색 방식을 사용한다. 이를 위해, 문서 데이터를 벡터 형태로 변환하고, LLM이 사용자 질문과 의미적으로 유사한 정보를 찾도록 돕는다.
  • 특히 RAG는 지속적으로 변화하고 업데이트 되는 정보가 필요한 분야나 특정한 응용프로그램에서 큰 장점을 가진다. 특정 작업이나 응용 프로그램에 맞춰 LLM을 재교육 시킬 필요가 없다는 것이 장점이다.

RAG Frame-work

  1. RAG는 입력을 받아 해당하는 출처에서 관련 문서를 찾는다.

  2. 입력한 원래의 프롬프트와 이 문서들은 함께 컨텍스트로 연결되어, 텍스트 생성기를 통해 결과물을 만들어낸다.

    → 이 과정을 통해 RAG는 변화하는 정보에도 적응 가능함!

  3. RAG 로 인해 언어 모델은 다시 학습할 필요 없이 검색 기반 생성을 통해 최신 정보에 기반한 신뢰성 있는 결과물을 만들어 낸다.


RAG 패러다임

RAG 시스템은 Naive RAG에서 Advanced RAG, Modular RAG로 발전해왔으며, 이런 발전은 성능과 비용, 효율성과 관련된 특정 제한 사항을 해결하기 위함이다.


📚 참고자료


📝 LangChain 이란?

LangChain은 대규모 언어 모델(LLM)을 기반으로 애플리케이션을 구축하기 위한 오픈 소스 프레임워크이다. LangChain을 통해 개발자는 LLM과 다양한 데이터 소스를 통합하여 복잡한 작업 흐름을 단순화하고, 맞춤형 애플리케이션을 효율적으로 개발할 수 있다.

LLM이 가지고 있는 한계점을 해결하기 위해 LangChain이 만들어졌다.


LangChain 의 주요 기능

LangChain은 프론트엔드 개발자가 LLM을 쉽게 활용할 수 있도록 여러 기능을 제공한다.

1. 체인(Chains)

: LangChain의 핵심 개념으로, 여러 단계를 자동으로 연결하여 복잡한 AI 작업을 쉽게 처리함

ex) 사용자가 질문함 → AI 검색 → 결과 정리 후 응답 자동화

from langchain.chat_models import ChatOpenAI
from langchain.chains import LLMChain
from langchain.prompts import PromptTemplate

# OpenAI API 설정
api_key = "your-api-key"
llm = ChatOpenAI(openai_api_key=api_key)

# 프롬프트 템플릿 설정
prompt = PromptTemplate.from_template("안녕하세요! {question}에 대해 알려드릴게요.")
chain = LLMChain(llm=llm, prompt=prompt)

# 질문 실행
response = chain.run("LangChain이 무엇인가요?")
print(response)

2. 에이전트 (Agent)

: LLM이 직접 어떤 행동을 할지 결정하도록 만든다.

에이전트는 LLM을 더 효율적이게 사용할 수 있도록 도와주는 역할을 한다.

ex) 1. 구글 검색이 필요하다. 2. DB에서 정보를 가져오면 되겠다. 같은 선택지에서 AI가 결정을 하도록 함

from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent, AgentType
from langchain.tools import Tool

# OpenAI API 설정
api_key = "your-api-key"
llm = ChatOpenAI(openai_api_key=api_key)

# 에이전트 설정
agent = initialize_agent(
    tools=[],  # 사용할 도구 추가 가능
    llm=llm,
    agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION
)

# 실행
response = agent.run("LangChain이란?")
print(response)

3. RAG

: AI가 최신 데이터를 검색하여 답변하도록 하는 기술

LangChain은 AI가 DB, 검색 엔진, 문서에서 정보를 가져와 최신 정보를 반영하도록 도와준다.

from langchain.vectorstores import FAISS
from langchain.embeddings import OpenAIEmbeddings
from langchain.chat_models import ChatOpenAI

# AI Embedding 설정
embeddings = OpenAIEmbeddings()

# 검색 가능한 데이터 저장
vectorstore = FAISS.load_local("my_data", embeddings)

# LLM과 연결
llm = ChatOpenAI()
retriever = vectorstore.as_retriever()

# 사용자 질문 처리
query = "최근 AI 트렌드는?"
retrieved_docs = retriever.get_relevant_documents(query)
response = llm.predict(retrieved_docs)
print(response)

4. LangGraph (고급 워크플로우)

AI가 여러 단계의 복잡한 흐름을 처리할 수 있도록 도와줌

ex) 문서 요약 → 관련 질문 생성 → 번역 작업

from langchain.chains import SequentialChain

# 여러 개의 LangChain 작업을 순차적으로 연결
workflow = SequentialChain(
    chains=[chain_1, chain_2, chain_3],  # 각각 요약, 질문 생성, 번역 담당
    input_variables=["text"]
)

LangChain의 장점과 단점

장점 👍

  • 다양한 언어 모델과 쉽게 통합할 수 있으며, 이를 통해 복잡하고 다양한 애플리케이션을 구축할 수 있다.
  • 프롬프팅, 컨텍스트 관리, 파인튜닝 등 다양한 기능을 제공하여 사용자가 필요에 따라 애플리케이션의 동작을 세밀하게 조정할 수 있다.
  • LangChain은 여러 언어 모델과의 통합이 가능하여, 다양한 사용 사례에 맞춘 애플리케이션을 쉽게 구축할 수 있다.

단점 👎

  • LangChain은 매우 복잡한 애플리케이션을 구축할 때 성능 저하가 발생할 수 있다. (대규모 데이터 소스를 처리하거나 실시간 응답을 요구하는 애플리케이션의 경우, 성능 최적화 필요할 수 있음)
  • 다양한 기능과 옵션을 활용하기 위해서는 일정한 학습 시간이 필요하며, 이를 효과적으로 사용하기 위해서는 깊이 있는 이해가 요구되어 학습곡선이 있는 편임
  • LangChain은 특정 사용 사례에 적합하도록 설계되었지만, 모든 상황에 완벽하게 맞는 것은 아님

LangChain과 RAG 차이점

LangChain은 LLM 애플리케이션을 쉽게 구축할 수 있도록 지원하는 프레임워크로, RAG를 포함하여 다양한 기능을 제공한다.

반면, RAG는 LLM의 한계를 극복하기 위한 검색 기반 기술로, LangChain 없이도 독립적으로 구현할 수 있다.

👩🏻‍💻 쉽게 정리하자면!

  • LangChain = LLM을 활용한 앱을 쉽게 만드는 도구 (레고 블록 같은 역할)

  • RAG = LLM이 최신 정보를 반영할 수 있도록 돕는 검색 기술

    : LangChain을 활용하면 RAG 시스템을 쉽게 구축할 수 있다!


📚 참고자료

profile
왕쪼랩 탈출 목표자의 코딩 공부기록

0개의 댓글