AI: 벡터 검색
AI: 벡터 검색은 테이블의 벡터 열이 쿼리 벡터에 얼마나 가까운지에 따라 행의 순위를 매기고, 가장 가까운 행을 순위의 기준이 된 거리와 함께 대상 테이블에 기록합니다. 쿼리 벡터를 여러 개 지정하면 각 벡터마다 일치 항목이 따로 나오며, 소스 테이블을 한 번만 훑어 하나의 출력 테이블에 모두 기록합니다.
검색은 정확한 검색입니다. 단계의 필터를 통과한 모든 행을 모든 쿼리 벡터와 비교하므로 일치 항목은 근사치가 아니라 실제로 가장 가까운 행입니다. 작업량은 검사한 행 수에 쿼리 벡터 수를 곱한 만큼 늘어납니다. 구축하거나 조정하거나 대체로 사용할 벡터 인덱스는 없습니다.
소스 및 대상
섹션 제목: “소스 및 대상”- 검색할 테이블 — 저장된 벡터를 검색할 테이블입니다.
- 대상 테이블 — 일치 항목을 기록할 테이블입니다.
- 벡터 열 — 거리를 측정할 기준이 되는, 검색할 테이블의 벡터 열입니다. 다른 데이터 유형은 거부되며, 열 이름과 실제 데이터 유형이 메시지에 표시됩니다.
- 거리 측정법 — 코사인 또는 유클리드(L2) 입니다. 코사인은 두 벡터 사이의 각도를 측정하고 크기는 무시하므로 텍스트 임베딩에 적합하며, 유클리드는 직선 거리를 측정하고 크기를 고려합니다. 두 방식 모두 거리가 낮을수록 더 가까운 행입니다. 기본값은 코사인입니다.
- 쿼리당 일치 항목 수 — 쿼리 벡터마다 유지할 가장 가까운 행의 수입니다. 기본값은 10입니다.
쿼리 벡터
섹션 제목: “쿼리 벡터”쿼리 벡터 탭에는 쿼리마다 항목 하나씩, id와 vector를 가진 JSON 배열을 입력합니다.
[ {"id": "q1", "vector": [0.1, 0.2, 0.3]}, {"id": "q2", "vector": [0.4, 0.5, 0.6]}]각 쿼리는 자신의 일치 항목 집합을 반환하며, 출력에서 이를 구분하는 것이 id입니다. ID는 고유해야 하고, 모든 값은 유한한 숫자여야 하며, 모든 쿼리 벡터는 저장된 벡터와 같은 개수의 값을 가져야 합니다. 거리는 너비가 같은 벡터 사이에서만 정의되기 때문입니다. 일치하지 않으면 거부되며, 쿼리, 쿼리가 가진 값의 개수, 열이 가지고 있거나 선언한 너비가 메시지에 표시됩니다.
데이터 하위 집합 선택
섹션 제목: “데이터 하위 집합 선택”필터는 후보가 될 행을 제한합니다. 행은 순위를 매기기 전에 필터링되므로, 일치 항목은 전체에서 가장 가까운 행을 나중에 필터링한 것이 아니라 필터를 통과한 행 중 가장 가까운 행입니다. 이것이 단계의 작업량을 제어하는 주된 수단이며, 검색 규모 산정을 참조하십시오.
출력 열
섹션 제목: “출력 열”각 일치 항목은 테이블 데이터 선택 탭에서 선택한 열과, 이름을 직접 지정할 수 있는 계산된 열 두 개를 가진 행 하나로 기록됩니다.
- 쿼리 이름 열 — 이 행이 응답하는 쿼리 벡터의 ID입니다. 기본값은
query_id입니다. - 거리 열 — 일치 항목과 해당 쿼리 벡터 사이에서 측정된 거리입니다. 기본값은
distance입니다. 순위의 기준 키이기도 합니다.
출력에서는 쿼리 이름이 맨 앞에, 선택한 열이 그 뒤에, 거리가 맨 뒤에 옵니다. 출력 열 이름은 고유해야 합니다.
제외되는 행
섹션 제목: “제외되는 행”거리를 측정할 수 없는 행은 가장 가까운 행인 것처럼 반환되지 않고 일치 항목에서 제외됩니다. 32비트 부동 소수점의 범위를 넘어서는 크기의 벡터가 이런 경우에 해당합니다. 이 벡터에서는 측정 가능한 거리가 반환되지 않으며, 측정할 수 없는 거리를 마지막으로 정렬하는 방법이 없으므로 이런 행을 포함하면 검색이 가장 모르는 행이 모든 결과의 맨 위에 오게 됩니다.
진단 모드를 켜고 워크플로를 실행하면 개수를 확인할 수 있습니다. 그러면 워크플로 로그에 각 쿼리에서 제외된 행 수가 보고되거나, 단계가 검색한 모든 행을 측정했다고 표시됩니다. 이 개수를 구하려면 테이블을 한 번 더 훑어야 하므로 요청할 때만 비용이 발생합니다. 진단 모드가 꺼져 있으면 로그에는 측정할 수 없는 행이 설계상 제외된다는 내용과 개수를 보려면 진단 모드를 사용하라는 안내가 표시됩니다.
배열 안에 누락된 값이 있는 저장된 벡터는 다른 문제입니다. 이런 값을 포함한 배열에 대해서는 거리를 측정할 수 없으므로, 검색은 부분 결과를 조용히 반환하는 대신 열 이름을 알려 주며 즉시 거부됩니다. 해당 행을 수정하거나 제거한 후 다시 실행하십시오.
검색 규모 산정
섹션 제목: “검색 규모 산정”실행 비용은 후보 행 수에 쿼리 벡터 수를 곱한 값이며, 단계는 총 거리 측정이 100억 회를 넘는 검색을 거부합니다. 끝낼 수 없는 작업을 시작하는 대신 행 수, 쿼리 수, 한도를 보고합니다. 다음 두 가지로 검색을 이 한도 안에 충분히 머물게 할 수 있습니다.
- 중요한 범위로 필터링합니다. 일부에 대한 질문에 답하려고 전체 코퍼스를 훑는 대신, 후보를 엔터티 하나, 기간 하나, 문서 집합 하나로 좁힙니다.
- 항상 필터링하는 차원을 기준으로 테이블을 분할하고 해당 테이블을 검색합니다. 후보 수를 줄이는 것이 여기서 쓸 수 있는 다른 어떤 방법보다 훨씬 효과적입니다.
열에 벡터 너비를 선언하는 것도 도움이 됩니다. 선언하면 단계가 행을 샘플링하여 너비를 알아내는 대신 선언에서 너비를 가져옵니다. 벡터 데이터 유형을 참조하십시오.
벡터 열을 사용할 수 없는 곳
섹션 제목: “벡터 열을 사용할 수 없는 곳”벡터 열은 이 단계를 포함한 모든 단계에서 조인 키, 그룹화 열, 집계 대상으로 사용할 수 없으며 거부됩니다. 메시지에는 열 이름과 사용된 역할이 표시되며, 단계를 저장할 때와 이전에 저장한 단계를 실행할 때 모두 표시됩니다. 대신 벡터 옆에 있는 비즈니스 키로 조인하고 그룹화하십시오. 벡터를 일반 출력 열로 단계에 통과시키는 것, 행 개수를 세는 것, 고유 값 개수를 세는 것은 가능합니다.
관련 항목
섹션 제목: “관련 항목”- 벡터 데이터 유형 — 벡터 열을 선언하고, 너비를 설정하고, 임베딩을 로드하는 방법
- Spatial Find Nearest 단계 — 임베딩이 아니라 지오메트리에 대한 같은 최근접 이웃 구조
- Table Lookup 단계 — 일치한 행에 설명 열을 다시 가져옵니다
- Parquet 가져오기 — Parquet 파일에서 임베딩을 로드합니다