2025.11.11 (Day 12) LangChain · Streamlit 기반 OpenAI Dashboard 구축#
1. 주요 개념 요약#
- RAG (Retrieval-Augmented Generation): 외부 문서 데이터베이스에서 관련 정보를 검색(Retrieve)한 후, LLM의 응답 생성을 보강(Augment)하는 구조이다. 단순 모델 호출이 아닌 “검색 가능한 지식창고 + LLM” 구조를 구축하는 것이 핵심이다.
- FAISS 벡터스토어: 문서 임베딩을 벡터 공간에 저장하고, 질의(query)와 가장 유사한 벡터를 빠르게 검색하는 라이브러리이다.
- OpenAI Embeddings API: 텍스트를 고차원 벡터로 변환하는 임베딩 모델(
text-embedding-3-small 등)로, RAG의 ‘Retrieve’ 단계 검색 정확도를 결정한다. - LangChain Text Splitter: 긴 문서를 일정 크기 단위의 청크(chunk)로 나누어 효율적인 검색 및 문맥 기반 답변을 가능하게 한다.
- Streamlit 대화형 UI 구성: 사용자 텍스트 입력 → LLM 질의 → 결과 출력 과정을 웹 인터페이스로 구현하여 직관적인 보안 대시보드형 어시스턴트로 발전시킬 수 있다.
2. 실습 코드 및 응용#
A. 문서 분할 및 벡터 임베딩#
- 문서 분할과 벡터 임베딩을 통해 단순 텍스트를 검색 가능한 지식 벡터 공간으로 변환한다. 이는 RAG의 ‘Retrieve’ 단계의 핵심이며 검색 정확도를 결정짓는다.
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
docs = [
'리스트는 변경 가능한 자료형입니다.',
'튜플은 변경 불가능한 자료형입니다.',
'딕셔너리는 키와 값으로 데이터를 저장합니다.'
]
splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = splitter.create_documents(docs)
embeddings = OpenAIEmbeddings(openai_api_key=api_key, model='text-embedding-3-small')
db = FAISS.from_documents(texts, embeddings)
B. RAG 기반 LangChain 체인 구성#
RetrievalQA를 활용해 벡터스토어 검색 결과와 LLM 응답 생성을 파이프라인으로 연결한다. 보안 로그 질의 시스템, SOC 대시보드, 정책 검색 도우미 등으로 확장 가능하다.
from langchain.chains import RetrievalQA
from langchain.chat_models import ChatOpenAI
retriever = db.as_retriever(search_kwargs={"k": 1})
qa = RetrievalQA.from_chain_type(
llm=ChatOpenAI(model_name="gpt-4o-mini", temperature=0.9),
chain_type="stuff",
retriever=retriever
)
query = "파이썬에서 리스트와 튜플의 차이는?"
answer = qa.run(query)
print(answer)
C. Streamlit UI 구현#
- Streamlit을 통해 질문 입력 → RAG 검색 → LLM 응답 확인을 직관적인 대화형 인터페이스로 전환한다.
import streamlit as st
st.title('LangChain + RAG 기반 OpenAI Dashboard')
query = st.text_input('질문을 입력하세요 : ')
if query:
with st.spinner('데이터베이스 검색 중...'):
qa, retriever = ask_gpt()
answer = qa.run(query)
st.success('A - ' + answer)
st.caption('R - ' + retriever.get_relevant_documents(query)[0].page_content)
3. 보안 관점 분석#
- SOC / 관제: 실시간 로그·이벤트 데이터를 벡터로 저장하고 LLM 질의를 통해 이상 로그 요약·검색·설명을 수행하여 탐지 효율을 향상시킨다.
- CERT / 사고대응: 사고 시점의 로그를 검색 가능한 벡터로 관리하여 공격 경로 및 이전 유사 사고를 빠르게 조회하고 사고 원인 분석을 자동화한다.
- DevSecOps: 빌드 로그, 테스트 결과, 취약점 리포트를 RAG로 관리하여 개발자가 자연어로 검색할 수 있는 환경을 구축하고 자동 보고 시스템으로 발전시킨다.
- 취약점 진단 / 펜테스트: 과거 스캔 결과와 취약점 패턴을 기반으로 질의형 검색을 수행하여 자동 리포트 초안을 작성하고 중복 검출을 강화한다.
- 디지털 포렌식: 덤프·로그 데이터를 벡터화하여 증거 탐색을 자동화하고 데이터 범위를 축소하여 포렌식 효율을 높인다.
4. 요약#
- LangChain의
RetrievalQA는 RAG 기반 검색-응답 구조의 중심축으로, 외부 지식을 검색·활용하는 보안형 Dashboard 구축의 핵심 컴포넌트이다. - Streamlit UI를 통해 보안 로그나 정책 문서를 대화형 분석 도구로 전환할 수 있음을 확인했다.
FAISS 외에도 Chroma, Milvus 같은 대규모 벡터 DB로 확장하면 실시간 SOC 질의형 어시스턴트로 발전시킬 수 있다.