Langchain-Chatchat의 질의응답 세션 내보내기 및 데이터 마이그레이션 구현 방법

세션 데이터 저장 구조

Langchain-Chatchat은 사용자와 AI 간의 대화 세션을 JSON 형식으로 파일 시스템에 저장합니다. 각 세션은 고유 식별자로 구분되며, 다음과 같은 디렉토리 구조를 가집니다:

대화기록/
└── 세션_20241015_a1b2c3/
    └── 기록.json

기록.json 파일은 다음과 같은 구조로 구성됩니다:

{
  "세션_식별자": "세션_20241015_a1b2c3",
  "생성_시각": "2024-10-15T09:30:22.123456",
  "메시지_목록": [
    {
      "역할": "사용자",
      "내용": "회사 비용 처리 절차는 무엇인가요?",
      "타임스탬프": "2024-10-15T09:30:25.123456"
    },
    {
      "역할": "어시스턴트",
      "내용": "재무 관리 규정 V3.2에 따르면, 직원은 전자 영수증을 OA 시스템에 제출해야 합니다...",
      "타임스탬프": "2024-10-15T09:30:28.123456"
    }
  ]
}

세션 내보내기 기능

Langchain-Chatchat은 다양한 형식으로 세션 데이터를 내보낼 수 있는 기능을 제공합니다:

CSV 형식 내보내기

import csv

def csv로_내보내기(메시지들, 출력_파일):
    with open(출력_파일, 'w', newline='', encoding='utf-8') as 파일:
        작성기 = csv.writer(파일)
        작성기.writerow(["발신자", "메시지", "시간"])
        for 메시지 in 메시지들:
            작성기.writerow([메시지["역할"], 메시지["내용"], 메시지["타임스탬프"]])

Markdown 형식 내보내기

def 마크다운으로_내보내기(메시지들, 출력_파일):
    with open(출력_파일, 'w', encoding='utf-8') as 파일:
        파일.write("# AI 대화 기록\n\n")
        for 메시지 in 메시지들:
            역할 = "👤 사용자" if 메시지["역할"] == "사용자" else "🤖 도우미"
            파일.write(f"**{역할}**\n\n{메시지['내용']}\n\n---\n\n")

지식베이스 구성 및 마이그레이션

지식베이스는 문서 파싱, 텍스트 분할, 벡터 변환의 3단계 과정을 통해 구축됩니다:

# 벡터 임베딩 생성 예제
임베딩 = HuggingFaceEmbeddings(모델_이름="BAAI/bge-small-zh-v1.5")

생성된 벡터 인덱스는 다음과 같은 구조로 저장됩니다:

벡터저장소/
└── faiss_인덱스/
    ├── 인덱스.faiss
    ├── 인덱스.pkl

데이터 마이그레이션 절차

전체 데이터 마이그레이션은 다음 디렉토리를 복사하는 방식으로 수행됩니다:

  • knowledge_base/ - 원본 문서 파일
  • vectorstore/ - 벡터 인덱스 파일
  • chats/ - 세션 기록
  • configs/ - 사용자 설정
# 데이터 백업 및 복원 예제
tar -czf 랭체인-데이터.tar.gz knowledge_base/ vectorstore/ chats/ configs/

실제 운영 시 고려사항

  • 디스크 공간 관리: 장기간 운영 시 세션 파일이 누적되므로 정기적인 정책 필요
  • 접근 제어: 민감 정보가 포함된 디렉토리에 대한 권한 관리
  • 플랫폼 간 호환성: Windows와 Linux 경로 구분자 차이 대응
  • 데이터 무결성: 감사 목적 사용 시 해시 값 또는 디지털 서명 추가 고려

태그: Langchain-Chatchat 데이터마이그레이션 세션관리 벡터데이터베이스 JSON내보내기

10월 10일 12:59에 게시됨