VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
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)를 거쳐야 합니다:
CONVERT가 더 이상 필요하지 않습니다. 하지만 남겨 두어도 해가 없으므로, 아래의 모든 예제는 0.0.6 이하와의 호환성을 위해 여전히 사용합니다.
임베딩 저장하기
JSON 배열을JSON 열에 저장하세요:
기존 행에 임베딩 채우기
모델 선택하기
테이블의 모든 임베딩에 같은 모델을 사용하세요. 다른 모델의 임베딩은 비교할 수 없습니다. 섞으면 의미 없는 유사도 점수가 나옵니다.
Anthropic은 현재 임베딩 API를 제공하지 않습니다.
시맨틱 검색
MySQL도 VillageSQL도 네이티브 벡터 거리 함수를 제공하지 않습니다. 큰 테이블에서 가장 가까운 벡터를 찾는 완전한 유사도 검색은 애플리케이션 코드에서 실행됩니다. 일반적인 아키텍처: 임베딩을 MySQL에 저장하고, 가져오고, 애플리케이션에서 코사인 유사도를 계산하고, 상위 일치를 반환합니다.무엇을 임베딩할지
임베딩의 품질은 무엇을 임베딩하는지에 달려 있습니다. 몇 가지 패턴:자주 묻는 질문
다른 모델의 임베딩을 비교할 수 있나요?
아니요.text-embedding-3-small과 gemini-embedding-001의 임베딩은 서로 다른 벡터 공간에 있습니다. 서로 비교하면 유사도 점수가 의미 없습니다. 열마다 모델 하나로 표준화하세요.
임베딩은 저장 공간을 얼마나 차지하나요?
실수 1536개의 JSON 배열은 텍스트 문자열로 행당 대략 10–15 KB입니다. 큰 테이블에서는 이것이 쌓입니다. 모든 임베딩을 저장해야 하는지, 아니면 쿼리할 것만 저장하면 되는지 고려하세요.ai_embedding()은 일괄 입력을 지원하나요?
아니요. 각 호출은 텍스트 입력 1개를 처리합니다. 대량 임베딩은 애플리케이션에서 행을 순회하며UPDATE를 배치로 호출하세요.
텍스트가 너무 길면 어떻게 되나요?
임베딩 모델은 토큰 한도(OpenAI 모델은 보통 8191 토큰)에서 입력을 잘라냅니다. 임베딩은 잘린 텍스트로 계산됩니다. 긴 문서는 전체 텍스트 대신 요약이나 첫 몇 문단을 임베딩하세요.문제 해결
함께 보기
- MySQL을 AI API에 연결하기 — vsql_ai 확장 설치와 구성
- MySQL 쿼리에서 AI 모델 실행하기 — 임베딩을 보완하는 텍스트 생성
- MySQL의 UUID — 임베딩 조회 테이블을 위한 안정적인 행 식별자
- MySQL의 다차원 범위 쿼리 — AI 벡터 없이 하는 기하학적 포함 및 거리 쿼리