Loading the catalog…
Loading the catalog…
what i tried to do 지난 교육기간 동안 진행했던 프로젝트의 경험을 살려 이번엔 나만의 프로젝트을 시도해보았다. 배운 것을 활용하고 있다는 점에서 활기를 느끼고 직접 부딪히면서 무엇을 공부해야하는지, 내가 부족한 부분(maybe in all rounds)이 무엇인지, 그리고 가장 필요한 것이 무엇인지를 더 인지하고자 했다. what i did & learnd this week did 올해 상반기 작성했던 학사 논문의 실험을 여기서의 프로젝트 경험을 살려 다시 진행해보고 있다. 계획에 비해 앙상한 실험 과정과 뒤늦게 마감에 임박해 엑셀로 뽑아낸 시시한 결과물 산출표들을 다시 보니 포트폴리오로 쓰기엔 어림도 없었던 것 같다....... 개인적으로 AI선생님들과 프로젝트들을 시도하다보니 보이는 화면만 그럴듯하고 뭔가 부족함을 느끼지만 혼자서 수정하지 못하는 것에 '공부'가 진짜 부족했음을 느꼈다. 큰 그림과 코드에 대한 구조적 이해에 좀 더 비중을 두고 공부해야겠다 다짐하며 my own 교재를 만든다는 생각으로아래 벨로그 시리즈를 시작했다. https://velog.io/@olivia02/코드-독해-코드가-읽히기-시작하는-개발-기초-수학개념-for-수포자 수업 내용 RAG (검색 증강 생성)? 개념 : 질문과 관련된 외부 문서를 먼저 검색(Retrieval)한 뒤, 그 문서를 참고해 정확한 답변을 생성(Generation)하는 기술입니다. - 데이터 흐름 보기 RAG 시스템이 작동할 때 데이터는 아래와 같은 5단계의 흐름을 거치게 됩니다. 문서 로드 (Load) : PDF, 웹페이지, 데이터베이스 등 다양한 소스에서 원본 문서를 가져옵니다. 텍스트 분할 (Split) : LLM이 처리하기 좋게 문서를 적당한 크기(Chunk)로 잘게 쪼갭니다. 임베딩 및 저장 (Embedding & Vector DB) : 쪼갠 텍스트를 컴퓨터가 이해하는 숫자 형태(벡터)로 변환해 벡터 데이터베이스에 저장합니다. 검색 (Retrieve) : 사용자가 질문을 입력하면, 벡터 DB에서 질문과 가장 의미가 유사한 문서 조각을 찾아냅니다. ** 생성 (Generate)**: 사용자의 질문과 검색된 문서를 조합해 프롬프트(Prompt)를 만들고, 이를 LLM에 전달해 최종 답변을 완성합니다. LangChain? 개념 : LangChain은 LLM을 중심으로 다양한 외부 도구, 데이터, 메모리, 다른 프로그램들을 레고 블록처럼 연결(Chaining)해주는 개발용 프레임워크입니다. 비유하자면 자동차의 엔진(LLM)만 가지고는 도로를 달릴 수 없습니다. 핸들, 바퀴, 변속기, 연료탱크를 연결해 진짜 '자동차'로 만들어주는 차체 프레임(섀시)이자 조립 키트가 바로 LangChain입니다. - 역할과 핵심 기능 모델 I/O : OpenAI, Claude, 오픈소스 모델 등 다양한 LLM을 코드 변경 없이 쉽게 바꿔 끼울 수 있도록 표준화합니다. 체인 (Chains) : "문서 검색 -> 프롬프트 조합 -> LLM 전달" 같은 여러 단계를 하나의 파이프라인으로 연결합니다. 인덱스 (Indexes) : RAG 구현에 필수적인 문서 로딩, 텍스트 분할, 벡터 스토어 연동 기능을 모듈 형태로 제공합니다. 메모리 & 에이전트 : 이전 대화를 기억하게 하거나, LLM이 스스로 판단해 필요한 도구(웹 검색 등)를 쓰도록 제어합니다. pip install langchain langchain-openai faiss-cpu # 환경 변수에 OpenAI API Key 설정 필요 # export OPENAI_API_KEY="sk-..." from langchain.chains import create_retrieval_chain from langchain.chains.combine_documents import create_stuff_documents_chain from langchain_core.prompts import ChatPromptTemplate from langchain_core.vectorstores import InMemoryVectorStore from langchain_openai import ChatOpenAI, OpenAIEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter # 1. LLM 및 임베딩 모델 준비 llm = ChatOpenAI(model="gpt-4o-mini", temperature=0) embeddings = OpenAIEmbeddings(model="text-embedding-3-small") # 2. 문서 준비 및 텍스트 분할 (Split) sample_text = """ [회사 내부 규정집] 제1조(휴가) 당사의 연차 휴가는 입사일 기준으로 부여됩니다. 제2조(재택근무) 주 2회까지 재택근무가 가능하며, 팀원과 사전 조율해야 합니다. 제3조(보안) 회사 자산을 반출할 때는 반드시 보안 담당자의 승인을 받아야 합니다. """ text_splitter = RecursiveCharacterTextSplitter(chunk_size=100, chunk_overlap=20) docs = text_splitter.create_documents([sample_text]) # 3. 벡터 스토어 구축 및 검색기(Retriever) 설정 (Embedding & Vector DB) vectorstore = InMemoryVectorStore.from_documents(docs, embeddings) retriever = vectorstore.as_retriever(search_kwargs={"k": 2}) # 4. 프롬프트 템플릿 정의 (검색된 문맥을 프롬프트에 주입) system_prompt = ( "당신은 사내 규정을 안내하는 친절한 어시스턴트입니다.\n" "아래에 제공된 [문맥]을 바탕으로 질문에 답변하세요.\n" "문맥에 없는 내용은 '잘 모르겠습니다'라고 답하세요.\n\n" "[문맥]:\n{context}" ) prompt = ChatPromptTemplate.from_messages([ ("system", system_prompt), ("human", "{input}"), ]) # 5. RAG 체인 조립 (Retrieval Chain) question_answer_chain = create_stuff_documents_chain(llm, prompt) rag_chain = create_retrieval_chain(retriever, question_answer_chain) # 6. 질문 실행 및 결과 출력 response = rag_chain.invoke({"input": "재택근무는 일주일에 며칠까지 할 수 있어?"}) print("질문: 재택근무는 일주일에 며칠까지 할 수 있어?") print(f"답변: {response['answer']}") 🔍 코드 구조 한눈에 보기 - 문서 쪼개기 (RecursiveCharacterTextSplitter) : 긴 사내 규정 텍스트를 LLM과 검색기가 다루기 편한 크기로 잘게 쪼갰습니다. - 벡터화 및 저장 (InMemoryVectorStore) : 쪼갠 텍스트를 숫자로 변환해 메모리 공간에 안전하게 저장했습니다. - 검색기(retriever) : 사용자의 질문(재택근무는...)과 가장 의미가 통하는 문맥(제2조 내용)을 벡터 DB에서 쏙쏙 골라냅니다. 체인 결합(create_retrieval_chain): "검색해온 문서"와 "사용자의 질문"을 정해둔 프롬프트 틀에 맞춰 조립한 뒤, LLM에게 전달해 정확한 답변을 완성합니다. 실제 프로젝트에서는 위 코드의 InMemoryVectorStore 자리에 대규모 데이터를 견디는 Chroma, FAISS, 또는 Pinecone 같은 실제 벡터 데이터베이스를 연결하고, sample_text 대신 PDF나 웹페이지 로더를 연결하게 됩니다. looking back 6개월이라는 교육기간이 길게만 느껴지고 교육기간 동안 시간적으로나 여러가지면에서 하지 못하는 것에만 아쉬워했는데 벌써 날씨는 서늘해지고 과정의 절반 가까이 지나갔다. 부수적인 것에 아쉬움을 느끼면서도 지금의 온전히 공부할 수 있는 시기와 시간, 교육장에서 내가 얻어갈 수 있는 것들 중에 놓친게 많음을 더더 느끼고 있다. 뭐가 되었든 공부에 집중할 수 있는 이 시기를 헛되이 보내지 않겠다 다짐하며 새로운 주차를 시작하겠따!
What RADAR observed and classified to build this opportunity. It is what the source published, not a verification that the offer is still active.
[SK Networks Family AI camp] 12주차 회고. what i tried to do 지난 교육기간 동안 진행했던 프로젝트의 경험을 살려 이번엔 나만의 프로젝트을 시도해보았다. 배운 것을 활용하고 있다는 점에서 활기를 느끼고 직접 부딪히면서 무엇을 공부해야하는지, 내가 부족한 부분(maybe in all rounds)이 무엇인지, 그리고 가장 필요한 것이 무엇인지를 더 인지하고자 했다. what i did & learnd this week did 올해 상반기 작성했던 학사 논문의 실험을 여기서의 프로젝트 경험을 살려 다시 진행해보고 있다. 계획에 비해 앙상한 실험 과정과 뒤늦게 마감에 임박해 엑셀로 뽑아낸 시시한 결과물 산출표들을 다시 보니 포트폴리오로 쓰기엔 어림도 없었던 것…
Open source