向量搜尋入門(第 2 部分)
在第 1 部分中,我們使用 pgvector 設定 PostgreSQL。現在,讓我們看看向量搜尋實際上是如何運作的。
內容
- 什麼是嵌入?
- 載入範例資料
- 探索向量搜尋
- 了解 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
載入樣本數據
現在,讓我們用一些資料填入我們的資料庫。我們將使用:
- 開放圖書資料的圖書館 API
- 用於建立嵌入的 OpenAI API
- pgvector 用於儲存和搜尋它們
專案結構
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 載入資料的腳本開始。完整的腳本在這裡。
設定資料載入
- 創建.env:
OPENAI_API_KEY=your_openai_api_key
- 更新 compose.yml 以新增資料載入器:
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;
- 每個嵌入有 1536 個維度(使用 OpenAI 的模型)
- 值的範圍通常為 -1 到 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;
- 找一本標題中帶有「Web」的書
- 取得該書的嵌入(其數學表示)
- 將此嵌入與所有其他書籍的嵌入進行比較
- 取得3本最相似的書(距離最小)
了解 PostgreSQL 運算符
讓我們分解一下向量搜尋查詢中使用的運算子:
JSON 文字運算子:->>
從 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;
下一步
接下來,我們將:
- 建立 FastAPI 應用程式
- 建立搜尋端點
- 透過 API 存取我們的向量搜尋
敬請關注第 3 部分:「建立向量搜尋 API」! ?
歡迎在下面留言! ?
以上是向量搜尋入門(第 2 部分)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python更易學且易用,C 則更強大但複雜。 1.Python語法簡潔,適合初學者,動態類型和自動內存管理使其易用,但可能導致運行時錯誤。 2.C 提供低級控制和高級特性,適合高性能應用,但學習門檻高,需手動管理內存和類型安全。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在開發效率上優於C ,但C 在執行性能上更高。 1.Python的簡潔語法和豐富庫提高開發效率。 2.C 的編譯型特性和硬件控制提升執行性能。選擇時需根據項目需求權衡開發速度與執行效率。

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

每天學習Python兩個小時是否足夠?這取決於你的目標和學習方法。 1)制定清晰的學習計劃,2)選擇合適的學習資源和方法,3)動手實踐和復習鞏固,可以在這段時間內逐步掌握Python的基本知識和高級功能。
