
AI 에이전트의 지식 베이스를 자기 업데이트(Self-updating)시키는 설계
요약
AI 에이전트의 지식 베이스를 최신 상태로 유지하기 위한 자기 업데이트(Self-updating) 설계 패턴을 다룹니다. 외부 정보를 가져오는 pull 방식과 작업 중 배움을 기록하는 push 방식을 분리하여 지식의 신선도와 입도를 관리하는 방법을 제안합니다.
핵심 포인트
- 지식 업데이트를 외부 소스 기반의 pull과 작업 경험 기반의 push로 이원화
- 에이전트 로직(코드)과 지식(텍스트)을 분리하여 유지보수성 확보
- 로컬 인덱스를 재생성 가능한 파생물로 취급하여 데이터 안정성 강화
- 메타데이터를 활용해 지식의 신뢰도를 관리하고 환각 현상 방지
서론
AI 에이전트에 RAG (Retrieval-Augmented Generation)를 추가하면, 처음에는 '고유한 문맥을 기억하는' 것처럼 보입니다. 하지만 지식 베이스(Knowledge Base)가 업데이트되지 않은 채로 두면, 몇 주 후에는 오래된 전제를 자신만만하게 답변하게 됩니다. 문제는 검색 정밀도뿐만 아니라, 지식이 어떻게 늘어나고 어떻게 노후화되는지를 설계하지 않았다는 점입니다.
최근 용도가 다른 에이전트들을 연달아 만들면서, 두 경우 모두 동일한 설계로 수렴했습니다. 원본 텍스트(Source Text)를 보유하고, 로컬 vector index는 다시 만들 수 있는 것으로 취급하며, 에이전트 본체는 지식 업데이트 시마다 건드리지 않는 형태입니다.
이 기사에서는 Raw와 Index를 분리하는 일반론이 아니라, 에이전트의 지식 베이스를 '자기 업데이트(Self-updating)'시키기 위한 패턴에만 집중합니다.
업데이트 경로를 pull과 push로 나누기
지식 업데이트는 하나의 경로로 통합하지 않는 것이 다루기 쉽습니다. 외부에서 들어오는 정보와 작업 중에 얻은 배움은 신선도와 입도(Granularity)가 다르기 때문입니다.
[외부 소스] -- pull --> [원본 텍스트] -- rebuild --> [local vector index]
^
|
...
pull 타입은 외부 소스를 정기적으로 확인하는 업데이트입니다. 사양, 문서, 공개 지식 등을 차분(Difference)으로 가져와 원본 텍스트에 반영한 뒤 index를 다시 만듭니다. 여기서 중요한 것은 외부 정보를 직접 RAG의 답변으로 사용하는 것이 아니라, 일단 인간이 읽을 수 있는 텍스트로 떨어뜨리는 것입니다.
push 타입은 에이전트나 인간이 작업 중에 얻은 배움을 그 자리에서 다시 쓰는 업데이트입니다. 예를 들어 "이 조건에서는 멈춘다", "이 종류의 의뢰는 먼저 확인한다", "이 판단은 위험하다"와 같은 운용 지식을 짧은 노트로서 원본에 추가합니다.
pull만 있다면 자신들의 실수나 판단이 남지 않습니다. push만 있다면 외부의 변화에 뒤처집니다. 두 계통을 가짐으로써 지식 베이스는 '외부의 변화'와 '내부의 배움' 모두를 통해 성장합니다.
본체 코드가 아닌 텍스트를 업데이트하기
자기 업데이트를 안정시키려면 지식과 로직을 섞지 않는 것이 중요합니다. 에이전트 본체는 검색하고, 근거를 읽고, 판단하는 역할만 수행하게 합니다. 지식을 늘릴 때마다 프롬프트(Prompt)나 코드를 편집하기 시작하면, 어디서 동작이 변했는지 추적하기 어려워집니다.
업데이트의 단위는 어디까지나 텍스트입니다.
1. 원본 텍스트를 추가/수정한다
2. 로컬의 SQLite / sqlite-vec index를 재생성한다
3. 다음 RAG에서 새로운 지식이 인출된다
이 형태라면 지식 업데이트는 "텍스트를 추가한다 -> 재인덱싱(Re-indexing)"으로 완결됩니다. 에이전트 본체는 동일한 검색 인터페이스를 계속 사용할 뿐이므로, 지식이 늘어나도 코드 변경은 불필요합니다.
로컬 index는 망가져도 다시 만들 수 있는 파생물로 취급합니다. SQLite와 sqlite-vec 같은 가벼운 구성이라면 작은 팀이나 개인 용도로 충분히 다루기 쉬우며, 과금이나 외부 서비스의 상태에 휘둘리지 않습니다. 여기서의 주인공은 vector DB가 아니라, 재생성 가능한 index와 소실되지 않는 원본 텍스트 사이의 경계입니다.
신뢰도 메타데이터로 아는 척하는 것을 방지하기
RAG의 실패는 검색 결과가 빗나가는 것만이 아닙니다. 더 위험한 것은 약한 근거를 강한 근거처럼 다루는 것입니다. 이는 검색 스코어뿐만 아니라, 지식 측에 메타데이터(Metadata)를 갖게 함으로써 억제할 수 있습니다.
예를 들어 각 노트에 다음과 같은 최소 메타데이터를 둡니다.
---
kind: pattern
source: observed | external | assumption
...
confidence: low인 지식이 상위에 올라오면, 에이전트는 단정 짓지 않고 확인하는 방향으로 행동합니다. risk_level: high인 지식을 인출하면, 자율 실행하지 않고 승인을 요청합니다. source: assumption인 노트는 사실이 아닌 가설로서 취급합니다.
즉, RAG의 '아는 척하기'를 프롬프트만으로 억제하는 것이 아니라, 지식 베이스의 구조로 막습니다. 검색에 히트되었는지 여부뿐만 아니라, "그것을 얼마나 믿어도 되는가"까지 함께 반환하는 설계로 해두면, 에이전트는 불확실한 상황에서 멈추기 쉬워집니다.
요약
- 지식 업데이트는 pull 타입과 push 타입으로 나눈다
- 업데이트는 "원본 텍스트를 추가한다 -> 재인덱싱한다"로 한정한다
- 에이전트 본체는 RAG로 인출만 하도록 하여, 지식 업데이트 시 코드를 건드리지 않는다
confidence나risk_level...
를 지식 측에 부여하여, 신뢰도가 낮거나 리스크가 높은 경우에는 중단합니다 - 로컬 벡터 인덱스 (local vector index)는 원본이 아니라, 다시 만들 수 있는 파생물로 취급합니다.
AI 에이전트의 지식 베이스 (knowledge base)는 한 번 만들고 끝나는 것이 아니라, 운용 중에 성장하는 것입니다. 자기 업데이트 (self-updating) 설계를 미리 반영해 두면, 똑똑한 초기 프롬프트 (initial prompt)보다 더 오래 지속되는 기반이 됩니다.
Discussion

AI 자동 생성 콘텐츠
본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기