본문으로 건너뛰기

AI RAG 자료

Mind-Log v5.0 | 최종 업데이트: 2026-04-17 11:00


1. LMS RAG 시스템 개요

프로젝트: LMS (Leader's Mind Security) - 리더십 멘탈 웰니스 SaaS

LMS의 RAG 시스템은 그린룸(greenroom) 사용자의 경험을 최대한 맞춤형 팟캐스트 콘텐츠로 변환합니다. 두 가지 독립 에이전트가 각각 다른 데이터 소스를 검색하며, Reasoning Agent가 필요에 따라 이들을 조건부로 호출합니다.

본 문서의 RAG 구조는 LMS v5.0 아키텍처의 Knowledge Layer에 해당하며, Memory Agent(개인 기억)와 Knowledge Agent(전문 지식)가 담당합니다. Reasoning Agent 및 Podcast Reasoning이 조건부로 두 에이전트를 호출합니다.

핵심 특징

  • 그린룸 맞춤형 콘텐츠: 사용자의 그린룸 입력 내용 + 과거 이용 데이터 + 공유 허락한 그린룸 이야기
  • 마인드 온톨로지 연동: 리더십 도메인 전문 지식과 사용자 개인 기억의 융합
  • 듀얼 RAG 아키텍처: Personal RAG (개인 기억) + Expert RAG (전문 지식)

2. 듀얼 RAG 파이프라인

A. Personal RAG (Memory Agent 담당)

목적: 사용자의 개인 그린룸 데이터와 과거 상담 기록 검색

데이터 소스:

  • 개인 그린룸 이용 데이터 (그린룸 방문 시 입력한 개인 이야기)
  • 과거 상담 기록 및 조회 이력
  • 사용자 프로필, 주요 인물 관계도, 가치관

구현:

  • Vector DB(Pinecone)의 단일 통합 인덱스 rag-suite-knowledge에 개인 기억을 임베딩 (PR #153)
  • 사용자 입력과 유사한 과거 경험을 벡터 유사도로 검색 (dense-only)
  • 메타데이터 필터링으로 user_id + namespace 기반 데이터 격리

활용 예시:

"리더로서의 성장을 고민해요" → 과거 그린룸 입력 기록에서 "팀 내 의사소통 관련 고민"을 발견하고 그 맥락을 활용해 맞춤형 이야기 제공

B. Expert RAG (Knowledge Agent 담당)

목적: 리더십 도메인 전문 지식과 공유 허락한 그린룸 이야기 검색

데이터 소스:

  • 리더십/심리학 전문 논문 및 가이드
  • 검증된 코칭 이론 및 모범 사례
  • 공유 허락한 다른 사용자의 그린룸 이야기 (익명 처리)
  • 도메인 전문가 인사이트

구현:

  • Vector DB(Pinecone)의 단일 통합 인덱스 rag-suite-knowledge에 전문 지식 임베딩 (PR #153)
  • 현재 구현: Pinecone dense-only 검색 — KT Cloud Embedding passage로 인덱싱 후 Embedding query로 검색
  • BM25 리랭킹은 향후 미구현 (6장 참조)
  • Neo4j Graph DB로 리더십 개념 간의 관계 모델링

활용 예시:

"변화의 시대에 팀을 이끌어야 해요" → 변화관리 이론, 리더십 스타일, 관련된 다른 사용자들의 경험담을 종합


3. 그린룸 RAG 활용 흐름

INPUT 단계

사용자가 그린룸 입력

[그린룸 입력 내용] + [이전 이용 데이터(조회)] + [공유 이야기(RAG 추출)]

이 세 가지가 하나의 "컨텍스트 윈도우"로 통합

처리 단계

  1. Query Expansion (Reasoning Agent): 사용자의 그린룸 입력을 구체적인 검색 쿼리로 변환
  2. Dual Retrieval (병렬 처리):
    • Personal RAG에서 사용자의 과거 관련 기록 검색
    • Expert RAG에서 도메인 전문 지식 및 공유 이야기 검색
  3. Context Fusion (Synthesis Agent): 두 검색 결과를 통합
  4. Emotion-based Re-ranking: 사용자의 현재 감정 상태에 맞게 결과 재순위화

OUTPUT 단계

맞춤형 팟캐스트 스크립트의 이야기 소스

Podcast Reasoning Agent가 스크립트 생성

사용자의 개인 경험 + 전문 가이드 + 공유 이야기가 담긴 에피소드

데이터 흐름 다이어그램

단계담당 에이전트입력출력
1. 쿼리 확장Reasoning Agent그린룸 입력 텍스트구체화된 검색 쿼리
2. Personal 검색Memory Agent검색 쿼리개인 기억 문서 (상위 K개)
3. Expert 검색Knowledge Agent검색 쿼리전문 지식 + 공유 이야기 (상위 K개)
4. 컨텍스트 통합Synthesis Agent두 검색 결과통합된 컨텍스트 윈도우
5. 감정 기반 리랭킹Emotion Agent통합 컨텍스트 + 감정 벡터최종 검색 결과 (재순위화)
6. 스크립트 생성Podcast Reasoning최종 검색 결과팟캐스트 에피소드 스크립트

4. Vector DB 설계 (Pinecone)

Pinecone을 사용한 대규모 벡터 검색을 통해 개인 기억과 전문 지식을 효율적으로 관리합니다.

기존 설계의 3개 분리 인덱스(personal_memory / expert_knowledge / episode_archive)는 폐기되었으며, 현재는 단일 통합 인덱스 rag-suite-knowledge로 운영됩니다 (PR #153). 데이터 격리는 Pinecone namespace메타데이터 필터(user_id, doc_type 등) 로 수행합니다.

Index 구조 (현재 운영)

Index 이름용도namespace / 메타데이터 분리청킹 전략담당 에이전트
rag-suite-knowledge (단일 통합)개인 기억 + 전문 지식 + 에피소드 아카이브를 namespace/메타데이터로 분리하여 통합 운영namespace: personal / expert / episode — 메타데이터: user_id, doc_type, timestamp, sentiment, topic_tag, source_type, domain, is_shared, anonymized_user_id, episode_id, themes에피소드 단위 (세션/주제/전체 에피소드)Memory / Knowledge / Podcast Reasoning (공용)

유사도 임계값 (PR #155)

  • 현재 설정값: 0.25 (기존 0.7에서 하향 조정)
  • 조정 근거: KT Cloud Query↔Passage 임베딩 실측 score 분포가 0.20~0.35 범위로 관측되어, 기존 0.7 임계값에서는 유효 결과가 거의 반환되지 않음.
  • 관련 설정: config/settings.yaml 내 Pinecone 임계값 외부화 항목 (PR #146).

메타데이터 필터링 (단일 인덱스 기준)

Personal 검색  (namespace=personal):
- filter: {"user_id": "${user_id}"} (개인 데이터 격리)

Expert 검색 (namespace=expert):
- filter: {"is_shared": true} (공유 허락한 데이터만)
- filter: {"anonymized_user_id": null} (익명화된 이야기)

임베딩/생성 모델 (KT Cloud RAG Suite — PR #145, #148~#151, #158)

현재 임베딩·파서·생성은 KT Cloud RAG Suite를 사용합니다. OpenAI Text-embedding-3-large / KoSimCSE 등은 초기 설계안이었으며, 현재 운영 구성은 아래와 같습니다.

구성요소엔드포인트 / 모델용도비고
ParserKT Cloud RAG Suite — Parser API문서 인제스트 단계에서 텍스트 추출·정제인제스트 단계 전용. Knowledge Agent search()에서는 PR #158에서 제거 (텍스트 쿼리에는 불필요).
Embedding (passage)KT Cloud RAG Suite — Embedding Passage 엔드포인트문서/청크 인제스트 시 임베딩 생성scripts/ingest_knowledge.py에서 호출
Embedding (query)KT Cloud RAG Suite — Embedding Query 엔드포인트검색 쿼리 임베딩 생성Knowledge Agent search() 경로에서 호출 (PR #148~#150에서 env 주입 복원)
TextGenQwen3-32B (KT Cloud RAG Suite TextGen)RAG 결과 기반 답변 생성PR #145에서 도입
  • 환경변수 네이밍: PARSE_*, EMBEDDING_QUERY_*, EMBEDDING_PASSAGE_*, TEXTGEN_* (PR #148~#150에서 PARSER→PARSE 정렬, GitHub Secrets 정합)
  • 주입 경로: Reasoning Agent의 phase별(ToT/CoT) 컨텍스트 주입 + ScriptGenerator state 키 정합 (PR #151)
  • 관측성: Pinecone 조회 로그/top_k 외부화 (PR #151)
  • 재학습/적재: 신규 문서는 scripts/ingest_knowledge.py로 Parser → Passage Embedding → Pinecone 적재

Backend /api/internal/knowledge 엔드포인트 — 미구현 상태 (PR #156, #157)

AI 서버(Knowledge Agent)는 Backend와 분리된 전용 URL을 호출하도록 클라이언트 측 준비 완료 상태입니다.

  • BackendClient._knowledge_base_url 도입 (PR #156)
  • 엔드포인트 경로 분리: /api/internal/knowledge (PR #157)

Backend 서버 측 구현은 아직 완료되지 않음. 백엔드 팀에서 해당 엔드포인트를 구현하기 전까지는 실제 통신이 블록된 상태이며, 연동 테스트 가능 시점까지 대기.


5. GraphRAG (Neo4j) - 마인드 온톨로지 연동

Vector DB의 유사도 기반 검색을 보완하여, 리더십 개념 간의 인과관계를 파악합니다.

마인드 온톨로지 노드 및 관계

노드 타입:

  • Leadership Concept (리더십 개념): "변화 관리", "팀 동기부여", "감정 지능" 등
  • Psychological Pattern (심리 패턴): "회피형 대응", "공동 창조적 사고" 등
  • User Story (사용자 이야기): 익명 처리된 그린룸 이야기
  • Expert Resource (전문 자료): 논문, 가이드, 코칭 자료

관계 타입:

  • HAS_ROOT_CAUSE: 심리 패턴 → 근본 원인
  • RELATED_TO_CONCEPT: 사용자 이야기 → 리더십 개념
  • SIMILAR_TO_PATTERN: 심리 패턴 → 유사 패턴
  • SUPPORTED_BY_RESEARCH: 리더십 개념 → 전문 자료

활용 예시

사용자 입력: "팀원들이 변화를 거부해요"

Vector 검색: "변화 저항" 관련 과거 기록 찾기

Graph 검색: "변화 저항" → [감정 지능 부족] → [공감 능력 강화]

결과: 단순 기록이 아닌 "근본 원인 + 해결책" 연결

6. 검색 방식 (현재: dense-only)

현재 Knowledge Agent search()Pinecone dense-only 검색만 구현되어 있습니다. KT Cloud Embedding Query로 쿼리를 임베딩한 뒤 Pinecone 벡터 검색을 수행하며, BM25(키워드) 경로와 하이브리드 스코어링은 미구현 상태입니다.

Dense Retrieval (Semantic Search) — 현재 구현

장점:

  • 표현이 다르지만 의미가 같은 내용 검색
  • "마음이 답답해요" ≈ "숨이 턱 막혀요" 이해
  • 감정 톤의 미묘한 차이 감지

적용:

Query: "변화가 무서워요"

KT Cloud Embedding Query로 쿼리 임베딩

Pinecone rag-suite-knowledge 인덱스 dense 검색 (임계값 0.25)

"변화에 대한 불안", "예측 불가능한 상황 회피" 등 의미적 유사성 결과 반환

BM25 (Keyword-based Search) — 미구현

심리 상담 도메인의 특수성을 반영하여 키워드 기반 검색을 조합하는 방식입니다. 의약품 이름, 고유 명사(사람 이름, 회사명), 특정 치료 기법 이름(예: "인지행동치료", "수용전념치료") 검색에 유리합니다. 현재는 구현되어 있지 않으며, 향후 계획 섹션을 참조하십시오.


7. 감정 기반 리랭킹

검색된 여러 결과 중에서 사용자의 현재 감정 상태에 가장 적합한 정보를 상위에 배치합니다.

리랭킹 알고리즘

입력:

  • 검색 결과: 상위 K개 문서 (벡터 유사도 기준)
  • 현재 사용자 감정: Emotion Agent에서 추출한 감정 벡터

처리:

  1. 감정 매칭 점수 계산: 각 문서의 감정 톤과 사용자의 현재 감정 벡터 간 코사인 유사도

  2. 최신성 가중치: 최근 데이터에 더 높은 가중치

  3. 트라우마 필터: Safety Agent와 연동하여 사용자의 트라우마 트리거가 되는 콘텐츠 제거

  4. 최종 점수 재계산:

    Final Score = (Vector Similarity × 0.4)
    + (Emotion Match × 0.3)
    + (Recency Weight × 0.2)
    - (Trauma Risk × 0.1)

감정 기반 리랭킹 예시

상황현재 감정추천 우선순위
"리더로서 자신감이 없어요"불안, 자책1. 성공 경험담 (동기부여) 2. 자신감 강화 기법 3. 실패 극복 사례
"팀원들과의 갈등으로 답답해요"답답함, 좌절감1. 의사소통 개선 기법 2. 감정 조절 방법 3. 갈등 해결 사례
"변화가 두려워요"두려움, 저항감1. 변화 관리 점진적 접근 2. 심리적 안정감 제공 3. 변화 수용 사례

구현

def rerank_by_emotion(documents, emotion_vector, user_state):
"""
감정 기반 문서 재순위화
"""
reranked = []
for doc in documents:
# 1. 기존 벡터 유사도
vector_score = doc['similarity_score']

# 2. 감정 매칭 점수
emotion_score = cosine_similarity(doc['emotion_vector'], emotion_vector)

# 3. 최신성 가중치
recency_weight = calculate_recency(doc['timestamp'])

# 4. 트라우마 필터
trauma_risk = safety_agent.check_trauma_trigger(doc, user_id)

# 5. 최종 점수
final_score = (vector_score * 0.4 +
emotion_score * 0.3 +
recency_weight * 0.2 -
trauma_risk * 0.1)

reranked.append((doc, final_score))

return sorted(reranked, key=lambda x: x[1], reverse=True)

8. 프라이버시 정책

LMS의 RAG 시스템은 사용자 데이터 보호와 개인정보 관리를 최우선으로 합니다.

핵심 원칙

  1. 데이터 격리 (Isolation)

    • 모든 Vector DB 쿼리에는 user_id 메타데이터 필터 필수
    • 개인 그린룸 데이터는 절대로 다른 사용자에게 노출 불가
    • 타 사용자의 데이터가 RAG 검색 결과에 섞이면 안됨
  2. 공유 데이터 익명화 (Anonymization)

    • 공유를 허락한 그린룸 이야기도 반드시 익명 처리
    • 사용자 이름, 회사명, 연락처 등 개인 식별 정보 제거
    • 이야기의 본질적 인사이트만 보존
  3. 명시적 동의 (Explicit Consent)

    그린룸 입력 시점에서:
    □ "이 내용을 다른 사용자와의 맞춤형 팟캐스트 생성에 활용할 수 있습니다"
    □ "이 내용을 AI 학습 데이터로 사용할 수 있습니다"
    → 사용자의 명시적 선택만 반영
  4. 잊혀질 권리 구현 (Right to Be Forgotten)

    • 사용자가 "이 이야기 삭제" 요청 시:
      • Vector DB의 해당 임베딩 즉시 삭제
      • Neo4j Graph DB의 관련 노드 익명화 또는 삭제
      • 백업에서도 주기적으로 제거
    • MCP 도구: delete_user_memory, anonymize_story
  5. 데이터 보관 기한

    • 개인 그린룸 데이터: 사용자가 삭제 요청할 때까지 보관
    • 공유 데이터: 사용자의 동의가 있는 기간만 보관
    • 자동 삭제: 1년 이상 미사용 데이터는 사용자 통보 후 삭제 가능
  6. 접근 제어 (Access Control)

    • 관리자도 개별 사용자의 개인 그린룸 데이터 직접 접근 불가
    • 데이터 품질 개선을 위한 모니터링은 익명화된 데이터로만 진행
    • 법적 요청 시에만 법정 절차를 거쳐 접근
  7. 감시 및 감사 로그

    • RAG 검색 시마다 접근 로그 기록
    • 누가, 언제, 어떤 데이터에 접근했는지 추적 가능
    • 의도하지 않은 접근 시 알림 시스템

프라이버시 체크리스트

항목체크 내용담당 에이전트
개인 데이터 격리Vector DB 쿼리 시 user_id 필터 적용되었는가?Memory Agent
공유 데이터 익명화사용자가 공유에 동의했고, 식별 정보가 제거되었는가?Knowledge Agent
명시적 동의RAG 활용에 대한 사용자 동의 존재하는가?Safety Agent
삭제 요청 처리삭제 요청 시 모든 DB에서 제거되었는가?Memory Agent
접근 로그모든 RAG 접근 이력이 기록되었는가?Monitoring System

구현 예시

def retrieve_with_privacy_check(state: AgentState):
"""
프라이버시를 고려한 안전한 검색
"""
user_id = state['user_id']

# 1. 명시적 동의 확인
if not has_rag_consent(user_id):
return {"error": "RAG 활용 동의 필요"}

# 2. 개인 데이터만 검색 (user_id 필터 필수)
personal_docs = pinecone_client.search(
index="rag-suite-knowledge",
namespace="personal",
query=state['input'],
filter={"user_id": user_id}, # 격리
k=3
)

# 3. 공유 데이터는 익명화 확인
shared_docs = pinecone_client.search(
index="rag-suite-knowledge",
namespace="expert",
query=state['input'],
filter={"is_anonymized": True, "is_shared": True}, # 익명 + 공유
k=2
)

# 4. 접근 로그 기록
log_rag_access(user_id, state['input'], len(personal_docs + shared_docs))

return {
"personal_docs": personal_docs,
"shared_docs": shared_docs
}

9. 에피소드 레벨 청킹

팟캐스트 콘텐츠의 에피소드 기반 청킹 전략으로 맥락 일관성을 유지합니다.

청킹 전략

개인 그린룸 데이터:

  • 기본 단위: 1회 그린룸 세션 = 1개 청크
  • 길이: 보통 300800 토큰 (약 200500 단어)
  • 메타데이터: {user_id, session_date, primary_topic, emotion_tone, risk_level}

전문 지식 & 공유 이야기:

  • 기본 단위: 하나의 완결된 사례 또는 개념 설명 = 1개 청크
  • 길이: 보통 400~1000 토큰
  • 메타데이터: {source_type, domain, themes, difficulty_level}

팟캐스트 에피소드 아카이브:

  • 기본 단위: 전체 에피소드 스크립트 + 메타데이터
  • 길이: 보통 2000~3000 토큰
  • 메타데이터: {episode_id, user_id, themes, source_stories, publication_date}

청킹 알고리즘

def chunk_by_episode(raw_data: str, data_type: str) -> List[Chunk]:
"""
에피소드 레벨 청킹
- data_type: 'personal', 'expert', 'episode'
"""
chunks = []

if data_type == 'personal':
# 개인 그린룸 데이터: 세션 단위로 분할
sessions = split_by_session(raw_data)
for session in sessions:
chunk = Chunk(
content=session['text'],
metadata={
'user_id': session['user_id'],
'session_date': session['timestamp'],
'primary_topic': extract_topic(session['text']),
'emotion_tone': extract_emotion(session['text']),
'risk_level': assess_risk(session['text'])
}
)
chunks.append(chunk)

elif data_type == 'expert':
# 전문 자료: 주제 또는 사례 단위로 분할
cases_or_concepts = split_by_concept(raw_data)
for case in cases_or_concepts:
chunk = Chunk(
content=case['text'],
metadata={
'source_type': case['source'],
'domain': extract_domain(case['text']),
'themes': extract_themes(case['text']),
'is_anonymized': case.get('is_anonymized', False)
}
)
chunks.append(chunk)

return chunks

청킹 이점

이점설명
맥락 일관성문장 단위가 아닌 완결된 이야기 단위로 검색하므로 맥락 손실 최소화
의미 응집도에피소드 내의 모든 내용이 같은 주제를 다루므로 벡터 임베딩 품질 향상
검색 정확도"하나의 완전한 경험" 단위로 검색되어 관련성 높은 결과 반환
팟캐스트 생성 효율전체 에피소드를 다시 잘라낼 필요 없이 청크 단위로 조합 가능

10. 구현 단계별 워크플로우

LMS RAG 시스템의 전체 데이터 흐름입니다.

Step 1: 사용자 그린룸 입력

사용자가 그린룸에 이야기 입력

예: "새로운 팀을 리드하게 되었는데 팀원들과의 신뢰 구축이 어려워요"

Step 2: Query Expansion (Reasoning Agent)

원본 쿼리: "새로운 팀을 리드하게 되었는데 팀원들과의 신뢰 구축이 어려워요"

확장된 쿼리들:
- "리더로서의 첫 경험"
- "팀원 신뢰 구축 방법"
- "새로운 역할 전환 불안감"
- "관계 형성 어려움"

Step 3: Dual Retrieval (병렬 처리)

Path A - Personal RAG (Memory Agent):

Memory Agent 검색 시작

Pinecone rag-suite-knowledge (namespace=personal) 쿼리: user_id 필터 + 확장 쿼리들

검색 결과:
- "지난번 팀 전환 때의 불안감을 어떻게 극복했어요"
- "과거 좋은 관계를 만들었던 경험"
- "신뢰 구축의 실패 사례"

Path B - Expert RAG (Knowledge Agent):

Knowledge Agent 검색 시작

KT Cloud Embedding QueryPinecone rag-suite-knowledge (namespace=expert) dense 검색

검색 결과:
- "심리학 기반 신뢰 구축 5단계"
- "새로운 리더의 일반적인 도전과제" (공유 이야기, 익명화)
- "감정 지능이 리더십에 미치는 영향"

Step 4: 감정 기반 리랭킹 (Emotion Agent)

현재 사용자 감정 분석: 불안감, 자신감 부족

검색 결과 재정렬:
1. [높음] "과거 성공했던 신뢰 구축 경험" (자신감 회복)
2. [높음] "신뢰 구축의 단계별 전략" (구체적 행동)
3. [중간] "다른 리더의 도전 과정" (공감과 정상화)
4. [낮음] "신뢰 구축 실패 사례" (현재 감정상으로 부담)

Step 5: 컨텍스트 통합 (Synthesis Agent)

최종 컨텍스트 윈도우 구성:

---
[사용자 입력] 새로운 팀을 리드하게 되었는데 팀원들과의 신뢰 구축이 어려워요

[개인 메모리]
이전에 유사한 상황을 겪으셨을 때, 당신은 ...
그 경험에서 배운 점은 ...

[전문 지식]
심리학 연구에 따르면, 신뢰 구축은 다음 단계를 거칩니다:
1. 진정성 표현 (Authenticity)
2. ...

[공유 이야기]
비슷한 상황에 있던 다른 리더는 ...
(익명 처리됨)
---

Step 6: 팟캐스트 스크립트 생성 (Podcast Reasoning)

최종 컨텍스트 주입

Podcast Reasoning Agent가 스크립트 생성:
- 사용자의 개인 경험을 "이야기"로 표현
- 전문 지식을 "인사이트"로 제시
- 공유 이야기를 "다른 사람의 경험"으로 언급

완성된 에피소드 스크립트

Pinecone rag-suite-knowledge 인덱스의 episode namespace에 저장

참고 문서 및 연계

  • AI 파트 아키텍처: 전체 시스템 구조 및 에이전트 역할 정의
  • Memory Agent 설명서: 개인 기억 관리 및 retrieval 기법
  • Knowledge Agent 설명서: 전문 지식 관리 및 graph-based reasoning
  • Podcast Reasoning 설명서: 에피소드 스크립트 생성 로직
  • 안전 및 위험 감지: Safety Agent와의 연동, 트라우마 트리거 필터링
  • Emotion Agent 설명서: 감정 벡터 추출 및 감정 기반 리랭킹
  • Pinecone 가이드: Vector DB 운영 및 최적화 (단일 인덱스 rag-suite-knowledge 기준)
  • Neo4j 운영 가이드: Graph DB 유지보수 및 쿼리 최적화
  • KT Cloud RAG Suite 연동 PR: #145, #148, #149, #150, #151, #158
  • Pinecone 인덱스 통일 / 임계값 조정 PR: #153, #155
  • Backend /api/internal/knowledge URL 분리 PR (엔드포인트 구현 대기): #156, #157

향후 계획

  • BM25 리랭킹 구현: Elasticsearch 또는 Milvus를 활용한 키워드 기반 검색 추가. 하이브리드 스코어링 (BM25×0.3 + Dense×0.7) 적용으로 고유명사·치료 기법명 검색 정확도 향상.
  • Backend /api/internal/knowledge 엔드포인트 구현: 백엔드 팀에서 해당 엔드포인트를 구현하면 Knowledge Agent → Backend 실제 통신 연동 테스트 가능.
  • user_id 필터 최적화: 현재 메타데이터 필터(user_id) 방식에서 Pinecone namespace 기반 격리 방식으로 점진 전환 검토 (성능 및 격리 강도 비교).
  • 임베딩 모델 평가: KT Cloud RAG Suite 외 대안 임베딩 모델과의 score 분포 비교 및 임계값 재조정.
  • 에피소드 아카이브 청킹 전략 고도화: 에피소드 전체 vs 세그먼트 단위 청킹 A/B 테스트.

변경 이력

날짜내용PR
2026-04-17문서 전체 재작성: 코드 기준으로 직접 수정. 단일 인덱스 rag-suite-knowledge 반영, 3개 분리 인덱스 항목 삭제, 임계값 0.25 직접 기재, KT Cloud RAG Suite 구성 직접 기재, Backend 미구현 상태 직접 기재, dense-only 검색 방식 직접 기재, 향후 계획 섹션 분리#153, #155, #145, #148~#151, #158, #156, #157
2026-04-17기존: 정정 callout 박스 방식으로 운영 현황 기재