GenAI에서 RAG를 활용해 새 정보 가르치기

GenAI에서 RAG를 활용해 새 정보 가르치기

이 가이드는 RAG(Retrieval-Augmented Generation)와 Neo4j를 사용해 GenAI 스택을 설정하는 방법을 설명하고, 핵심 개념, 배포 단계, 사례 연구를 다뤄요. 실시간 데이터로 AI 성능을 최적화하는 트러블슈팅 팁도 포함돼요.

출처: 문서

본문

소개

RAG(검색 증강 생성)는 외부 지식 소스에서 정보 검색을 통합해 대규모 언어 모델(LLM)의 능력을 향상시키는 강력한 프레임워크예요. 이 가이드는 고도로 연결된 관계형 데이터를 관리하는 데 뛰어난 Neo4j 같은 그래프 데이터베이스를 사용하는 특화된 RAG 구현에 초점을 맞춰요. 벡터 데이터베이스를 사용하는 전통적인 RAG 설정과 달리 RAG를 그래프 데이터베이스와 결합하면 더 나은 컨텍스트 인식과 관계 기반 인사이트를 제공해요.

이 가이드에서 할 일:

  • RAG 프레임워크에 그래프 데이터베이스를 통합하는 이점 탐구하기
  • Neo4j와 AI 모델을 포함한 GenAI 스택을 Docker로 구성하기
  • 특화된 쿼리 처리에 이 접근법의 효과를 보여주는 실제 사례 연구 분석하기

RAG 이해하기

RAG는 정보 검색을 통합해 대규모 언어 모델의 능력을 향상시키는 하이브리드 프레임워크예요. 세 가지 핵심 구성 요소를 결합해요:

  • 외부 지식 베이스 에서의 정보 검색
  • 응답 생성용 대규모 언어 모델(LLM)
  • 의미 검색을 가능하게 하는 벡터 임베딩

RAG 시스템에서 벡터 임베딩은 텍스트의 의미를 기계가 이해하고 처리할 수 있는 방식으로 표현하는 데 사용돼요. 예를 들어 "dog"와 "puppy"라는 단어는 유사한 의미를 공유하므로 유사한 임베딩을 가져요. 이러한 임베딩을 RAG 프레임워크에 통합하면 시스템이 대규모 언어 모델의 생성 능력과 외부 소스에서 고도로 관련성 있고 컨텍스트를 아는 데이터를 가져오는 능력을 결합할 수 있어요.

시스템은 다음과 같이 동작해요:

  • 질문이 그 의미를 포착하는 수학적 패턴으로 변환됨
  • 이 패턴이 데이터베이스에서 일치하는 정보를 찾는 데 도움을 줌
  • LLM이 모델 고유의 지식과 이 추가 정보를 혼합한 응답을 생성함

이 벡터 정보를 효율적으로 보관하려면 특별한 유형의 데이터베이스가 필요해요.

그래프 데이터베이스 소개

Neo4j 같은 그래프 데이터베이스는 고도로 연결된 데이터를 관리하도록 특별히 설계됐어요. 전통적인 관계형 데이터베이스와 달리 그래프 데이터베이스는 개체와 그 사이의 관계를 모두 우선시해, 연결이 데이터 자체만큼 중요한 작업에 이상적이에요.

그래프 데이터베이스는 데이터 저장과 쿼리에 대한 독특한 접근법으로 두드러져요. 노드(또는 정점)로 개체를, 엣지로 개체 사이의 관계를 표현해요. 이 구조는 전통적인 데이터베이스 시스템에서 관리하기 어려운 고도로 연결된 데이터와 복잡한 쿼리를 효율적으로 처리할 수 있게 해줘요.

SQL 데이터베이스와 그래프 데이터베이스는 데이터 모델에서 크게 달라요. SQL 데이터베이스는 행과 열이 있는 표 구조를 사용하며, 개체 간 관계는 외래 키로 설정돼요. 이 접근법은 구조화된 데이터와 미리 정의된 관계에 잘 작동해요. 반면 그래프 데이터베이스는 데이터를 노드(개체)와 엣지(관계)로 표현해 관계 표현을 더 직관적이고 유연하게 만들어요. 이 구조는 복잡하고 상호연결된 데이터에 특히 유리해요.

