리서치 볼트: 오픈 소스 에이전틱 AI 연구 어시스턴트

발행: (2026년 1월 9일 오전 09:55 GMT+9)
16 min read
원문: Dev.to

Source: Dev.to

위에 제공된 텍스트를 한국어로 번역해 주세요. (번역할 실제 내용이 필요합니다.)

아무도 말하지 않는 문제

나는 연구 논문에 빠져 있었어요. 은유적인 것이 아니라—50개 이상의 PDF, 수십 개의 기사, 그리고 전담 업무가 된 필기 시스템을 가지고 있었습니다.

  • 에이전트 메모리 제한에 관한 중요한 내용을 읽었지만, 어느 논문인지 잊어버려 PDF를 한 시간 동안 검색해야 했습니다.
  • 서로 상충되는 내용을 말하는 세 개의 출처를 찾았지만, 이를 체계적으로 비교할 방법이 없었습니다.

기존 도구들은 이를 해결하지 못했습니다.

  • 필기 앱은 수동적인 정리를 요구합니다.
  • NotebookLM 같은 도구는 Q&A에는 뛰어나지만, 나중에 조회할 수 있는 구조화된 패턴을 추출하지는 못합니다.
  • 전통적인 RAG 시스템은 텍스트를 청크로 나누어 검색할 뿐이며, 출처 간에 통합하지 못합니다.

The blind spot: 우리는 연구 소비를 읽기 문제로만 생각합니다. 그렇지 않습니다. 이것은 knowledge‑architecture 문제입니다.

내가 만든 것

Research Vault는 비정형 논문을 쿼리 가능한 지식 베이스로 변환하는 에이전시 AI 연구 보조 도구입니다.

  • 논문을 업로드하면 Claim → Evidence → Context 스키마를 사용해 구조화된 패턴을 추출합니다.
  • 패턴을 의미적으로 임베딩합니다.
  • 자연어로 전체 라이브러리를 넘나들며 쿼리할 수 있게 합니다.

접근 방식: 텍스트를 단순히 청크로 나누는 대신 구조화된 발견(Claim → Evidence → Context)을 추출합니다. 새로운 아이디어는 아니지만, 테스트와 오류 처리를 잘 구현한 점이 돋보입니다.

Note: 이것은 제가 개인적으로 사용하는 보다 전문화된 연구 보조 도구의 단순화된 일반 버전입니다. 복잡성을 제거하고 핵심인 구조화된 추출 + 하이브리드 검색 + 자연어 쿼리만 남겼습니다.

아키텍처 스택

레이어기술이유
오케스트레이션LangGraph 1.0사이클이 있는 상태 저장 워크플로우
LLMClaude (Anthropic)추출 + 합성
임베딩OpenAI text-embedding-3-small시맨틱 검색
벡터 DBQdrant로컬‑우선, 프로덕션 준비
백엔드FastAPI + SQLAlchemy전반적으로 비동기
프론트엔드Next.js 16 + React 19현대적이며 타입‑안전

표시되지 않음: 641개의 백엔드 테스트, 23개의 프론트엔드 테스트, 포괄적인 문서, Docker 배포, CI/CD 파이프라인.

추출 아키텍처

많은 RAG 시스템은 문서를 청크로 나눕니다. 일부는 구조화된 추출을 수행합니다. Research Vault3‑패스 파이프라인을 사용하는 구조화된 접근 방식을 따릅니다:

Pass 1: Evidence Inventory (Haiku)

  • 논문에서 구체적인 주장, 데이터, 예시를 스캔합니다.
  • 이후 모든 내용이 실제 논문 내용에 기반하도록 합니다.

