SKS 공부 - 2025-11-11

SKS 홈으로
12회차 공부

한줄요약:
    보안데이터 기반 LLM 서비스 프레임워크의 이해(RAG) - LangChain은 LLM(예: OpenAI)의 성능을 향상시키는 핵심 프레임워크로, 질문을 임베딩하여 FAISS 벡터 데이터베이스에서 관련 문서를 검색(RAG)하고 이 정보를 LLM에 전달해 답변의 정확성과 신뢰성을 높이는 시스템을 구축하며, 이를 Streamlit을 통해 대화형 웹 애플리케이션으로 쉽게 배포할 수 있습니다.
    
    					

오늘 공부한 내용:
    제공해 주신 코드를 기반으로 LLM, RAG, LangChain 기초를 다지기 위한 핵심 개념과 코드 요약을 정리해 드립니다. 특히 RAG 파이프라인의 구성 요소와 Streamlit 연동에 초점을 맞춥니다.
    
    💡 LLM, RAG, LangChain 기초 다지기
    1. 🤖 LLM (Large Language Model) 기본 활용 및 보안 가이드
    LLM은 문맥을 이해하고 자연어로 답변할 수 있는 인공지능 모델입니다.
    
    API 연동: openai 라이브러리의 OpenAI 클라이언트를 사용하며, **dotenv**를 통해 API 키를 환경 변수(.env)에서 안전하게 로드합니다.
    
    보안 시스템 프롬프트 (System Prompt): LLM의 행동 방식과 응답 규칙을 정의하여 출력의 일관성을 확보합니다.
    
    역할 정의: "당신은 친절한 파이썬 보안 도우미입니다."
    
    응답 원칙: "보안 모범 사례를 우선으로 설명하고, 민감 정보 노출을 방지하는 방법...을 구체적 명령어와 체크리스트 형태로 제공하십시오."
    
    금지 사항: "응답에 실제 비밀번호나 실사용 API 키를 절대 포함하지 마십시오." (Hallucination 방지 및 보안 강화)
    
    2. 🧠 RAG (Retrieval Augmented Generation) 파이프라인
    RAG는 LLM의 약점(최신성 부족, 환각)을 보완하기 위해 **외부 지식(문서)**을 검색하여 답변의 근거로 제공하는 기술입니다.
    구성 요소,LangChain 클래스,역할 및 기능
    외부 문서,list (문자열),"LLM이 참고할 지식의 원천 (예: 리스트는 변경 가능, 튜플은 변경 불가능)."
    문서 분할,CharacterTextSplitter,긴 문서를 **일정한 크기(chunk_size)**로 나누어 효율적인 검색을 준비.
    임베딩,OpenAIEmbeddings,텍스트 조각을 **벡터(숫자 배열)**로 변환하여 의미적 유사도를 측정할 수 있게 함.
    벡터 DB,FAISS,"임베딩된 벡터를 저장하고, 질문 벡터와 유사한 문서를 고속으로 검색하는 저장소. (FAISS.from_documents()로 DB 구축)."
    검색기,.as_retriever(),벡터 DB를 LLM 체인에 연결할 수 있는 검색 인터페이스로 변환. (search_kwargs={'k': 1}은 가장 유사한 문서 1개를 반환).
    체인,RetrievalQA.from_chain_type,LLM (ChatOpenAI)과 검색기를 연결하여 RAG 프로세스를 완성. 사용자의 질문을 받아 검색 → 참조 → 답변 생성의 전체 흐름을 관리.
    
    3. 🌐 Streamlit을 활용한 LLM/RAG 웹 앱 통합
    Streamlit은 RAG 시스템을 사용자 친화적인 웹 인터페이스로 빠르게 구현하는 데 사용됩니다.
    
    RAG 챗봇 (view() 함수):
    
    st.title(): 웹 페이지 제목.
    
    st.text_input('질문을 입력하세요 : '): 사용자로부터 질문을 입력받는 위젯.
    
    qa.run(query): 입력된 질문을 LangChain RAG 체인에 전달하여 답변을 얻습니다.
    
    st.caption('R - '+ retriever.get_relevant_documents(query)[0].page_content): RAG가 실제로 참고한 외부 문서 내용을 사용자에게 투명하게 보여줍니다.
    
    보안 로그 분석 대시보드 (view() 함수):
    
    st.file_uploader(): 사용자가 .csv 형식의 로그 파일을 업로드하도록 허용합니다.
    
    LLM을 통한 데이터 분석: 업로드된 DataFrame의 일부(frm.head(20).to_dict())를 **user_content**로 만들어 LLM에 전달합니다. LLM은 이를 분석하고 약속된 JSON 형식({"ip": "", "country": "", "attack_type": "", "risk_score": ""})으로 분석 결과를 반환합니다.
    
    결과 파싱: json.loads(response.choices[0].message.content)를 통해 LLM의 문자열 응답을 파이썬 객체로 변환한 뒤, **pd.DataFrame(data)**로 만들어 시각적으로 보기 좋게 출력합니다.
                        
노트북 전체보기
전체화면 코드