또 다른 핵심 차이는 스키마 유연성이에요. SQL 데이터베이스는 고정된 스키마로 동작하므로 새 열 추가나 관계 변경 같은 데이터 구조 변경은 보통 신중한 계획과 마이그레이션 과정이 필요해요. 그러나 그래프 데이터베이스는 스키마 선택사항이라 훨씬 큰 유연성을 제공해요. 새 노드, 엣지, 속성을 기존 데이터를 방해하지 않고 도입할 수 있어 변화하는 요구사항에 더 빠르게 적응할 수 있어요.

실제 구현: RAG 효과 테스트

RAG 시스템의 힘을 실제로 보여주기 위해 Apache NiFi를 주제로 한 실제 구현을 살펴볼게요. 이 사례 연구는 RAG가 특화된 기술 주제에 대한 정확하고 맥락 있는 정보를 제공하는 AI의 능력을 어떻게 향상시키는지 보여줘요.

AI에게 새 기술 가르치기

Apache NiFi는 전통적인 LLM의 한계와 RAG가 그것을 어떻게 극복하는지 보여주는 훌륭한 예시예요. 비교적 최근의 기술이라 많은 LLM이 이에 대한 지식이 제한적이거나 오래됐어요. 그래서 RAG의 능력을 보여주는 완벽한 후보다.

RAG 없이 LLM은 컷오프 날짜 이후의 정보를 물으면 광범위한 응답을 하거나 지식이 제한적임을 인정할 수 있어요. 다음 예제가 이를 보여줘요.

질문: 2024년에 어떤 중요한 사건들이 일어났나요? RAG: 비활성화

도와드리게 되어 기쁩니다! 유감스럽게도 저는 대규모 언어 모델이라 2024년의 훈련 데이터 컷오프 이후에 발생한 실시간 정보나 사건에 접근할 수 없습니다. 따라서 2024년에 일어난 중요한 사건을 제공할 수 없습니다. 불편을 끼쳐드려 죄송합니다. 다른 도움이 필요한 것이 있나요?

Linux에서 GPU 가속으로 GenAI 스택 설정하기

Linux 호스트에서 GenAI 스택을 설정·실행하려면 GPU 또는 CPU용으로 다음 중 하나의 명령을 실행해주세요:

GPU

git clone https://github.com/docker/genai-stack
docker compose --profile linux-gpu up -d
mv env.example .env
nano .env

.env 파일에서 다음 줄들이 주석 처리되도록 하세요. 보안을 위해 내 자격 증명을 설정하세요:

NEO4J_URI=neo4j://database:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
OLLAMA_BASE_URL=http://llm-gpu:11434

CPU

git clone https://github.com/docker/genai-stack
docker compose --profile linux up -d
mv env.example .env
nano .env

.env 파일에서 다음 줄들이 주석 처리되도록 하세요. 보안을 위해 내 자격 증명을 설정하세요:

NEO4J_URI=neo4j://database:7687
NEO4J_USERNAME=neo4j
NEO4J_PASSWORD=password
OLLAMA_BASE_URL=http://llm:11434

다른 플랫폼에서 설정하기

다른 플랫폼에서 스택을 설정하는 방법은 이 페이지 를 참고하세요.

초기 시작

처음 시작은 시스템이 대규모 언어 모델을 다운로드해야 하므로 시간이 걸릴 수 있어요.

진행 상황 모니터링

로그를 보면 다운로드와 초기화 진행 상황을 모니터링할 수 있어요. 로그를 보려면 다음 명령을 실행하세요:

docker compose logs

다운로드가 완료되고 스택이 준비됐음을 나타내는 특정 줄이 로그에 나타날 때까지 기다리세요. 이 줄들은 보통 설정과 초기화가 성공했음을 확인해줘요.

pull-model-1 exited with code 0
database-1 | 2024-12-29 09:35:53.269+0000 INFO Started.
pdf_bot-1 | You can now view your Streamlit app in your browser.
loader-1 | You can now view your Streamlit app in your browser.
bot-1 | You can now view your Streamlit app in your browser.

