프로그래밍 398

Langchain으로 간단한 RAG 구현하기

Langchain으로 소설 "난쟁이가 쏘아올린 작은 공" PDF 문서에 대한 답변을 제공해 줄 수 있는 간단한 RAG 애플리케이션을 구현했다. (코드에 대한 설명은 Gist 주석으로 대신한다.) 아직 잘 모르는 상태로 무작정 다이브했으니, 간단하게 개념을 정리하겠다. LLM이 답변을 지어내는 것을 방지하고, 커스텀한 컨텍스트 제공을 위해 LLM을 이용한 챗봇에는 검색증강생성(RAG)라는 기술을 사용한다. RAG 애플리케이션은 일반적으로 두 구성요소로 이루어진다. 1. 인덱싱(Indexing) - 소스에서 데이터를 수집하고 인덱싱하는 과정2. 검색과 생성(Retrieval and generation) - 유저에게 쿼리를 받아서 인덱스에서 관련 데이터를 찾아 모델에게 전달하는 실질적인 RAG 체인이다. 인..

벡터 임베딩(Vector Embedding)

AI 모델이 사용하는 모든 데이터는 숫자로 표현되어이햔다. 텍스트, 오디오, 비디오 같은 비정형 데이터를 모두 -1과 1 사이의 숫자로 표현하는 방법을 벡터 임베딩이라고 한다. AI 모델은 단어 사이의 거리를 계산해서 가장 가까운 단어를 조합하는 방식을 사용한다. 각 단어를 수치화 하여 이 단어들을 다차원 공간에서 점으로 표현하면 문맥상 관련된 단어는 서로 가까운 벡터를 갖게된다. 이러한 표현은 AI 모델이 데이터의 유사점과 차이점을 이해하는데 도움이 된다.

LLM의 뜻과 한계 (할루시네이션, 지식단절현상)

Large Language Model - 방대한 양의 데이터로 사전 학습된 초대형 딥 러닝 모델. 트랜스포머 모델이라고 하는 일종의 신경망을 기반으로 한다. 트랜스포머 모델트랜스포머 모델은 문장 속 단어와 같은 순차 데이터 내의 관계를 추적해 맥락과 의미를 학습하는 신경망 예측할 수 없는 쿼리에 대해 대응 할 수 있고, 구조화되지 않은 질문이나 프롬프트에도 답변할 수 있다. 하지만 LLM은 수집하는 데이터만큼만 신뢰할 수 있는 정보를 제공하므로, 정확한 답변을 내놓을 수 없을때면 가짜 정보를 생성한다. 이를 "할루시네이션(Hallucination)"이라고 한다. 대표적으로 유명한 "세종대왕 맥북 던짐사건"짤이 있다. AI 모델은 확률을 사용하여 어떤 단어나 시각적 요소가 나타날지 '예측'하는데하므로 일부..

DASHI - 키워드 알림 업데이트

얼마전 뜨거운 순간 기능을 업데이트하면서, DB도 추가하고 채팅 처리 파이프라인을 따로 빼면서 평소 해보고 싶었던 기능을 추가해보기로 했다. 그건 바로 키워드 알림! 예를 들어서 내가 스트리머가 "발헤임"이라는 게임을 정말 해주길 기다리고있는데, 채팅에서 "발헤임"이라는 키워드가 나왔을 경우 정말 그것과 관련한 이야기를 하고 있을 확률이 높다. 이렇게 내가 방송을 보지 못하는 순간에도 관련된 키워드가 언급되었는지 확인 하기위한 용도로 은 유용하게 쓰일 수 있다. Discord로 로그인키워드 알림기능을 오랫동안 망설였던 이유 중의 80%는 이 서비스에 'DB가 없었다'였지만, 20%는 '로그인이 없었다'였다. 그렇다! 로그인을 추가해야한다. 단순히 유저 식별만 가능하면되므로, Discord OAuth2를 ..

Alembic으로 쉽게 DB 마이그레이션하기

Alembic 도입 계기개발하고 있는 토이 프로젝트에 (정말정말 귀찮지만-) DB를 도입했다.최대한 기술스택을 간단하게 가져가고싶었지만 더 풍부한 기능지원을 위해 굴복했다. Python ORM 라이브러리 SQLAlchemy를 도입했는데, 계속 테이블을 수정하면서 수동 마이그레이션에 한계가 있다고 느껴서 찾아보니 Alembic이라는 SQLAlchemy 사용자용 DB 마이그레이션 툴이 있더라. 회사에서 백엔드 코드를 눈팅하면서 본 마이그레이션 파일들이 이녀석이 만든것이었다. 사용하기도 간편해서 다음번에 또 쓸 것 같아 간단히 사용법을 기록하겠다. 시작하기초기화Alembic을 사용하기에 앞서, 아래 명령어로 초기화하면 설정 파일인 alembic.ini 파일과 Alembic 프로젝트가 만들어진다.alembic ..

