프로덕션 RAG 시스템을 며칠 안에 구축하기, 몇 주가 아니라: ShinRAG 소개
발행: (2025년 12월 2일 오후 10:06 GMT+9)
5 min read
원문: Dev.to
Source: Dev.to
프로덕션 수준의 Retrieval‑Augmented Generation (RAG) 시스템을 구축하는 데는 6–12주가 걸리는 경우가 많습니다. 이는 RAG 로직 자체가 복잡해서가 아니라, 벡터 데이터베이스, 임베딩 파이프라인, 오케스트레이션 코드, 청크 전략, API 연동 등 주변 인프라 때문입니다.
ShinRAG는 시각적인 RAG 플랫폼으로, 애플리케이션 로직에 집중하고 며칠 만에 프로덕션 급 RAG 시스템을 배포할 수 있게 해줍니다.
프로덕션 RAG 시스템 구축 시 직면하는 과제
- 인프라 복잡성 – 벡터 스토어, 임베딩 서비스, 오케스트레이션 레이어 설정
- 시간 투자 – 아이디어 단계에서 프로덕션까지 6–12주 소요
- 유지보수 부담 – 지속적인 디버깅 및 최적화 필요
- 벤더 종속성 – 도구나 제공자를 교체하기 어려움
ShinRAG 소개
ShinRAG는 올인원 관리형 RAG 플랫폼으로 다음을 제공합니다:
- 시각적 파이프라인 빌더 (드래그‑앤‑드롭 RAG 워크플로)
- 관리형 벡터 데이터베이스 (Qdrant 기반)
- 데이터셋 할당이 가능한 RAG 에이전트
- 프로덕션 사용을 위한 전체 REST API
- 손쉬운 통합을 위한 TypeScript SDK
- 사용량 추적 및 모니터링
설치
npm install @shinrag/sdk
# or
pnpm add @shinrag/sdk
기본 사용법
에이전트 쿼리
import { ShinRAGClient } from '@shinrag/sdk';
const client = new ShinRAGClient({
apiKey: 'sk_your_api_key_here',
});
const result = await client.queryAgent('agent_1234567890abcdef', {
question: 'What are the key features mentioned in the documentation?',
maxResults: 5,
temperature: 0.7,
});
console.log('Answer:', result.answer);
console.log('Sources:', result.sources);
console.log('Tokens used:', result.tokensUsed);
에이전트는 자동으로:
- 할당된 데이터셋 검색
- 관련 컨텍스트 가져오기
- 인용을 포함한 답변 생성
- 토큰 사용량 추적
파이프라인 쿼리
const pipelineResult = await client.queryPipeline('pipeline-id', {
input: 'Process this query through my custom pipeline',
});
if (pipelineResult.status === 'completed') {
console.log('Output:', pipelineResult.output);
console.log('Total tokens:', pipelineResult.totalTokensUsed);
// 개별 노드 결과 확인
pipelineResult.nodeResults.forEach(node => {
console.log(`Node ${node.nodeId}: ${node.status}`);
if (node.output) {
console.log(` Output: ${node.output}`);
}
});
}
시맨틱 검색
const searchResult = await client.queryDataset({
datasetId: 'dataset_1234567890abcdef',
queryText: 'What are the key features?',
limit: 10,
});
if (searchResult.success) {
console.log(`Found ${searchResult.results.length} results`);
searchResult.results.forEach(item => {
console.log(`Score: ${item.score}, Content: ${item.payload.text}`);
});
}
고급 기능
메타데이터 필터
const result = await client.queryAgent('agent-id', {
question: 'Find information about TypeScript',
filter: {
must: [
{ key: 'category', match: { value: 'programming' } },
{ key: 'difficulty', range: { gte: 1, lte: 3 } },
],
},
});
TypeScript 타입
interface QueryAgentResponse {
answer: string | null;
sources: Array;
tokensUsed: number;
model: string;
warning?: string;
}
오류 처리
import { ShinRAGClient, ShinRAGError } from '@shinrag/sdk';
try {
const result = await client.queryAgent('agent-id', {
question: 'Your question here',
});
} catch (error) {
if (error instanceof ShinRAGError) {
console.error('API Error:', error.message);
console.error('Status Code:', error.statusCode);
}
}
활용 사례
- 내부 지식 베이스 – 회사 문서를 업로드하고 에이전트를 생성한 뒤 API 또는 채팅 연동을 통해 질의
- 고객 지원 봇 – 지원 FAQ를 ingest하고 필터를 적용해 지원 시스템에 배포
- 기술 문서 Q&A – 주제별 에이전트를 별도로 만들고 필터 템플릿으로 질의를 라우팅
아키텍처 및 기술 스택
| Component | Technology |
|---|---|
| API | NestJS |
| Vector storage | Qdrant |
| LLM providers | OpenAI, Anthropic, custom APIs |
| SDK | TypeScript (with full type safety) |
| API style | RESTful |
| Monitoring & analytics | Built‑in usage tracking |
로드맵
- 추가 파이프라인 노드 타입
- 스트리밍 응답 지원
- Python, Go 등 다른 언어용 SDK
- 향상된 모니터링 및 분석 대시보드
- 통합 마켓플레이스
시작하기
- shinrag.com 에서 회원가입(또는 자체 인스턴스 배포)
- 첫 번째 데이터셋을 만들고 문서를 업로드
- 에이전트를 생성하고 데이터셋을 할당
- SDK 설치 (
npm install @shinrag/sdk) - 바로 쿼리 시작!
태그
#rag #ai #typescript #machinelearning #developer #api #nlp #vectordatabase