http://localhost:8501/ 에서 인터페이스에 접근해 질문할 수 있어요. 예를 들어 샘플 질문을 시도해볼 수 있어요. 이 줄들이 로그에 나타나면 웹 앱을 사용할 준비가 된 거예요.

목표는 AI에게 아직 모르는 것을 가르치는 것이므로, http://localhost:8501/ 에서 NiFi에 대한 간단한 질문으로 시작해보세요.

질문: Apache NiFi란 무엇인가요? RAG: 비활성화

안녕하세요! Apache NiFi에 대한 질문을 도와드리겠습니다. 유감스럽게도 그 질문에 대한 답을 모릅니다. 저는 AI이고 지식 컷오프가 2022년 12월이므로 최신 기술이나 소프트웨어에 익숙하지 않을 수 있습니다. Apache NiFi에 대한 컨텍스트나 세부사항을 더 제공해주시겠어요?

보시다시피 AI는 이 주제에 대해 아무것도 모르는데, 그 이유는 이것이 훈련 기간(정보 컷오프 지점) 동안 존재하지 않았기 때문이에요.

이제 AI에게 몇 가지 새 기술을 가르칠 때예요. 먼저 http://localhost:8502/ 에 연결하세요. "neo4j" 태그 대신 "apache-nifi" 태그로 바꾼 다음 Import 버튼을 선택하세요.

가져오기가 성공하면 데이터를 검증하기 위해 Neo4j에 접근할 수 있어요.

.env 파일의 자격 증명으로 http://localhost:7474/ 에 로그인한 후 Neo4j에서 쿼리를 실행할 수 있어요. Neo4j Cypher 쿼리 언어를 사용해 데이터베이스에 저장된 데이터를 확인할 수 있어요.

데이터를 세려면 다음 쿼리를 실행하세요:

MATCH (n)
RETURN DISTINCT labels(n) AS NodeTypes, count(*) AS Count
ORDER BY Count DESC;

이 쿼리를 실행하려면 맨 위 상자에 작성하고 파란 실행 버튼을 선택하세요. 결과가 아래에 나타나요. 표시된 정보는 Stack Overflow에서 다운로드되어 그래프 데이터베이스에 저장된 것이에요. RAG는 이 정보를 사용해 응답을 향상시킬 거예요.

데이터를 시각화하려면 다음 쿼리도 실행할 수 있어요:

CALL db.schema.visualization()

데이터베이스의 관계를 확인하려면 다음 쿼리를 실행하세요:

CALL db.relationshipTypes()

이제 LLM이 이 정보를 사용하도록 활성화할 준비가 됐어요. http://localhost:8501/ 로 돌아가 RAG 체크박스를 활성화하고 같은 질문을 다시 하세요. LLM이 더 상세한 답을 제공할 거예요.

시스템은 최신 기술 문서에서 가져온 포괄적이고 정확한 정보를 전달해요.

질문: Apache NiFi란 무엇인가요? RAG: 활성화 답: Apache NiFi는 다양한 소스와 싱크에서 데이터를 수집, 변환, 전송할 수 있게 해주는 오픈소스 분산 데이터 처리 시스템입니다. 데이터 흐름을 설계·관리하기 위한 그래픽 사용자 인터페이스와 다른 시스템과 통합하기 위한 일련의 API를 제공합니다.

이 Stack Overflow 질문에 따르면 무료 Neo4J JDBC 드라이버는 SQL이 아닌 Cypher만 이해하므로 Apache Drill에서 Neo4j에 연결하려면 유료 BI Connector를 사용해야 합니다.

또한 이 Stack Overflow 질문은 Apache POI가 Neo4j User Defined Function에서 작동한다고 제안합니다. 그러나 초기 질문에서 언급된 독립형 UDF에는 알 수 없는 결함이 있을 수 있습니다.

APOC Extended 프로시저를 사용해 Neo4j에서 Excel로 데이터를 내보내려면 Cypher 쿼리를 받아 결과를 Excel 파일로 내보내는 apoc.export.xls.query 를 사용할 수 있습니다.

참고문헌:

  • How to connect and query Neo4j Database on Apache Drill?
  • Is a Neo4j UDF compatible with Apache POI?

