1부에서는 pgVector를 사용하여 PostgreSQL을 설정했습니다. 이제 벡터 검색이 실제로 어떻게 작동하는지 살펴보겠습니다.
임베딩은 콘텐츠를 숫자로 스마트하게 요약한 것과 같습니다. 두 임베딩 사이의 거리는 유사성 수준을 나타냅니다. 거리가 작을수록 벡터가 매우 유사하다는 것을 나타내고, 거리가 멀면 관련성이 낮다는 것을 나타냅니다.
? Book A: Web Development (Distance: 0.2) ⬅️ Very Similar! ? Book B: JavaScript 101 (Distance: 0.3) ⬅️ Similar! ? Book C: Cooking Recipes (Distance: 0.9) ❌ Not Similar
이제 데이터베이스를 일부 데이터로 채워 보겠습니다. 우리는 다음을 사용할 것입니다:
pgvector-setup/ # From Part 1 ├── compose.yml ├── postgres/ │ └── schema.sql ├── .env # New: for API keys └── scripts/ # New: for data loading ├── requirements.txt ├── Dockerfile └── load_data.py
외부 API에서 데이터를 로드하는 스크립트부터 시작해 보겠습니다. 전체 스크립트는 여기에 있습니다.
OPENAI_API_KEY=your_openai_api_key
services: # ... existing db service from Part 1 data_loader: build: context: ./scripts environment: - DATABASE_URL=postgresql://postgres:password@db:5432/example_db - OPENAI_API_KEY=${OPENAI_API_KEY} depends_on: - db
docker compose up data_loader
메타데이터가 포함된 프로그래밍 서적 10권을 보실 수 있습니다.
데이터베이스에 연결:
docker exec -it pgvector-db psql -U postgres -d example_db
임베딩이 실제로 어떤 모습인지 살펴보겠습니다.
-- View first 5 dimensions of an embedding SELECT name, (embedding::text::float[])[1:5] as first_5_dimensions FROM items LIMIT 1;
간단한 유사성 검색을 시도해 보세요.
-- Find 3 books similar to any book about Web SELECT name, metadata FROM items ORDER BY embedding <-> ( SELECT embedding FROM items WHERE metadata->>'title' LIKE '%Web%' LIMIT 1 ) LIMIT 3;
벡터 검색 쿼리에 사용되는 연산자를 분석해 보겠습니다.
JSON 필드에서 텍스트 값을 추출합니다.
예:
-- If metadata = {"title": "ABC"}, it returns "ABC" SELECT metadata->>'title' FROM items;
두 벡터 간의 유사성을 측정합니다.
예:
-- Find similar books SELECT name, embedding <-> query_embedding as distance FROM items ORDER BY distance LIMIT 3;
다음은 다음과 같습니다.
3부: "벡터 검색 API 구축"을 계속 지켜봐 주시기 바랍니다! ?
아래에 댓글을 남겨주세요! ?
위 내용은 벡터 검색 시작하기(2부)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!