요즘 인공지능 분야에서 에이전틱 RAG(Agentic Retrieval-Augmented Generation)가 핫해. 기존의 RAG 방식에 에이전트 개념을 넣어서, 더 유연하고 정확한 정보 검색과 응답 생성이 가능하다. 이번 블로그에서는 에이전틱 RAG가 뭔지부터 어떻게 구현하는지 이론을 써보았다.
에이전틱 RAG는 대형 언어 모델(LLM)과 다양한 도구(Tools)를 결합해서 사용자의 질문에 최적의 답변을 생성하는 방법. 기존 RAG는 주로 문서 검색에 의존했지만, 에이전틱 RAG는 필요에 따라 인터넷 검색, 코드 실행, 커스텀 도구 등을 활용해서 더 풍부한 응답을 제공한다.
| 단계 | 설명 |
|---|---|
| 질문 | 사용자가 “삼성전자가 새로 개발한 AI의 이름이 뭐야?“와 같은 질문 |
| RunnablePassthrough() | 입력된 질문을 Retrieve와 Question 두 경로로 전달 |
| Retrieve | - DB에 접근하여 질문과 관련된 정보를 검색 - 검색된 결과를 “Chunk” |
| 검색 결과 | - 검색된 정보(Chunk)를 사용하여 응답을 구성 |
| 응답 생성 | - 주어진 정보를 바탕으로 두 가지 응답 방식 제공 - 문서(Context): 문서에 기반한 응답 - 질문(Question): 질문을 직접적으로 포함한 응답 포함한 응답 포함한 응답 |
에이전틱 RAG에서는 프롬프트(prompt)가 정말 중요.
프롬프트를 통해 에이전트가 어떤 도구를 언제 사용해야 하는지, 각 단계에서 어떤 작업을 해야 하는지를 명시해준다.
1. LLM과 도구들의 결합: LLM은 웹 검색, 문서 검색, 코드 실행 등 다양한 도구와 함께 작동.
2. 생각 - 행동 - 관찰 루프:
3. 로그 기록: 각 단계별 결과를 기록해서 나중에 참고 가능.
4. 최종 응답 생성: 반복 과정을 통해 최종 답변을 만든다.
에이전틱 RAG에서는 함수 호출을 통해 도구들을 효율적으로 활용한다. 함수의 스키마(schema)를 LLM에 전달해서, 코드 자체를 노출하지 않고도 입출력을 관리가 가능하다.
from langchain.tools.retriever import create_retriever_tool
retriever_tool = create_retriever_tool(
retriever,
name="문서 검색 도구",
description="PDF 문서에서 정보를 검색합니다." # 상세한 function의 설명
)
에이전틱 RAG에서는 함수 호출 스키마를 활용해서 도구들과의 상호작용을 정의한다. 진행 방식은 다음과 같다.
| 단계 | 설명 | |
|---|---|---|
| Content | 메시지의 실제 내용이 저장되는 부분 | |
| additional_kwargs | 추가 매개변수들이 포함된 섹션 - tool_calls와 같은 구체적인 호출 정보들이 포함 | |
| tool-calls | 특정 도구(tool)를 호출한 기록이 들어가는 부분 | |
| response_metadata | 응답에 대한 메타데이터 정보 |
에이전틱 RAG에서 프롬프트는 에이전트의 행동을 결정짓는 중요한 요소이다.
1. 단계별 프로세스 명시: 에이전트가 따라야 할 과정을 순서대로 상세히 쓴다.
2. 도구의 이름과 설명 상세화: 사용할 도구의 이름과 설명을 구체적으로 적는다..
3. 반복 처리 지침 제공: 원하는 결과가 나올 때까지 몇 번 반복할지 등의 조건을 명시한다.
예시 :
너는 질문에 답변하는 어시스턴트야. 제공된 컨텍스트를 기반으로 사용자의 질문에 답변해줘.
아래 지침을 단계별로 따라야 해:
1. '<문서 검색 도구>'를 사용해서 PDF 문서에서 정보를 검색해.
2. '<관련성 검사 도구>'를 사용해서 사용자의 질문과 검색된 컨텍스트 사이의 관련성을 확인해.
3. '<관련성 검사 도구>'의 결과가 **'no'**라면, 새로운 쿼리를 만들어서 '<문서 검색 도구>'를 다시 사용해.
4. 응답에 반드시 '<관련성 검사 도구>'의 호출을 포함해야 해.
유의사항:
- '<관련성 검사 도구>'의 결과가 **'no'**라면, 최대 20번까지 이 과정을 반복할 수 있어.
에이전틱 RAG는 LLM과 다양한 도구들을 유기적으로 결합해서 사용자에게 최적의 답변을 제공한다. 이렇게 하면 기존 RAG 방식에서 발생하는 한계를 극복하고, 더 정확하고 풍부한 정보를 받는 것이 가능하다. 프롬프트의 중요성을 알고, 에이전트의 행동을 세밀하게 설계해서 더 효과적인 응답 시스템을 만들 수 있다.
Agentic RAG는 다양한 도구들을 조합하여 더 효율적인 정보 검색과 응답 생성을 가능하게 한다.
1. 검색 단계: 사용자의 질문에 따라 문서를 검색.
2. 관련성 검사: 검색된 내용이 사용자 질문과 관련이 있는지 확인.
3. 관련성이 낮을 경우:
- 새로운 쿼리를 만들어서 검색 방향을 바꿈.
- 컨텍스트 압축 도구를 사용해서 검색 결과를 최적화.
4. 최종 응답 생성: 반복 과정을 통해 최적의 응답을 생성.
에이전틱 RAG는 LLM과 다양한 도구들을 유기적으로 결합하여 사용자에게 최적의 답변을 제공한다.
이렇게 하면 기존 RAG 방식에서 발생하는 한계를 극복하고, 더 정확하고 풍부한 정보를 줄수 있다.
프롬프트의 중요성을 알고, 에이전트의 행동을 세밀하게 설계해서 더 효과적인 응답 시스템을 만들 수 있다.