요약 이번 프로젝트는 단기 미니 프로젝트로써, 3일 내에 다음 사양을 완성함에 있다. 서보모터 1기, BLDC 모터 1기를 사용하여 공기 팬을 작동하게 함 ESP32 CAM을 사용하여 영상을 입력받고, YOLO11n을 사용하여 사람을 추적함 자동으로 모터를 조정하여 PWM 제어를 통해 방향을 조절하여 360도 전 방향으로 추적하여 공기 팬을 사람에게 향하게 한다. 저전력 엣지 디바이스를 지향하여 resberry pi 5를 사용하여 모델을 싣어 추론하게 한다. 20260930 실행 내역 yolo11n을 실증하였음. 영상에서 가장 가까운 바운딩 박스 - 즉 가장 큰 바운딩 박스로 인지된 객체의 중앙 좌표 x값을 얻어서 stm32로 전송하였음. stm32에 연결하여 esp32에서 얻은 좌표와 객체 숫자를 가져왔음, led로 인지가 되는지 하드웨어적으로 실증함.
RAG 평가가 필요한 이유 RAG 시스템은 단순히 답변이 자연스럽게 생성되는지만 확인해서는 충분하지 않습니다. RAG의 핵심은 질문과 관련된 정보를 검색하고, 검색된 정보를 근거로 답변을 생성하는 것이기 때문입니다. 따라서 다음과 같은 질문을 확인할 필요가 있습니다. 검색된 문서가 질문과 관련되어 있는가? 필요한 정보가 검색 결과에 포함되어 있는가? 생성된 답변이 검색된 문서를 근거로 하고 있는가? 답변이 사용자의 질문에 적절하게 답하고 있는가? RAGAS는 이러한 RAG 시스템의 품질을 여러 평가 지표를 통해 정량적으로 확인할 수 있도록 도와줍니다. 이번 실습의 평가 지표 지표 의미 Context Precision 검색된 Context 중 질문에 관련된 정보가 얼마나 잘 포함되어 있는지 평가 Context Recall 정답에 필요한 정보가 검색된 Context에 얼마나 포함되어 있는지 평가 Faithfulness 생성된 답변이 검색된 Context에 근거하고 있는지 평가 Answer Relevancy 생성된 답변이 질문에 얼마나 적절하게 답하고 있는지 평가 RAGAS 평가 데이터 구성 RAGAS 평가를 위해 다음과 같은 데이터를 준비했습니다. user_input 질문 retrieved_contexts Retriever가 검색한 문서 response RAG가 생성한 답변 reference 평가를 위한 기준 답변 이 구조를 실제 RAG 시스템에 적용하면 다음과 같습니다. Question ↓ Retriever ↓ Retrieved Context ↓ LLM ↓ Response ↓ RAGAS 4. 실제 RAG 테스트 평가 점수를 계산하기 전에 검색 결과와 생성 답변을 직접 확인하는 테스트를 추가했습니다. 질문 ↓ 검색된 Context 확인 ↓ 생성된 답변 확인 이 과정을 통해 단순히 숫자만 보는 것이 아니라 RAG가 어떤 정보를 검색하고 어떤 답변을 생성했는지 직접 확인할 수 있습니다. 검색 Context가 부족한 경우 이번 실습에서는 의도적으로 PER에 대한 정보가 없는 Context를 구성했습니다. 질문 PER이란 무엇인가? 검색 결과 삼성전자에 대한 설명 반도체 산업에 대한 설명 답변 PER은 주가를 EPS로 나눈 값입니다. 답변 자체는 일반적인 지식으로는 맞을 수 있습니다. 하지만 RAG의 관점에서는 문제가 있습니다. 검색된 Context에 PER에 대한 근거가 없기 때문입니다. 즉, 검색 결과에 근거한 답변 X LLM의 일반적인 지식을 이용한 답변 O 와 같은 상황이 발생할 수 있습니다. 이러한 문제를 RAGAS의 faithfulness 등의 지표를 이용하여 정량적으로 확인할 수 있습니다. Context를 개선한 후 다시 평가 이후 PER에 대한 설명과 EPS에 대한 설명이 포함된 Context를 제공하고 동일한 질문을 다시 평가했습니다. 이 과정에서 중요한 것은 개선 전과 개선 후에 동일한 질문과 평가 기준을 사용하는 것입니다. 그래야 RAG 구성 변경에 따른 차이를 비교하기 쉽습니다. RAG 평가에서 중요한 점 이번 실습을 통해 RAG 평가를 다음과 같은 반복 과정으로 구성할 수 있음을 확인했습니다. RAG 구축 ↓ 테스트 질문 준비 ↓ 검색 결과 확인 ↓ 답변 확인 ↓ RAGAS 평가 ↓ 문제점 분석 ↓ RAG 개선 ↓ 동일한 테스트셋으로 재평가 ↓ 결과 비교 따라서 RAGAS는 단순히 최종 점수를 확인하는 도구라기보다, RAG 시스템의 문제를 발견하고 개선하는 평가 루프를 만드는 데 활용할 수 있습니다. 실제 프로젝트에 적용한다면 이번 실습에서는 이해를 위해 Context를 직접 입력했습니다. 실제 RAG 프로젝트에서는 다음과 같이 연결할 수 있습니다. PDF / 문서 ↓ Document Loader ↓ Text Splitter ↓ Embedding ↓ Vector DB ↓ Retriever ↓ Retrieved Context ↓ LLM ↓ Answer ↓ RAGAS 그리고 테스트 데이터셋을 별도로 관리합니다. questions.json 질문 1 질문 2 질문 3 ... 각 질문에 대한 기준 답변도 준비해 두면 RAG를 수정할 때마다 동일한 테스트셋으로 반복 평가할 수 있습니다.
들어가기 전에 우리가 집 와이파이에 노트북과 핸드폰을 연결했다고 해보자. 둘은 같은 집 와이파이에 연결되어있으니 뭔가 같은 네트워크에 있는것처럼 보인다 그런데 만약 142.250.xxx.xxx 이런 서버가 있고, 내 노트북이 이 주소를 보고 어떻게 얘는 같은 네트워크네! 혹은 얘는 우리 네트워크 밖이니까 공유기한테 보내야겠다! 를 판단할까? 그 역할이 바로 오늘 공부할 Subnet Mask이다. 1. Subnet이 왜 필요할까? 지난시간에는 IP가 네트워크, 호스트로 이루어져 있다고 했다. 여기서 네트워크란 어느 네트워크에 속해있나? 호트스는 그 네트워크 안에서 어떤 장치인가? 로 나탄댄다. 그래서 저번에 주소로 비유하자만 서울시 동작구가 네트워크라면, 101동 524호는 호스트같은 느낌이다. 그런데 ip주소만 보고는 어디까지가 네트워크인기 확신할 수 없다. 그래서 하나의 정보가 더 필요한데, 그게 바로 subnet mask이다! 2. Subnet Mask란? subnet mask : 255.255.255.0 ip : 192.168.0.10 이라면, subnet mask가 알려주는 것은 ip 주소에서 어디까지가 네트워크 영역이냐~ 즉, 11111111.11111111.11111111.00000000이고 1인 부분까지가 네트워크, 나머지는 host다~라는것! bit 단위로 network, host경계를 표시하는 값 3. Network 주소는 어떻게 구할까? 여기서 중요한 AND 연산이 등장한다. AND는 둘다 1일때만 1임을 알고가자~ 아까처럼 subnet mask : 255.255.255.0 ip : 192.168.0.10 마지막만 이진수로 보자면, 10 = 00001010 0 = 00000000 AND 연산을 하면 00000000, 즉 mask값이 다 0이기 때문에 모두 0으로 나온다.그리고 앞 부분은 255니까 다 ip값 대로! 그래서 AND 연산을 한 결과값인 192.168.0.0이 바로 network 주소이다! 다시 말하면, 192.168.0.10이라는 장치는 192.168.0.0이라는 네트워크에 속한것 4. 그래서 같은 네트워크 인지 어떻게 판단할까? 처음으로 돌아가서, 노트북 :192.168.0.10 Subnet Mask: 255.255.255.0 핸도폰 : 192.168.0.20 Subnet Mask: 255.255.255.0 각각 network 주소를 구해보면 192.168.0.0 이다. 즉 결과가 같으니까 같은 네트워크에 있다는것 그럼 이번에는 노트북 :192.168.0.10 Subnet Mask: 255.255.255.0 아이패드 : 192.168.1.20 Subnet Mask: 255.255.255.0 각각 구해보면 노트북은 동일하게 192.168.0.0, 아이패드는 192.168.1.0으로 network 주소가 다르다. 그렇다면 노트북과 아이패드는 서로 다른 네트워크에 속해있다! 5. 같은 네트워크, 다른 네트워크가 왜 중요할까? 내 컴퓨터가 어떤 ip로 데이터를 보내려고 하면 먼저 판단하는것이 "목적지가 나와 같은 네트워크인가?" 이다. 아까처럼 노트북과 핸드폰처럼 같은 네트워크라면 라우터까지 갈 필요 없이 같은 로컬 네트워크 안에서 상대방에게 전달하면된다. -> 나중에 배울 ARP를 사용해서 ! 다른 네트워크라면, 내 컴퓨터는 헉! 내가 직접 전달할수 없군. 하고 Default gateway로 넘겨준다. 6. CIDR이란? 실제로 네트워크 설정에서는 255.255.255.0 보다는 192.168.0.0/24이런걸 더 자주 보는데, 이 뒤에 /24가 바로 CIDR prefix라는 것! subnet mask에서 255.255.255.0은 2진수로 바꿔서 1의 개수를 세면 24개이다 /24 -> 앞에 24비트를 네트워크로 사용할 수 있다 를 표현해준것! /8-> 앞에 8비트를 네트워크로 사용할 수 있다 =255.0.0.0 .. 7. /24이면 호스트는 몇개일까? 앞에 24비트가 네트워크라면 남은 8비트가 호스트로 사용할 수 있다. 그러면 2^8 = 256이니까 192.168.0.0~192.168.0.255라면 256개의 주소를 모두 사용할 수 있을까?! 특별한 주소 1. network address 192.168.0.0은 네트워크 주소이다. 즉 이것은 특정 장치를 의미하는게 아니라 네트워크 자체를 나타내기에 일반 장치에 할당하지 않는다. 특별한 주소 2. broadcast address 192.168.0.255인 반대쪽 끝은 브로드캐스트 = 같은 네트워크에 있는 모든 장치에게 보내기! 의 용도이다. 그래서 이 친구도 일반 장치에 할당하지 않는다. 그래서 실질적으로 사용가능한 주소는 256-2 = 254개가 된다. 좀 더 일반화 시키면 2^hostbit -2 8. 그런데 하나의 네트워크를 더 작게 나누고 싶다면? 지금까지는 192.168.0.0/24라는 하나의 네트워크를 기준으로 봤다. 그런데 만약 이 하나의 네트워크를 여러 개의 더 작은 네트워크로 나눠서 사용하고 싶다면? 그럴 때 Host 영역으로 쓰던 bit 일부를 Network 영역으로 가져오면 된다. 예를 들어 Host 영역 8bit 중 2bit를 Network 영역으로 가져와서 /26을 사용한다면 /24를 /26으로 바꾼다는 것은 IP 주소 자체를 바꾸는 것이 아니라, Network와 Host를 나누는 경계를 24bit에서 26bit로 옮긴다는 뜻이다. 그리고 호스트는 네트워크에 아까와 다르게 2개를 줬기 때문에 2^6, 즉 한 네트워크에서 만들 수 있는게 64개씩이 된다. 네트워크로 가져온 2비트에 들어갈 수 있는건 00,01,10,11 이렇게 4개이고, 각각 뒤에 호스트 6비트를 붙인다. 1) 앞 2 비트 00 ~ 호스트가 전부 0 이면 -> 0 , 호스트가 전부 1이면 -> 63 -> 그래서 0 63 2) 앞 2비트 01 ~ 호스트가 전부 0이면 ->64, 호스트가 전부 1이면 -> 127 -> 그래서 64 127 3) 앞 2비트 10 ~ 호스트가 전부 0이면 -> 128, 호스트가 전부 1이면 -> 191 -> 그래서 128 191 4) 앞 2비트 11 ~ 호스트가 전부 0이면 -> 192, 호스트가 전부 1이면 ->255 -> 그래서 192 255 최종적으로 192.168.0.0 ~ 192.168.0.63 192.168.0.64 ~ 192.168.0.127 192.168.0.128 ~ 192.168.0.191 192.168.0.192 ~ 192.168.0.255 이렇게 4개의 서브넷이 생긴다! 처음에 192.168.0.0/24 -> 하나였던 거를 이렇게 192.168.0.0/26 192.168.0.64/26 192.168.0.128/26 192.168.0.192/26 4개로 쪼갠것~ 이게 바로 서브넷팅이다!1 하나의 큰 네트워크 를 작은 네트워크 여러개로 나누는것 9. 이렇게 하는 이유는? 전부 하나의 네트워크에 넣을 수 있겠지만, 규모가 커지면 팀별 네크워클 나눠서 사용한다.