# 벡터DB 임베딩용 관련자료 샘플 데이터 ## 📋 개요 본 데이터셋은 회의록 작성 및 공유 개선 서비스의 벡터DB 구축을 위한 샘플 데이터입니다. 통신회사의 8개 업무 도메인별로 4가지 문서 유형에 대해 각 50개씩, 총 **1,600개**의 샘플 문서를 제공합니다. ## 📊 데이터 구성 ### 업무 도메인 (8개) 1. **고객서비스** - VOC, 상담 품질, 고객 응대 2. **영업마케팅** - 요금제, 프로모션, 유통 채널 3. **요금청구** - 빌링, 과금, 미수금 관리 4. **네트워크운용** - 5G, 장애 대응, 트래픽 관리 5. **서비스기획** - 신규 서비스, 콘텐츠 제휴 6. **시스템운영** - IT 인프라, 클라우드, DevOps 7. **가입자관리** - 개통, 해지, 번호이동 8. **기업영업** - B2B 솔루션, 전용선, AICC ### 문서 유형 (4개) 1. **이전 회의록** (meeting_minutes) - 회의 일시, 참석자, 안건, 결정사항, 조치사항 포함 - 실제 회의록 형식의 상세한 내용 2. **조직문서** (org_document) - 업무 매뉴얼, 정책 가이드라인, 표준 절차서 - 공식 문서 형식의 구조화된 내용 3. **프로젝트 문서** (project_document) - 요구사항 정의서, 설계서, 수행 계획서 - 프로젝트 관련 기술 문서 4. **운영문서** (operation_document) - 장애 보고서, 모니터링 결과, 대응 기록 - 실시간 운영 이슈 관련 문서 ### 통계 - **총 문서 수**: 1,600개 - **도메인별**: 200개씩 (8개 도메인) - **유형별**: 도메인당 50개씩 (4가지 유형) ## 📁 파일 구조 ``` vector_db_sample_data.json ├── metadata # 메타데이터 │ ├── version # 버전 정보 │ ├── created_date # 생성 일시 │ ├── description # 설명 │ └── 통계 정보 # 문서 수, 카테고리 수 등 │ ├── embedding_schema # 임베딩 스키마 정의 │ ├── document_id # 문서 고유 ID │ ├── document_type # 문서 유형 │ ├── business_domain # 업무 도메인 │ ├── title # 제목 │ ├── content # 전체 본문 (임베딩 대상) │ ├── summary # 3-5문장 요약 │ ├── keywords # 키워드 배열 │ ├── created_date # 생성 일시 (ISO8601) │ ├── participants # 참석자/작성자 │ ├── metadata # 추가 메타데이터 │ └── embedding_vector # 임베딩 벡터 (1536차원) │ └── sample_data # 실제 샘플 데이터 ├── 고객서비스 │ ├── meeting_minutes # 50개 │ ├── org_document # 50개 │ ├── project_document # 50개 │ └── operation_document # 50개 ├── 영업마케팅 │ ├── ... (동일 구조) ├── 요금청구 ├── 네트워크운용 ├── 서비스기획 ├── 시스템운영 ├── 가입자관리 └── 기업영업 ``` ## 🔧 데이터 스키마 ### 공통 필드 ```json { "document_id": "string", // 예: "고객-MM-001" "document_type": "string", // meeting_minutes | org_document | project_document | operation_document "business_domain": "string", // 8개 도메인 중 하나 "title": "string", // 문서 제목 "content": "string", // 전체 본문 (임베딩 대상) "summary": "string", // 3-5문장 요약 "keywords": ["string"], // 키워드 배열 "created_date": "ISO8601", // 생성 일시 "participants": ["string"], // 참석자/작성자 "metadata": { // 추가 메타데이터 "folder": "string", // 폴더 경로 ... // 문서 유형별 추가 필드 } } ``` ### 문서 유형별 추가 메타데이터 #### 1. 회의록 (meeting_minutes) ```json "metadata": { "folder": "/고객서비스/회의록", "agenda_count": 3, "decision_items": ["결정사항1", "결정사항2"], "action_items": ["조치사항1", "조치사항2"] } ``` #### 2. 조직문서 (org_document) ```json "metadata": { "folder": "/고객서비스/정책/문서", "document_version": "3.2", "last_updated": "2024-06-01" } ``` #### 3. 프로젝트 문서 (project_document) ```json "metadata": { "folder": "/프로젝트/고객서비스", "project_status": "진행중", // 계획 | 진행중 | 완료 "document_type": "요구사항정의서" } ``` #### 4. 운영문서 (operation_document) ```json "metadata": { "folder": "/고객서비스/운영/장애보고", "incident_number": "INC-2024-09-157", "severity": "High", // Critical | High | Medium | Low "status": "복구완료" } ``` ## 💡 사용 예시 ### Python에서 데이터 로드 ```python import json # JSON 파일 로드 with open('vector_db_sample_data.json', 'r', encoding='utf-8') as f: data = json.load(f) # 특정 도메인의 회의록 가져오기 customer_service_meetings = data['sample_data']['고객서비스']['meeting_minutes'] # 첫 번째 회의록 확인 first_meeting = customer_service_meetings[0] print(f"제목: {first_meeting['title']}") print(f"요약: {first_meeting['summary']}") print(f"키워드: {', '.join(first_meeting['keywords'])}") ``` ### 임베딩 생성 예시 ```python from openai import OpenAI client = OpenAI(api_key="your-api-key") # 문서 임베딩 생성 def create_embedding(text): response = client.embeddings.create( model="text-embedding-3-small", input=text ) return response.data[0].embedding # 모든 문서에 대해 임베딩 생성 for domain in data['sample_data']: for doc_type in data['sample_data'][domain]: for doc in data['sample_data'][domain][doc_type]: # content 필드를 임베딩 embedding = create_embedding(doc['content']) doc['embedding_vector'] = embedding ``` ### 벡터DB에 저장 (Qdrant 예시) ```python from qdrant_client import QdrantClient from qdrant_client.models import Distance, VectorParams, PointStruct # Qdrant 클라이언트 초기화 client = QdrantClient(url="http://localhost:6333") # 컬렉션 생성 client.create_collection( collection_name="meeting_documents", vectors_config=VectorParams(size=1536, distance=Distance.COSINE) ) # 문서 업로드 points = [] for domain in data['sample_data']: for doc_type in data['sample_data'][domain]: for doc in data['sample_data'][domain][doc_type]: point = PointStruct( id=doc['document_id'], vector=doc['embedding_vector'], # 이미 생성된 임베딩 payload={ "title": doc['title'], "summary": doc['summary'], "keywords": doc['keywords'], "domain": doc['business_domain'], "type": doc['document_type'], "created_date": doc['created_date'] } ) points.append(point) # 배치 업로드 client.upsert(collection_name="meeting_documents", points=points) ``` ### 유사 문서 검색 예시 ```python # 쿼리 텍스트 query = "고객 만족도를 개선하기 위한 AI 챗봇 도입 방안" # 쿼리 임베딩 생성 query_embedding = create_embedding(query) # 유사 문서 검색 search_result = client.search( collection_name="meeting_documents", query_vector=query_embedding, limit=5, query_filter={ "must": [ {"key": "domain", "match": {"value": "고객서비스"}} ] } ) # 결과 출력 for hit in search_result: print(f"유사도: {hit.score:.4f}") print(f"제목: {hit.payload['title']}") print(f"요약: {hit.payload['summary']}") print("---") ``` ## 🎯 활용 시나리오 ### 1. 관련 회의록 검색 - **목적**: 현재 회의와 유사한 과거 회의록 찾기 - **방법**: 회의 주제/안건을 임베딩하여 유사도 검색 - **활용**: 과거 논의 내용 및 결정사항 참조 ### 2. 맥락 기반 용어 설명 - **목적**: 회의 중 등장하는 전문 용어를 맥락에 맞게 설명 - **방법**: 용어와 관련된 조직문서/매뉴얼 검색 - **활용**: Claude API에 RAG context로 제공 ### 3. 프로젝트 문서 자동 연결 - **목적**: 회의 내용과 관련된 프로젝트 문서 추천 - **방법**: 회의록과 프로젝트 문서 간 유사도 계산 - **활용**: 참고 자료 자동 링크 ### 4. 장애 이력 조회 - **목적**: 유사한 장애 발생 시 과거 대응 사례 검색 - **방법**: 장애 키워드로 운영문서 검색 - **활용**: 빠른 장애 해결을 위한 레퍼런스 ## 📝 데이터 특징 ### 1. 실제 업무 환경 반영 - 통신회사의 실제 업무 도메인 구조 - 각 도메인별 특화된 키워드 및 용어 - 업무 프로세스와 연결된 문서 구조 ### 2. 다양한 문서 유형 - 회의록: 비정형 대화체 문서 - 조직문서: 정형 정책 문서 - 프로젝트 문서: 기술 문서 - 운영문서: 시간 기반 이벤트 문서 ### 3. 풍부한 메타데이터 - 문서 분류를 위한 도메인/유형 정보 - 검색 최적화를 위한 키워드 - 관계 추적을 위한 참석자/날짜 정보 - 폴더 구조 정보 ### 4. 임베딩 최적화 - 평균 문서 길이: 500~2000자 - 요약문 제공으로 빠른 이해 가능 - 키워드 기반 하이브리드 검색 지원 ## 🔍 검색 전략 권장사항 ### 1. 하이브리드 검색 ```python # 키워드 필터 + 벡터 유사도 검색 search_result = client.search( collection_name="meeting_documents", query_vector=query_embedding, query_filter={ "must": [ {"key": "domain", "match": {"value": "고객서비스"}}, {"key": "keywords", "match": {"any": ["VOC", "챗봇"]}} ] }, limit=10 ) ``` ### 2. 시간 기반 필터링 ```python # 최근 1년 이내 문서만 검색 from datetime import datetime, timedelta one_year_ago = (datetime.now() - timedelta(days=365)).isoformat() search_result = client.search( collection_name="meeting_documents", query_vector=query_embedding, query_filter={ "must": [ {"key": "created_date", "range": {"gte": one_year_ago}} ] } ) ``` ### 3. 문서 유형별 가중치 ```python # 회의록 우선, 프로젝트 문서 보조 meeting_results = search(query, filter={"type": "meeting_minutes"}, limit=3) project_results = search(query, filter={"type": "project_document"}, limit=2) # 결과 병합 all_results = meeting_results + project_results ``` ## 🚀 확장 가능성 ### 1. 실제 데이터 연동 - Confluence API 연동 - SharePoint 문서 수집 - 이메일 아카이브 통합 ### 2. 추가 메타데이터 - 문서 중요도 점수 - 조회수/활용도 통계 - 사용자 피드백 (좋아요/별점) ### 3. 고급 검색 기능 - 시맨틱 검색 (Azure AI Search) - 다중 벡터 검색 (제목/본문 분리) - Re-ranking (Claude 활용) ## 📚 관련 문서 - `구현방안-관련자료.md`: 관련자료 검색 시스템 구현 상세 - `구현방안-용어집.md`: 용어집 구축 및 Claude 연동 방안 - `통신업무도메인.md`: 통신회사 업무 도메인 정의 ## 🤝 기여 샘플 데이터 개선 제안이나 추가 도메인 요청은 프로젝트 팀에 문의하세요. --- **버전**: 1.0 **생성일**: 2025-10-28 **생성자**: 회의록 작성 및 공유 개선 프로젝트 팀