새 질문이 Stack Overflow에 추가되고 대부분의 AI 모델에 내재된 무작위성 때문에 답이 다를 수 있고 이 예제와 정확히 같지는 않을 거라는 점을 명심하세요.

다른 Stack Overflow 태그 로 다시 시작해도 좋아요. Neo4j의 모든 데이터를 삭제하려면 Neo4j Web UI에서 다음 명령을 사용할 수 있어요:

MATCH (n)
DETACH DELETE n;

최적의 결과를 위해 LLM이 잘 모르는 태그를 선택하세요.

최적의 결과를 위해 RAG를 사용해야 할 때

RAG는 표준 LLM이 부족한 시나리오에서 특히 효과적이에요. RAG가 뛰어난 세 가지 핵심 영역은 지식 한계, 비즈니스 요구사항, 비용 효율성이에요. 다음 섹션에서 이 측면들을 자세히 살펴볼게요.

지식 한계 극복

LLM은 특정 시점까지의 고정된 데이터셋으로 훈련돼요. 즉 다음에 접근할 수 없어요:

  • 실시간 정보: LLM은 지식을 지속적으로 업데이트하지 않으므로 최근 사건, 새로 발표된 연구, 새로 나타나는 기술을 인지하지 못할 수 있어요.
  • 특화된 지식: 많은 틈새 주제, 사유 프레임워크, 산업별 모범 사례가 모델의 훈련 코퍼스에 잘 문서화되어 있지 않을 수 있어요.
  • 정확한 맥락 이해: LLM은 금융, 사이버보안, 의학 연구처럼 역동적인 분야에서 자주 변하는 뉘앙스나 진화하는 용어에 어려움을 겪을 수 있어요.

Neo4j 같은 그래프 데이터베이스와 함께 RAG를 통합하면 AI 모델이 응답을 생성하기 전에 최신이고 관련성 높으며 연결된 데이터에 접근·검색할 수 있어요. 이는 답이 추론된 근사치가 아니라 최신 상태이고 사실에 근거하도록 보장해요.

비즈니스 및 규정 준수 요구사항 해결

의료, 법률 서비스, 금융 분석 같은 산업의 조직은 AI 중심 솔루션이 다음과 같길 요구해요:

  • 정확함: 기업은 특정 도메인에 사실적이고 관련성 있는 AI 생성 콘텐츠가 필요해요.
  • 규정 준수: 많은 산업이 데이터 사용과 보안에 관한 엄격한 규정을 따라야 해요.
  • 추적 가능: 기업은 AI 응답이 감사 가능하길 요구하며, 즉 출처 자료를 참조해야 해요.

RAG를 사용하면 AI 생성 답을 신뢰할 수 있는 데이터베이스에서 가져와 더 높은 정확도와 산업 표준 준수를 보장해요. 이는 잘못된 정보나 규정 위반 같은 위험을 완화해요.

비용 효율성과 성능 향상

대규모 AI 모델을 훈련하고 미세 조정하는 것은 계산 비용이 높고 시간이 많이 걸릴 수 있어요. 그러나 RAG를 통합하면 다음을 제공해요:

  • 미세 조정 필요 감소: 새 데이터가 나타날 때마다 AI 모델을 재훈련하는 대신 RAG는 모델이 업데이트된 정보를 동적으로 가져와 통합하게 해줘요.
  • 더 작은 모델로 더 나은 성능: 올바른 검색 기법으로 컴팩트한 AI 모델도 외부 지식을 효율적으로 활용해 잘 수행할 수 있어요.
  • 낮은 운영 비용: 대규모 재훈련을 지원하는 값비싼 인프라에 투자하는 대신 RAG의 실시간 검색 능력을 활용해 리소스를 최적화할 수 있어요.

이 가이드를 따라 하면 Neo4j로 RAG를 구현하는 기초 지식을 갖추게 되어 내 AI 시스템이 더 정확하고, 관련성 있으며, 통찰력 있는 응답을 제공하게 돼요. 다음 단계는 실험이에요. 데이터셋을 선택하고 스택을 구성한 다음 검색 증강 생성의 힘으로 내 AI를 향상시키기 시작하세요.

더 알아보기 (Learn more)

  • GenAI Stack
  • Neo4j
  • RAG(검색 증강 생성)