수직 동기화(V-Sync), 화면 찢김, 스터터링, 삼중 버퍼링

주사율과 프레임률주사율은 화면 재생 빈도(Refresh Rate)라고도 하며, 모니터가 1초동안 화면을 몇 번 갱신하는지를 말한다. 단위로는 Hz를 사용하며 144Hz는 1초에 화면을 144단계로 쪼개서 보여줄 수 있다는 의미다. CRT 모니터에서는 이를 수직 재생 빈도 또는 수직 주파수라고 부른다. 프레임 속도(Frame Rate)또는 프레임률은 디스플레이 장치가 화면 하나의 데이터를 표시하는 속도를 말한다. 픽셀들로 이루어진 하나의 정지된 이미지를 "프레임"이라고 부르는데, 프레임률은 이러한 이미지들이 1초에 몇번 보이는지를 말한다. 단위는 fps(Frames per second)를 사용한다. 주사율은 동일한 프레임을 반복하는 회수를 포함하여 나타내므로, 60fps 영상을 120Hz 디스플레이에서 는..

DASHI - 뜨거운 순간 업데이트

쉬면서 엉덩이가 무거운 상태로 있더라도 언제나 문제를 풀 방법을 찾았을땐 힘이난다. 카페에서 스트리머의 프로핏을 개선하려면 어떻게 해야할지 고민하면서 책을 읽고있다가 뜬금없이 얼마전에 봤던 슬라이딩 윈도우(Sliding Window) 알고리즘을 이용한 이상현상 감지법이 생각났다. (글로 적고나니까 진짜 ADHD 미쳤다...ㅋㅋㅋㅋㅋ) 즉시 책을 덮고 카페를 떠나 컴퓨터를 켜서 작업을 시작했다.방송을 보다보면 웃긴 장면에는 "ㅋㅋㅋㅋ"가 도배되면서 채팅이 단시간에 폭발한다. 채팅이 버스트하는 구간들을 슬라이딩 윈도우를 이용해 잡아내면 유튜브 편집 영상 당 투입되는 시간을 줄여서 영상 단가를 줄여버릴 수 있을 것 같다는 생각. 편집점을 찾는데 뿐만 아니라 다시보기를 보는 시청자도 놓쳐버린 방송에서 어느 부..

크로미움(Chromium), 그리고 브라우저 엔진들

Chromium 크로미움(Chromium)은 구글이 주도하는 오픈소스 웹 브라우저 및 OS 프로젝트의 이름이다. 구글의 크롬도 크로미움 소스코드를 기반으로 만들어진 것이며 많이들 쓰는 엣지, 웨일, 브레이브, 오페라 등의 브라우저도 크로미움 기반이다. 크로미움 브라우저와 OS는 https://www.chromium.org/chromium-projects/ 에서 직접 다운받아 볼 수 있다. 그러면 대부분의 브라우저가 크로미움아닌가? 의문이 든다.당연히 아니다! 브라우저 엔진부터 간단히 짚고 다른 브라우저들도 소개해 보겠다. 브라우저 엔진브라우저 엔진은 브라우저가 동작하는데 필요한 핵심 구성요소다. HTML,CSS,XML등 의 문서를 읽고 사용자가 볼 수 있는 화면으로 표시하는 "렌더링 엔진" 혹은 "레이아..

QR코드의 구성

중국에 잠깐 경유하며 여행을 했을때 느꼈던 놀랍고도 편리한 점 중하나는 QR코드가 모든 분야에서 사용되고 있었다는 것이다. 대만 여행차 들렀기때문에 중국 돈은 한 푼도 없었지만 지하철도 타고, 가챠도 할 수 있었고 음식점, 편의점까지 휴대폰 하나만 딸랑들고 가능했다.  QR코드의 QR은 Quick Response의 줄임말이라고 한다. 무려 1994년, 일본에서 개발되었는데 본격적으로 사용되기 시작한 건 스마트폰의 등장 이후다. QR코드의 구성 이 이미지가 QR코드의 구성요소를 가장 잘 설명해주고 있어서 들고왔다.  1. 경계 또는 마진 (Quiet Zone)QR코드의 원활한 인식을 위해 반드시 필요한 여백이다. 2. 파인더 또는 위치 지정 패턴(Positioning Pattern/Marker)QR코드의 ..