Pass 2: Pattern Extraction (Sonnet)

  • [E#] 표기법을 사용하여 증거를 인용하는 패턴을 추출합니다.
  • 각 패턴은 여러 증거 항목을 인용할 수 있습니다.
  • 1:1 매핑이 아니라, 패턴은 증거들을 종합하여 생성됩니다.
  • 분류를 위해 태그를 지정합니다.

Pass 3: Verification (Haiku)

  • 인용이 정확한지 확인합니다.
  • 패턴이 논문 내용에 근거하고 있는지 검증합니다.
  • 최종 상태를 계산합니다.

왜 세 번의 패스가 필요한가?

  • 증거 앵커링은 환상을 줄여줍니다.
  • 검증 단계는 추출 오류를 잡아냅니다.
  • 구조화된 스키마는 문서 간 쿼리를 가능하게 합니다.

패턴 스키마

전통적인 RAG:

"Context window overflow causes..."

— 단순 텍스트 청크.

Research Vault 패턴:

{
    "name": "Context Overflow Collapse",
    "claim": "When context windows fill, agents compress state...",
    "evidence": "[E3] 'Performance degraded sharply after 15 reasoning steps' (Table 2)",
    "context": "Authors suggest explicit state architecture, not larger windows.",
    "tags": ["state-management", "failure-mode"],
    "paper_id": "uuid-of-paper"
}

이 구조는 다음과 같은 질의를 가능하게 합니다:

  • “저자들이 에이전트 메모리에 대해 의견이 다른 부분은 어디인가?”
  • “멀티‑에이전트 시스템 전반에 걸쳐 반복되는 패턴은 무엇인가?”
  • “도구 사용에 대해 내가 배운 것을 종합해라.”

내가 이것을 만들면서 배운 점

교훈 1: 워크플로우를 테스트하라, 구성 요소만이 아니라

  • 초기 단위 테스트는 뛰어난 커버리지를 제공했지만, 전체 파이프라인은 미묘한 방식으로 계속 깨졌습니다.
  • 해결: 외부 서비스(LLM, 임베딩, Qdrant)를 모킹한 채 전체 워크플로우를 엔드‑투‑엔드로 실행하는 통합 테스트. 실제 버그의 약 90 %를 잡아냈습니다.
  • 교훈: 오케스트레이션된 시스템에서는 구성 요소 테스트가 필수이지만 충분하지 않습니다. 실패 모드는 구성 요소 사이의 간극에서 나타납니다.

교훈 2: 코딩 전에 문서화하기

구현 코드를 한 줄도 작성하기 전에 여섯 개의 포괄적인 문서 파일을 작성했습니다:

  • REQUIREMENTS.md
  • DOMAIN_MODEL.md
  • API_SPEC.md
  • ARCHITECTURE.md
  • OPERATIONS.md
  • PLAN.md

왜 중요한가:

  • 설계 모순을 초기에 발견했습니다.
  • 구현이 명확해졌습니다(모호함이 없음).
  • 프론트엔드와 백엔드 작업을 병렬로 진행할 수 있었습니다.
  • 기여자를 위한 온보딩 경로를 만들었습니다.

교훈: 사양‑주도 개발은 느린 것이 아니라, 잘못된 것을 만들지 않기 때문에 더 빠릅니다.

교훈 3: LLM은 JSON에 대해 거짓말을 한다

이 코드베이스의 모든 LLM 응답 파서는 방어적인 파싱을 사용합니다, 예시:

# verification.py
status_str = response.get("verification_status", "pass")
try:
    status = VerificationStatus(status_str)
except ValueError:
    status = VerificationStatus.passed  # Fallback

LLM이 자주 하는 일:

  • 유효한 JSON 뒤에 주석을 추가한다(“Here are my observations…”)
  • 스키마에 없는 필드를 만들어낸다
  • 열거형 대신 문자열을 반환한다
  • 객체 중간에서 출력을 잘라낸다

해결: 방어적으로 파싱하고, 스키마에 대해 검증하며, 안전한 기본값으로 폴백합니다.

교훈 4: 로컬‑우선은 기능이다

LLM API 호출을 제외하고 완전히 로컬에서 실행하는 것은 처음에 MVP를 위한 단순화였지만, 곧 차별화 포인트가 되었습니다.

사용자가 원하는 것

  • 연구 데이터에 대한 클라우드 의존성 없기
  • 오프라인(대부분) 작업 가능
  • 구독에 얽매이지 않기
  • 데이터 완전 소유권

교훈: 제한적으로 보였던 제약이 차별화 요소가 될 수 있습니다.

아무도 보여주지 않는 프로덕션 현실

실제로 작동하는 테스트 피라미드

43 Integration Tests (full pipeline)
├─ 641 Backend Unit Tests (services, workflows, API)
└─ 23 Frontend Tests (components, hooks)

왜 이런 배분인가

  • 통합 테스트는 워크플로우 중단을 잡아냅니다
  • 단위 테스트는 논리 오류를 잡아냅니다
  • 프론트엔드 테스트는 UI 회귀를 잡아냅니다

실제로 도움이 되는 문서

대부분의 프로젝트는 README만 가지고 끝냅니다. Research Vault는 다음을 제공합니다:

  • 사용자 가이드 (GETTING_STARTED.md) – “이걸 어떻게 쓰나요?”
  • 운영 가이드 (OPERATIONS.md) – “배포/문제 해결은 어떻게 하나요?”
  • 아키텍처 가이드 (ARCHITECTURE.md) – “어떻게 동작하나요?”
  • 도메인 모델 (DOMAIN_MODEL.md) – “엔티티는 무엇인가요?”
  • API 사양 (API_SPEC.md) – “엔드포인트는 무엇인가요?”

각 문서는 서로 다른 대상과 질문에 답합니다.

아무도 보지 못하는 오류 처리

우아한 감소가 내장되어 있습니다:

  • LLM 추출 실패 → 부분 성공 (문서는 저장되고, 패턴은 재시도)
  • 임베딩 생성 실패 → 우아한 감소 (패턴은 저장되고, 임베딩은 재시도)
  • Qdrant 연결 실패 → 관계형 데이터만 사용해 계속 진행
  • 쿼리 중 컨텍스트 초과 → 경고와 함께 우아하게 잘라냄

교훈: 프로덕션‑레디란 1가지 작동 방식이 아니라 20가지 실패 방식을 처리하는 것을 의미합니다.

Source:

왜 오픈 소스인가

나는 이것을 나 자신을 위해 만들었다. 연구 혼란을 해결해 주었다. 기술 자체가 새롭지는 않다—구조화된 추출, 하이브리드 스토리지, 다중 패스 검증은 다른 RAG 시스템에서도 이미 존재한다.

OSS(오픈 소스)로 만들기

  • 내가 프로덕션 시스템에 접근하는 방식을 보여준다
  • 같은 문제를 겪는 다른 사람들에게 도움이 될 수 있다
  • 아키텍처 결정에 대한 피드백을 초대한다
  • 기여 기회를 연다

이 프로젝트가 보여주는 것

  • 에이전시 워크플로우를 테스트하는 방법 (641개의 테스트)
  • 오류를 우아하게 처리하는 방법 (부분 성공, 재시도)
  • 다양한 청중을 위한 문서화 방법 (6개의 문서)
  • 단순 프로토타입이 아니라 실제 배포 방법

중요한 건축 선택

결정대안왜 이 선택이 승리했는가
구조화된 추출텍스트 청킹논문 간 종합을 가능하게 함
3‑단계 검증단일 단계 추출환각을 90 % 감소시킴
주장/증거/맥락SRAL 구성 요소일반적이며 광범위하게 적용 가능
전반적인 비동기동기 + 스레딩코드가 더 깔끔하고 자원 사용 효율 향상
SQLite → Postgres 경로처음부터 Postgres로컬 설정이 간단하고 마이그레이션이 명확함
로컬 우선클라우드 네이티브데이터 소유권 보장, 벤더 종속 없음
FastAPI + Next.jsStreamlit/Gradio분리되어 있으며 프로덕션 준비 완료

모든 선택은 다음을 최적화했습니다: 기능보다 신뢰성, 영리함보다 명확성, 도구보다 아키텍처.

다음 단계

Research Vault은 베타 준비가 완료되었습니다. 핵심 워크플로우—업로드, 추출, 검토, 쿼리—는 안정적으로 작동합니다. 하지만 구축할 것이 더 있습니다:

단기

  • 패턴 관계 감지 (충돌, 합의)
  • 다중 문서 종합 보고서
  • Obsidian/Notion으로 내보내기

장기

  • 다중 사용자 지원
  • 클라우드 배포 옵션
  • 로컬 LLM 지원 (완전 오프라인)
  • 시간에 따른 패턴 진화

하지만 먼저: 다른 사람들의 손에 넘겨 보세요. 무엇이 깨지는지 확인하고, 무엇이 중요한지 배우세요.

사용해 보기

레포가 라이브 상태입니다:

시작하기 (≈5 분)

git clone https://github.com/aakashsharan/research-vault.git
cd research-vault
cp .env.example .env   # Add your API keys
docker compose up --build

앱을 열고 첫 번째 논문을 업로드하세요.

요약

RAG 시스템이 존재합니다. 구조화된 추출이 존재합니다. LangGraph 프로젝트가 존재합니다.

중요한 것은 실행입니다: 테스트되고, 문서화되며, 오류를 처리하고, 실제로 작동합니다.

  • 이것은 혁신적인 것이 아닙니다. 단지 잘 만들어졌을 뿐입니다.
  • 도구는 변하지만, 실행이 중요합니다.

작동하는 것을 배포하세요. 배운 것을 문서화하세요. 도움이 되는 것을 공유하세요.

관련 읽을거리

  • SRAL Framework Paper – (에이전트형 AI를 위한 평가 프레임워크)
  • SRAL Github
  • Architecture Documentation
  • API Specification
Back to Blog

관련 글

더 보기 »

Gemini 3와 실세계 에이전트 예시

2025년 12월 19일 우리는 agentic AI의 새로운 단계에 진입하고 있습니다. 개발자들은 단순한 notebooks를 넘어 복잡하고 production‑ready agentic w...

전문가들의 Mixtral

개요 Mixtral 8x7B는 많은 작은 전문가들에 작업을 분산시켜 속도와 지능을 모두 달성하는 언어 모델입니다. 이는 Sparse Mixtu...

ADK와 새로운 Interactions API로 에이전트 구축

2025년 12월 11일 마크다운 AI 개발의 풍경은 무상태(request‑response) 사이클에서 상태를 유지하는(stateful) 다중 턴(multi‑turn) 에이전트(agentic) 워크플로우로 전환하고 있다. 베팅과 함께…