idea_world_labDEV JOURNAL
2026년 6월 28일 일요일

대안 C: embedding only

흐름

raw chunkText
  -> embedding vector
  -> docs_chunks/api_mapping/label_prototypes embedding과 cosine search
  -> top JSONL 반환

embedding이 필요한 이유

BM25는 정확 문자열에 강하지만, 설명문과 코드 표현이 다르면 약해질 수 있다.

예를 들어 chunk에는 다음 코드가 있다.

position = position.clamp(Vector2.ZERO, screen_size)

문서에는 다음처럼 설명되어 있을 수 있다.

prevent the player from leaving the screen
clamping a value means restricting it to a given range

이 경우 embedding은 의미 연결을 잡을 수 있다.

기준 chunk에서 예상되는 성공

embedding은 다음 주제를 찾을 가능성이 있다.

2D player movement
moving inside screen
animation based on movement
player movement tutorial

기준 chunk에서 예상되는 실패

embedding은 의미가 비슷한 후보도 함께 높게 줄 수 있다.

예상 false positive:

3D player movement
scripting player input
vector math
animation player docs

즉 “player movement”라는 의미가 비슷하면 2D/3D 차이를 흐릴 수 있다.

PoC 시뮬레이션

기준 chunk를 embedding vector로 변환한다.

입력 의미:

2D player movement
keyboard input
velocity normalization
animation while moving
keep player inside screen

embedding이 찾을 가능성이 높은 후보:

후보 왜 뜨는가 판단
first_2d_game / coding_the_player 2D player movement, input, animation, screen clamp 의미가 가까움 accept
first_2d_game / clamp explanation player를 화면 밖으로 못 나가게 하는 의미가 가까움 accept
first_3d_game / player_movement_code player movement, input, normalized direction 의미가 가까움 false positive
Vector math / movement tutorial velocity, vector, normalized 의미가 가까움 maybe
Animation player docs play/stop animation 의미가 가까움 maybe

embedding only에서 눈에 띄는 문제:

문자열이 직접 맞는지보다 의미가 가까운지를 본다.
그래서 2D/3D, Godot3/Godot4, migration 여부처럼 정확히 갈라야 하는 기준이 흐려질 수 있다.

예를 들어 기준 chunk와 3D movement 문서는 모두 다음 의미를 공유한다.

keyboard input
movement direction
normalized velocity
player movement

하지만 기준 chunk에는 다음 직접 단서가 있다.

AnimatedSprite2D
Vector2.ZERO
position.clamp
screen_size

embedding only는 이 직접 단서를 BM25만큼 투명하게 설명하지 못할 수 있다.

PoC에서 확인할 로그

embedding PoC에서는 다음을 같이 보여줘야 한다.

1. query chunkText
2. 후보 문서 heading/content 요약
3. cosine similarity
4. 직접 일치한 문자열 목록
5. 직접 일치 문자열이 없는데 의미만 가까운 후보 표시

눈에 보이는 결론:

embedding은 BM25가 놓친 설명형 문서를 보완한다.
하지만 직접근거 판정에는 약하므로 단독으로 쓰면 안 된다.

장점

  • 표현이 달라도 찾는다.
  • 문서 설명형 content에 강하다.
  • raw chunk 그대로 넣기 쉽다.
  • BM25가 0건일 때 fallback이 될 수 있다.

단점

  • 정확 API 판단이 약하다.
  • Godot 3/Godot 4 버전 차이를 섞을 수 있다.
  • 2D/3D 문맥을 섞을 수 있다.
  • 왜 이 결과가 나왔는지 설명하기 어렵다.
  • api_mapping에서는 false positive 위험이 크다.

판정

단독 사용 금지
BM25 후보 보완용으로 사용