세션 데이터 저장 구조
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 경로 구분자 차이 대응
- 데이터 무결성: 감사 목적 사용 시 해시 값 또는 디지털 서명 추가 고려