mirror of
https://github.com/hwanny1128/HGZero.git
synced 2025-12-06 19:36:23 +00:00
- meet-ref.json: 회의록 작성을 위한 AI 학습 참조 데이터 추가 - 관련자료.md: 회의록 관련 참고 문서 업데이트 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
12 KiB
12 KiB
벡터DB 임베딩용 관련자료 샘플 데이터
📋 개요
본 데이터셋은 회의록 작성 및 공유 개선 서비스의 벡터DB 구축을 위한 샘플 데이터입니다. 통신회사의 8개 업무 도메인별로 4가지 문서 유형에 대해 각 50개씩, 총 1,600개의 샘플 문서를 제공합니다.
📊 데이터 구성
업무 도메인 (8개)
- 고객서비스 - VOC, 상담 품질, 고객 응대
- 영업마케팅 - 요금제, 프로모션, 유통 채널
- 요금청구 - 빌링, 과금, 미수금 관리
- 네트워크운용 - 5G, 장애 대응, 트래픽 관리
- 서비스기획 - 신규 서비스, 콘텐츠 제휴
- 시스템운영 - IT 인프라, 클라우드, DevOps
- 가입자관리 - 개통, 해지, 번호이동
- 기업영업 - B2B 솔루션, 전용선, AICC
문서 유형 (4개)
-
이전 회의록 (meeting_minutes)
- 회의 일시, 참석자, 안건, 결정사항, 조치사항 포함
- 실제 회의록 형식의 상세한 내용
-
조직문서 (org_document)
- 업무 매뉴얼, 정책 가이드라인, 표준 절차서
- 공식 문서 형식의 구조화된 내용
-
프로젝트 문서 (project_document)
- 요구사항 정의서, 설계서, 수행 계획서
- 프로젝트 관련 기술 문서
-
운영문서 (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개
├── 영업마케팅
│ ├── ... (동일 구조)
├── 요금청구
├── 네트워크운용
├── 서비스기획
├── 시스템운영
├── 가입자관리
└── 기업영업
🔧 데이터 스키마
공통 필드
{
"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)
"metadata": {
"folder": "/고객서비스/회의록",
"agenda_count": 3,
"decision_items": ["결정사항1", "결정사항2"],
"action_items": ["조치사항1", "조치사항2"]
}
2. 조직문서 (org_document)
"metadata": {
"folder": "/고객서비스/정책/문서",
"document_version": "3.2",
"last_updated": "2024-06-01"
}
3. 프로젝트 문서 (project_document)
"metadata": {
"folder": "/프로젝트/고객서비스",
"project_status": "진행중", // 계획 | 진행중 | 완료
"document_type": "요구사항정의서"
}
4. 운영문서 (operation_document)
"metadata": {
"folder": "/고객서비스/운영/장애보고",
"incident_number": "INC-2024-09-157",
"severity": "High", // Critical | High | Medium | Low
"status": "복구완료"
}
💡 사용 예시
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'])}")
임베딩 생성 예시
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 예시)
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)
유사 문서 검색 예시
# 쿼리 텍스트
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. 하이브리드 검색
# 키워드 필터 + 벡터 유사도 검색
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. 시간 기반 필터링
# 최근 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. 문서 유형별 가중치
# 회의록 우선, 프로젝트 문서 보조
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
생성자: 회의록 작성 및 공유 개선 프로젝트 팀