내 잡다한 노트
Cursor 동작 원리 본문
다이어그램의 구성
1. 주요 구성 요소
- Actor: 일반적인 사용자입니다. 코딩 작업을 수행하거나, 질문(Query)을 입력하여 도움을 받으려고 합니다.
- 클라이언트: 사용자(Actor)가 작업을 수행하는 로컬 환경입니다. 코드 작성, 코드베이스 조회, 쿼리 입력 등을 처리합니다.
- 서버: 코드를 분석하고, 임베딩을 생성하여 벡터 데이터베이스(Vector DB)에 저장하거나 검색을 수행하는 백엔드 서버입니다.
2. 주요 흐름과 동작
1) 일반적인 코딩 작업
- 사용자가 코딩을 수행합니다.
- 프라이버시 모드 ON/OFF:
- ON: 코드를 벡터 DB에 전송하거나 저장하지 않음(사용자 데이터가 보호됨).
- OFF: 코드를 분석(Chunking)하여 서버로 전송, 벡터 DB에 인덱싱.
2) 코드 분석 및 저장
(a) Chunking
- 코드를 분석하여 **작은 단위(Chunk)**로 나눕니다.
- 예를 들어, 함수, 클래스, 주석 단위로 분리.
- 이 과정은 효율적인 검색과 임베딩 생성을 위해 필요합니다.
(b) Embedding (임베딩 생성)
- 각 코드 Chunk를 숫자 벡터로 변환합니다.
- OpenAI API 같은 자연어 처리 모델을 활용하여 의미를 담은 벡터를 생성.
- 예: 함수 "add(a, b)" → [0.23, 0.87, 0.11...]와 같은 벡터.
(c) Indexing
- 생성된 벡터를 **Vector DB(Pinecone)**에 저장.
- 함께 저장되는 정보:
- 코드 조각의 벡터 값.
- 파일 이름 및 줄 번호.
- 파일의 메타정보.
3) 코드베이스를 활용한 검색
(a) 쿼리 입력
- 사용자는 질문이나 요청(Query)을 입력합니다.
- 예: "Python에서 파일 읽는 함수 찾기".
(b) Privacy Mode
- 프라이버시 모드 ON:
- 코드베이스에서 쿼리 결과를 검색 가능.
- 하지만 민감한 데이터는 서버에 전송되지 않음(기능이 제한적).
- 프라이버시 모드 OFF:
- 쿼리를 서버로 전송하여 검색 결과를 반환받음.
- 벡터 DB에서 유사도를 계산하고 관련 결과를 제공.
(c) Retrieval
- 입력된 쿼리(자연어)를 벡터로 변환.
- Vector DB에서 유사한 벡터를 검색하여, 해당 코드 조각을 반환.
4) 검색 결과와 코드 생성
(a) Prompt 생성 (make prompt)
- 검색된 코드 조각들을 기반으로 AI 모델에 전달할 **프롬프트(prompt)**를 생성.
- 프롬프트는 사용자의 요청과 검색된 코드 조각의 맥락을 포함.
(b) Code Generating by LLM (Large Language Model)
- GPT-4, GPT-3.5, Cursor-small 같은 대형 언어 모델(LLM)이 프롬프트를 바탕으로 코드를 생성하거나 문제를 해결.
- 결과물:
- 질문에 대한 코드 제안.
- 코드 수정 또는 개선.
- 관련 코드 파일 및 메타정보를 제공.
3. 용어 설명
- Chunking:
- 대규모 코드베이스를 작은 단위로 분할하는 작업.
- 효율적인 검색 및 임베딩 생성을 위해 필수.
- Embedding:
- 코드나 텍스트 데이터를 **벡터(숫자로 이루어진 배열)**로 변환.
- 이 벡터는 데이터의 의미나 맥락을 포함.
- Indexing:
- 생성된 벡터와 메타데이터를 데이터베이스(Vector DB)에 저장.
- 빠른 검색을 위해 데이터 구조화.
- Retrieval:
- 벡터 데이터베이스에서 유사한 데이터를 검색.
- Prompt:
- AI 모델에게 작업을 요청하는 텍스트 입력.
- 검색 결과와 사용자의 요청을 조합하여 모델이 더 정확한 답을 생성하도록 도와줌.