메인 콘텐츠로 건너뛰기

VillageSQL is a drop-in replacement for MySQL with extensions.

All examples on this page work on VillageSQL. Install Now →
벡터 임베딩은 텍스트를 의미를 담은 숫자 배열로 나타냅니다. 같은 주제에 대한 두 텍스트는 공유하는 단어가 없어도 비슷한 벡터를 가집니다. MySQL에는 임베딩을 생성하는 내장 방법이 없습니다. VillageSQL의 vsql_ai 확장은 ai_embedding()을 추가하는데, 이 함수는 임베딩 모델을 호출하고, 저장하고 쿼리할 수 있는 JSON 배열로 벡터를 반환합니다.

임베딩의 용도

임베딩 모델은 텍스트를 고정 길이의 실수 벡터로 변환합니다. 두 벡터 사이의 거리는 의미적 유사도를 반영합니다:
  • "dog"와 "puppy" → 비슷한 벡터
  • "dog"와 "database index" → 먼 벡터
이것은 시맨틱 검색(쿼리와 같은 의미인 행 찾기), 클러스터링, 추천을 가능하게 합니다. 키워드 검색은 이 중 어느 것도 잘 처리하지 못합니다.

VillageSQL과 함께: ai_embedding()

ai_embedding(provider, model, api_key, text)는 임베딩 모델을 호출하고 JSON 배열 문자열을 반환합니다.

문자 집합 변환

VillageSQL 0.0.6 이하에서 ai_embedding()은 binary 문자 집합을 반환하고, MySQL의 JSON 파서는 binary 문자열을 거부합니다. 결과가 JSON 열이나 JSON 함수에 도달하기 전에 CONVERT(... USING utf8mb4)를 거쳐야 합니다:
VillageSQL 0.0.7 이상은 올바른 문자 집합을 직접 반환하므로 거기서는 CONVERT가 더 이상 필요하지 않습니다. 하지만 남겨 두어도 해가 없으므로, 아래의 모든 예제는 0.0.6 이하와의 호환성을 위해 여전히 사용합니다.

임베딩 저장하기

JSON 배열을 JSON 열에 저장하세요:

기존 행에 임베딩 채우기

모델 선택하기

테이블의 모든 임베딩에 같은 모델을 사용하세요. 다른 모델의 임베딩은 비교할 수 없습니다. 섞으면 의미 없는 유사도 점수가 나옵니다. Anthropic은 현재 임베딩 API를 제공하지 않습니다. MySQL도 VillageSQL도 네이티브 벡터 거리 함수를 제공하지 않습니다. 큰 테이블에서 가장 가까운 벡터를 찾는 완전한 유사도 검색은 애플리케이션 코드에서 실행됩니다. 일반적인 아키텍처: 임베딩을 MySQL에 저장하고, 가져오고, 애플리케이션에서 코사인 유사도를 계산하고, 상위 일치를 반환합니다.
결과를 벡터 유사도 라이브러리(NumPy, scikit-learn, Faiss)에 넘겨 최근접 이웃을 찾으세요. 프로덕션 규모의 검색에는 MySQL 옆에 전용 벡터 데이터베이스를 고려하세요.

무엇을 임베딩할지

임베딩의 품질은 무엇을 임베딩하는지에 달려 있습니다. 몇 가지 패턴:
임베딩하는 텍스트는 수천 토큰 아래로 유지하세요. 더 긴 텍스트는 임베딩 모델이 잘라냅니다.

자주 묻는 질문

다른 모델의 임베딩을 비교할 수 있나요?

아니요. text-embedding-3-small과 gemini-embedding-001의 임베딩은 서로 다른 벡터 공간에 있습니다. 서로 비교하면 유사도 점수가 의미 없습니다. 열마다 모델 하나로 표준화하세요.

임베딩은 저장 공간을 얼마나 차지하나요?

실수 1536개의 JSON 배열은 텍스트 문자열로 행당 대략 10–15 KB입니다. 큰 테이블에서는 이것이 쌓입니다. 모든 임베딩을 저장해야 하는지, 아니면 쿼리할 것만 저장하면 되는지 고려하세요.

ai_embedding()은 일괄 입력을 지원하나요?

아니요. 각 호출은 텍스트 입력 1개를 처리합니다. 대량 임베딩은 애플리케이션에서 행을 순회하며 UPDATE를 배치로 호출하세요.

텍스트가 너무 길면 어떻게 되나요?

임베딩 모델은 토큰 한도(OpenAI 모델은 보통 8191 토큰)에서 입력을 잘라냅니다. 임베딩은 잘린 텍스트로 계산됩니다. 긴 문서는 전체 텍스트 대신 요약이나 첫 몇 문단을 임베딩하세요.

문제 해결

함께 보기