대화 맥락 유지하는 법
현재 대부분의 AI 에이전트에게는 치명적인 약점이 하나 있습니다.
세션이 리셋되면 이전 대화를 통째로 잊어버린다는 것입니다.
어제 "이 프로젝트는 A 방식으로 가자"고 합의했는데, 오늘 다시 물으면 모르는 척합니다.
매번 처음부터 맥락을 설명해야 하는 상황이 반복됩니다.
그렇다면 AI에게 기억을 심어줄 수는 없을까요?
방법이 있습니다. 핵심은 "AI가 필요할 때 과거 정보를 검색할 수 있게 만드는 것"입니다.
대화 기록, 결정 사항, 업무 문서를 AI가 읽을 수 있는 형태로 정리해두고, 질문이 들어올 때 관련 내용을 자동으로 찾아서 참고하게 하는 것이죠. 이 방식을 RAG(Retrieval-Augmented Generation)라고 합니다.
< 지난 일주일의 대화 요약 >
저는 RAGFlow라는 오픈소스 도구(무료)로 이 구조를 만들었습니다. AI 봇의 대화 기록과 결정 사항을 동기화해두니, 몇 주 전의 사소한 대화 내용까지 찾아낼 수 있게 되었습니다. 이번 글에서는 AI에게 기억을 주입하는 방법을 중심으로, RAGFlow의 작동 원리와 실제 활용법을 소개하겠습니다.
RAGFlow는 InfiniFlow 팀이 만든 오픈소스 RAG 엔진입니다.
RAG는 Retrieval-Augmented Generation의 약자인데요,
쉽게 말해 "검색해서 찾은 내용을 바탕으로 AI가 답변을 생성하는" 방식입니다.
ChatGPT나 Claude 같은 AI는 학습된 일반 지식으로만 답합니다. 지난주 회의에서 어떤 결정을 했는지, 프로젝트 진행 상황이 어떤지는 당연히 모릅니다. RAGFlow는 이 간극을 메워줍니다. 대화 기록이나 메모를 올려두면, 질문할 때 관련 내용을 먼저 찾아서 AI에게 함께 전달하고, AI가 그 맥락을 참고해서 답변을 만들어줍니다.
GitHub에서 39,000개 이상의 스타를 받은 프로젝트이고, 2025년 11월에는 노션, Confluence, Google Drive, AWS S3 등 다양한 데이터 소스와의 자동 동기화 기능이 추가되었습니다.
github link : https://github.com/infiniflow/ragflow
RAGFlow의 내부 동작은 크게 세 단계로 나뉩니다.
첫 번째는 문서 파싱(Parser)입니다.
PDF, Word, 노션 페이지, 마크다운 등 다양한 형식의 문서를 업로드하면, RAGFlow가 문서의 레이아웃을 분석합니다. 단순히 텍스트만 추출하는 게 아니라, 표인지 제목인지 본문인지를 구분합니다. 표 안의 데이터를 일반 문장처럼 잘라버리면 나중에 검색할 때 엉뚱한 결과가 나오기 때문입니다.
두 번째는 청킹과 벡터화(Transformer)입니다.
파싱된 문서를 의미 단위로 잘게 나누는데, 이것을 "청킹"이라고 합니다. 각 조각에는 키워드가 추출되고, 벡터 임베딩이 생성됩니다. 벡터 임베딩이란 텍스트의 의미를 숫자 배열로 변환한 것입니다. "가입자 분류 기준"이라는 문장과 "유저 세그먼트 구분"이라는 문장이 비슷한 의미라는 것을, 이 숫자 배열의 거리로 판단할 수 있게 됩니다.
세 번째는 검색과 답변 생성입니다.
질문이 들어오면 벡터 검색(의미 유사도)과 BM25(키워드 매칭)를 동시에 수행합니다. 이 하이브리드 검색 덕분에, "가입자 미가입자 분류"라고 물어도 "유저 세그먼테이션 기준"이라고 적힌 문서까지 찾아냅니다. 검색된 문서 조각들은 관련도 순으로 재정렬된 뒤, LLM에게 전달되어 최종 답변이 만들어집니다.
구체적으로 어떻게 기억을 심어줄까요? AI 봇과의 대화에서 중요한 내용이 나오면, 이를 기억 파일(MEMORY.md)과 일일 기록 파일에 자동으로 저장합니다.
예를 들어 대화 중에 "방금 대화를 기록해줘"라고 말하면, AI가 memory.md 파일에 내용을 저장하는 식입니다. 이런 규칙은 스킬 파일에 "대화를 기억해달라는 요청이 오면 memory.md에 작성한다"는 한 줄만 넣어두면 됩니다.
<방금 대화를 기록해줘_ 기억 심기 >
<이 프로젝트 언제 작성했지? _ 기억 추출하기 >
그리고 이 기억 파일들을 RAGFlow의 데이터셋에 동기화해둡니다. 그러면 "지난주에 그 프로젝트 관련해서 뭐라고 했었지?" 같은 질문에도 답할 수 있게 됩니다. 단순히 최근 대화 몇 줄을 기억하는 수준이 아니라, 몇 주 전의 결정 사항이나 합의 내용까지 찾아냅니다.
기억 파일은 매일 쌓이고 수정됩니다.
RAGFlow에 한 번 올려두는 것만으로는 부족합니다. 핵심은 자동 동기화입니다.
동기화의 핵심은 증분 동기화(incremental sync)입니다. 매번 전체 문서를 다시 올리는 것이 아니라, 마지막 동기화 이후 변경된 페이지만 감지해서 업데이트하는 방식을 말합니다.
구체적인 흐름은 이렇습니다.
1. 기억 파일들을 스캔하고, 각 파일의 마지막 수정 시간을 확인합니다.
2. 이전 동기화 시점 이후에 변경된 것만 골라서, RAGFlow API를 통해 업로드합니다. 동기화 결과는 상태 파일에 기록해두어 다음 실행 때 참조합니다.
3. 이 작업은 매일 새벽 3시에 정기 실행됩니다. 혹시 실패했을 경우를 대비해, 2시간 간격으로 재시도도 자동으로 돌아갑니다.
실제로 운영해보면 대부분의 날에 "변경 n건, 정상 완료"라는 결과가 나옵니다. 그것 자체가 시스템이 조용히 잘 돌아가고 있다는 의미입니다. 새로운 대화가 기록되면 다음 동기화 때 RAGFlow에 반영되어, AI가 항상 최신 맥락을 기반으로 답변할 수 있게 됩니다.
참고로 RAGFlow 0.22.0 버전(2025년 11월)부터는 다양한 데이터 소스를 직접 연결하는 기능이 내장되어, 별도의 동기화 스크립트 없이도 설정할 수 있게 되었습니다.
< 매일 새벽 2시에 실행되는 기억 동기화 작업 >
저는 개인적으로 업무 문서의 경우 개인 노션에 작성하고 어느 정도 정리가 되면 회사의 위키(Confluence)에 내용을 옮기는 습관을 가지고 있습니다. 처음에는 수동으로 복사해서 붙여넣었지만, 문서가 30개를 넘어가면서 어떤 문서가 최신인지, 어떤 문서가 아직 옮겨지지 않았는지 추적하는 것 자체가 일이 되었습니다.
이 문제를 AI 봇에게 맡겼습니다. 먼저 노션에 "문서 매핑 페이지"를 하나 만들었습니다. 이 페이지에는 두 가지가 있습니다. 하나는 전체 문서의 카테고리별 트리 구조 다이어그램이고, 다른 하나는 각 문서의 상태를 추적하는 인라인 데이터베이스입니다. 데이터베이스에는 문서명, 카테고리, 변환 완료 여부, 마지막 수정일 같은 정보가 들어 있습니다.
< notion 에서 confluence로 변환이 완료된 페이지 >
- 변환이 완료되면 AI가 notion api를 활용해 추가 완료에 체크합니다.
< 다음날 새벽에 업데이트 될 페이지>
새벽에 업데이트 예정인 페이지 목록. 업데이트 후 추가 완료 database로 옮겨집니다.
AI 봇은 매일 새벽 2시에 이 작업을 자동으로 수행합니다.
Notion API로 대상 페이지들을 스캔하고, 지난 24시간 동안 수정된 페이지가 있는지 확인합니다.
새로운 페이지가 발견되면 매핑 데이터베이스에 행을 추가하고, 트리 구조도 업데이트합니다.
이미 등록된 페이지가 수정되었으면 "업데이트 필요" 목록에 기록합니다. 동기화가 실패할 경우를 대비해 자정부터 새벽 6시까지 2시간 간격으로 재시도하는 크론도 함께 돌아갑니다.
이것이 증분 동기화의 핵심입니다.
매번 전체를 다시 처리하는 것이 아니라, 변경된 것만 감지해서 처리합니다.
이 기억 시스템이 빛을 발하는 건, AI 봇이 과거 맥락을 자연스럽게 활용하는 순간입니다.
제 AI 봇의 최근 기억 파일을 열어보면, 2월 10일에 Notion에서 Confluence로 문서를 변환하는 방법을 여러 가지 시도한 기록이 있습니다. Wiki Markup, HTML, 마크다운을 차례로 시도했고, 각각 어떤 문제가 있었는지, 최종적으로 직접 Python 스크립트를 작성해서 해결했다는 것까지 상세히 적혀 있습니다. 며칠 후 비슷한 변환 작업이 필요했을 때, 봇은 이 기록을 참조해서 "이전에 Wiki Markup 방식이 가장 안정적이었으니 그 방식을 사용하겠습니다"라고 스스로 판단했습니다.
< 실제 활용된 2026-02-10 memory.md 일부 >
또 다른 예로, SQL 쿼리 작성을 도와주다가 배운 교훈도 기억에 남아 있습니다. 2월 11일 기록을 보면, "날짜 컬럼이 문자열 타입일 때는 IN 대신 BETWEEN을 사용하는 것이 안전하다"는 것을 실수 경험을 통해 학습하고 기록해두었습니다. 다음에 비슷한 쿼리를 작성할 때 같은 실수를 반복하지 않습니다.
< 실제 활용된 2026-02-11 memory.md의 일부 >
장기 기억에는 더 큰 그림이 담깁니다.
현재 진행 중인 프로젝트 목록, 보유한 스킬, 연결된 서비스, 기술적 주의사항 같은 것들입니다.
예를 들어 "Notion API 2025-09-03 버전에서는 데이터베이스 속성 키가 누락되므로 2022-06-28 버전을 사용해야 한다"는 기술 메모가 장기 기억에 들어 있습니다. 새 세션이 시작될 때마다 이 파일을 읽으면서, 봇은 자신이 누구이고 무엇을 할 수 있는지를 다시 파악합니다.
< 장기 기억의 일부 >
- 메모리는 제가 직접 작성하지 않습니다. 앞서 말씀드린대로 "기억해줘" 라는 키워드를 활용하여 스킬을 생성합니다.
이것이 파일 기반 기억 시스템의 힘입니다.
AI가 경험을 축적하고, 그 경험을 바탕으로 더 나은 판단을 내릴 수 있게 됩니다.
세션이 리셋되어도 기억은 남습니다.
RAGFlow는 Docker로 설치할 수 있고, 공식 데모 사이트(demo.ragflow.io)에서 먼저 체험해볼 수도 있습니다. 설치 후에는 데이터셋을 만들고, 문서를 업로드하고, 챗봇을 연결하는 세 단계입니다. 챗봇을 연결하는 방법 또한 AI에게 직접 요청 하면 됩니다.
<클로드에서 동기화에 대해 물어볼 때>
openclaw를 쓴다면 ‘직접 연동’ 해주기도 합니다.
저는 개인적으로 모든 업무에 Notion을 활용하는 편입니다. AI 관련 새로운 기능이 생기면 Notion API가 빠르게 반영되고, 다른 도구와의 연동도 편리하기 때문입니다.
다만 Notion을 기억 저장소로 활용하려면 대용량이 필요하여 유료 버전이 필요합니다.
무료로 시작하고 싶다면, Google Drive에 문서를 정리해두고 RAGFlow가 매일 새벽마다 Google Drive의 문서를 자동으로 현행화하는 방식이 가장 쉬운 출발점이 아닐까 합니다.
중요한 결정 사항, 회의 내용, 기술 메모 같은 것들을 문서로 남겨두기만 하면, RAGFlow가 알아서 검색 가능하게 만들어줍니다. 다만 RAGFlow만이 유일한 선택지는 아닙니다. Dify, AnythingLLM, LangFlow 같은 도구들도 비슷한 기능을 제공합니다.
중요한 것은 도구의 이름이 아니라, "내 문서를 AI가 검색할 수 있게 만든다"는 개념 자체입니다.
AI 에이전트와 대화할수록 "이전 맥락을 또 설명해야 하나"라는 피로감이 커집니다.
하지만 대화 기록을 파싱하고, 의미 단위로 나누고, 벡터화해서 검색 가능하게 만들면 이 문제가 해결됩니다.
기억을 만들고, 자동 동기화로 항상 최신 상태를 유지하는 것.
그래서 AI가 "지난주에 뭐라고 했었지?"라는 질문에도 답할 수 있게 만드는 것.
이것이 AI에게 기억을 주입하는 핵심입니다.
RAGFlow 공식 사이트 - https://ragflow.io/
RAGFlow GitHub 저장소 - https://github.com/infiniflow/ragflow
RAGFlow 0.22.0 릴리즈 노트 (데이터 소스 동기화) - https://ragflow.io/blog/ragflow-0.22.0-data-source-synchronization-enhanced-parser-agent-optimization-and-admin-ui
RAGFlow 데이터 파이프라인 상세 - https://ragflow.io/blog/is-data-processing-like-building-with-lego-here-is-a-detailed-explanation-of-the-ingestion-pipeline