成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

八個優秀的開源免費向量數據庫,讓你的AI擁有記憶

數據庫 開源 人工智能
下面列舉八個目前優秀的開源向量數據庫項目,這些開業項目應該能夠為你的AI解決方案提供最佳技術選型。

今年AI大模型應用呈井噴式發展,其中,LangChain、Haystack等端到端大語言模型應用框架更是將向量數據庫推出了新熱點。

向量數據庫(vector database,也有人稱矢量數據庫),簡單地說,它們是以向量格式管理、存儲和檢索數據的數據庫。

為什么向量數據庫對AI如此重要?

因為它在處理高維數據方面具有先天優勢,從圖像處理到推薦系統,向量數據庫無疑是幕后的英雄。它的主要功能包括:

  • 管理:向量數據庫以原始數據形式處理數據,能夠有效地組織和管理數據,便于AI模型應用。
  • 存儲:能夠存儲向量數據,包括各種AI模型需要使用到的高維數據。
  • 檢索:向量數據庫特別擅長高效地檢索數據,這一個特點能夠確保AI模型在需要的時候快速獲得所需的數據。這也是向量數據庫能夠在一些推薦系統或者檢索系統中得到應用的重要原因。

因此,我們說向量數據庫讓AI有了記憶,這個記憶不僅僅是記錄存儲、也包括檢索和管理。就像人類的記憶一樣,我們通過同學的畢業照總是能夠認得這個人是誰;我們在和朋友聊天的時候也常常會一起回憶過去。

那么向量數據庫是如何工作的?

向量數據庫的核心是通過使用數學模型來管理向量數據。

那么什么又是向量?簡單地說,向量是一個既有方向又有大小的數字對象。在向量數據庫中,向量可以用于表示復雜的數據,例如:圖像、文本。

每個數據片段都被轉換成高維空間中的向量管理起來。當我們需要查找相似的數據片段時,數據庫不需要遍歷篩選選每個條目。而是通過計算向量之間的距離來匹配,向量越接近,數據就越相似。這種方式非常高效,通過這種方式檢索數據可以比傳統關系型數據庫更快地處理大批量數據。

下面是個文本向量存儲的示例圖:

下面是圖片向量化存儲與檢索的示例圖:

大家都知道,通用大模型的運行涉及巨大的計算資源,因此許多大模型都基于MaaS,私有化成本很高。與之相矛盾的是在具體行業大模型應用中往往對數據安全要求高,并且需要與相關業務或領域知識深入融合,才能做到安全、專業。LangChain等大模型應用框架為行業大模型應用提供了一個經典解決方案,而開源的向量數據庫又為LangChain等大模型應用解決方案提供了基礎支撐,其實向量數據庫在許多應用場景(如:企業知識庫、推薦系統、檔案管理等)也非常有用。因此,向量數據庫也成為大模型應用發展的一個熱門技術。

八個優秀的開源向量數據庫項目

開源社區對向量數據庫的發展功不可沒,許多開源向量數據庫項目在性能、靈活性和魯棒性方面表現都非常優秀,下面列舉8個目前最佳的開源向量數據庫項目,這些開業項目應該能夠為你的AI解決方案提供最佳技術選型。

1.Milvus

https://github.com/milvus-io/milvus

Milvus是由Zilliz提供的一個高度可定制的開源向量數據庫,旨在為嵌入式相似性搜索等AI應用提供支持。目前Milvus已經發布了 2.0 ,Milvus 2.0是一個云原生向量數據庫,設計上采用存儲、計算分離。Milvus2.0中的所有組件都支持無狀態,這樣做就使得整個的應用更加靈活而有彈性。

Milvus建立在Faiss、Annoy、HNSW等主流向量搜索庫之上,旨在對包含數百萬、數十億甚至數萬億個向量的密集向量數據集進行相似性搜索。

Milvus還支持數據分片、數據持久化、流數據攝取、向量和標量數據之間的混合搜索以及許多其他高級功能。建議使用Kubernetes部署Milvus,以獲得最佳可用性和彈性。

Milvus采用共享存儲架構,存儲、計算分離,具備計算節點的水平可擴展性。遵循數據平面和控制平面分解原則,Milvus包括四層:接入層、協調服務、工作節點和存儲。在擴展或災難恢復方面,這些層可以做到相互獨立。

下面是Milvus的架構圖。

Milvus的主要特性包括:

  • 支持萬億向量數據集上的毫秒級搜索:在萬億向量數據集上測試平均延遲(毫秒級)。
  • 簡化的非結構化數據管理:豐富API、跨客戶端一致的用戶體驗。
  • 始終保持高可靠性:Milvus的內置復制和故障轉移/回切功能可確保數據和應用程序在發生中斷時保持業務連續性。
  • 高度可擴展和彈性性能:組件級的可伸縮性使其可以按需伸縮。Milvus可以根據負載類型在組件級別自動縮放,使資源調度更加高效。
  • 混合搜索能力:除了向量,Milvus還支持“布爾類型”、“整數”、“浮點數”等數據類型。
  • 統一Lambda結構:Milvus將流和批處理結合起來進行數據存儲,以平衡及時性和效率。它的統一界面使向量相似性搜索變得輕而易舉。強大的社區支持和行業的認可:擁有超過1000個企業用戶,GitHub超23K Star,以及活躍的開源社區。

更多內容可以參考官網:https://milvus.io

Demo:https://milvus.io/milvus-demos/

文檔: https://milvus.io/docs

2.Faiss

https://github.com/facebookresearch/faiss

Faiss由Facebook的AI Research團隊開發的向量數據庫,在高維矢量搜索方面表現出色。是一個搜索效率非常突出的向量庫,這也使其成為一些實時性要求高的應用程序的絕佳選擇。Faiss是一個高效的相似性搜索和密集向量聚類庫。它包含的算法可以搜索任何大小的向量集,甚至多達超過RAM的向量大小。它還包含用于評估和參數調整的支持代碼。Faiss是用C++編寫的,帶有Python/numpy的完整包裝,一些常用的算法是在GPU上實現的。

Faiss是通過存儲一組向量的索引,并提供了一個函數在它們當中進行比較,從而實現搜索。

目前Faiss在GitHub上的Star已經超過24K。

基于CPU、GPU的python安裝方法如下:

$ conda install -c pytorch faiss-cpu
$ conda install -c pytorch faiss-gpu

以上只能安裝一個,不能同時安裝兩個,因為后者是前者的超集。

3.Annoy

https://github.com/spotify/annoy

Annoy (Approximate Nearest Neighbors Oh Yeah)是由Spotify創建的一個輕量級且功能強大的向量數據庫。它專為快速搜索大型數據集而設計,非常適合需要快速響應的應用。它是一個C++庫,但支持在Python中使用。

它通過創建大型的只讀文件數據結構,并將這些數據結構映射到內存中,以便許多進程可以共享相同的數據。

ANNOY的核心是一種基于隨機投影和樹的算法。它由Erik Bernhardsson于2015年在Spotify工作時開發。ANNOY設計目標是實現在100到1000個密集維度的數據集中進行搜索。為了計算最近的鄰居,它將點集分成兩半,并遞歸地進行,直到每個集合都有k個項目。通常k應該在100左右(見下圖)。

關于Annoy的主要特征官方介紹如下:

  • 支持多種相似算法:歐氏距離、曼哈頓距離、余弦距離、漢明距離、內積距離。余弦距離等價于歸一化向量的歐幾里得距離= sqrt(2-2*cos(u,v))
  • 如果你沒有太多的維度(比如<=100),效果會更好,但即使是1000維的維度,它的表現也還是非常優秀。
  • 內存占用小
  • 允許在多個進程之間共享內存
  • 索引創建與查找是分開的(特別是,一旦創建了樹,就不能添加更多的項)
  • 原生Python支持,已在2.7、3.6和3.7中測試。
  • 在磁盤上構建索引,以便索引無法放入內存的大數據集

python語言下的安裝annoy:

pip install annoy

python語言下的使用annoy:

from annoy import AnnoyIndex
import random

f = 40  # Length of item vector that will be indexed

t = AnnoyIndex(f, 'angular')
for i in range(1000):
    v = [random.gauss(0, 1) for z in range(f)]
    t.add_item(i, v)

t.build(10) # 10 trees
t.save('test.ann')

# ...

u = AnnoyIndex(f, 'angular')
u.load('test.ann') # super fast, will just mmap the file
print(u.get_nns_by_item(0, 1000)) # will find the 1000 nearest neighbors

4.Nmslib

https://github.com/nmslib/nmslib

Nmslib (Non-Metric Space Library)是一個于非度量空間的開源向量數據庫。是一個高效的跨平臺相似性搜索庫,也是一個評估相似性搜索方法的工具包,并且它的核心庫沒有任何第三方依賴項。

該項目的目標是創建一個用于能夠在通用以及非度量空間中進行搜索的全面工具包,包括:通用搜索方法、近似搜索方法、各種度量空間訪問方法以及非度量空間的方法。 

Nmslib是一個可擴展的庫,可以添加新的搜索方法和距離函數。支持在C++和Python、Java中使用,例如:可以使用Java等語言構建一個查詢服務器。

5.Qdrant

https://github.com/qdrant/qdrant

Qdrant是一個包含向量數據庫和向量相似度搜索引擎的開源項目。它提供了一組便捷的API來執行存儲、搜索和管理向量數據,并且能夠同時存儲payload數據,這就有利于自定義的數據過濾,這個方面在各種神經網絡、基于語義的匹配、分面搜索、精準推薦等應用程序非常有用。

Qdrant是用Rust語言開發的,因此它能在高負載下也具備高效、可靠特性。Qdrant的使用非常簡單:

(1)使用Docker啟動

docker run -p 6333:6333 qdrant/qdrant
br

(2)在python中使用

安裝:

pip install qdrant-client

連接:

from qdrant_client import QdrantClient

qdrant = QdrantClient("http://localhost:6333") # Connect to existing Qdrant instance, for production

qdrant的特點如下:

  • 過濾和有效數據:Qdrant使JSON格式存儲Payload(有效數據)與向量相關聯,支持should、must和must_not條件的各種組合檢索方式,確保能夠檢索所有向量,這點與ElasticSearch的后過濾不同。
  • 支持豐富的數據類型:Payload適應不同的數據類型和查詢條件,包括字符串匹配、數值范圍、地理位置等。這些篩選條件使您能夠在相似性匹配的基礎上創建自定義業務邏輯。
  • 查詢計劃和Payload索引:查詢規劃器利用存儲的Payload信息來優化查詢。
  • 硬件加速:利用現代CPU x86-x64架構,Qdrant在現代硬件上提供更快的搜索性能。
  • 寫入前記錄日志:Qdrant通過更新確認確保數據的持久性,即使在停電期間也是如此。更新日志存儲所有操作,從而可以輕松地重建最新的數據庫狀態。
  • 分布式部署:從v0.8.0開始,Qdrant支持分布式部署。多個Qdrant機器形成一個集群,通過Raft協議進行協調,以進行水平擴展。
  • 獨立運行:Qdrant支持獨立運行,不依賴外部數據庫或編排控制器,簡化了配置。

6.Chroma

https://github.com/chroma-core/chroma

Chroma是一個開源嵌入式向量數據庫?;贑hroma可以輕松構建LLM應用程序。Chroma的設計非常簡單、易用、靈活,可以滿足各種場景下的應用。它支持使用第三方的embedding模型執行查詢和元數據過濾。

下面是Chroma與OpenAI embedding搭配使用的架構示意圖:

基于Docker的Chromadb可以參考:

  • docker-compose:https://github.com/chroma-core/chroma/blob/main/docker-compose.yml
  • dockerFile: https://github.com/chroma-core/chroma/blob/main/Dockerfile

在具體應用開發上,Python下使用Chroma也非常簡單。

安裝:

pip install chromadb

四個核心API的使用:

import chromadb
# setup Chroma in-memory, for easy prototyping. Can add persistence easily!
client = chromadb.Client()

# Create collection. get_collection, get_or_create_collection, delete_collection also available!
collection = client.create_collection("all-my-documents")

# Add docs to the collection. Can also update and delete. Row-based API coming soon!
collection.add(
    documents=["This is document1", "This is document2"], # we handle tokenization, embedding, and indexing automatically. You can skip that and add your own embeddings as well
    metadatas=[{"source": "notion"}, {"source": "google-docs"}], # filter on these!
    ids=["doc1", "doc2"], # unique for each doc
)

# Query/search 2 most similar results. You can also .get by id
results = collection.query(
    query_texts=["This is a query document"],
    n_results=2,
    # where={"metadata_field": "is_equal_to_this"}, # optional filter
    # where_document={"$contains":"search_string"}  # optional filter
)

Chroma的主要特點包括:

  • 簡單:類型完整、測試全面、文檔完整
  • 整合:支持LangChain(python和js)、LlamaIndex等等。
  • 開發、測試、生產過程:在python notebook中運行的API可直接應用到集群環境。
  • 功能豐富:查詢、過濾、密度估計等
  • 免費、開源

7.LanceDB

https://github.com/lancedb/lancedb

LanceDB是一個開源的支持持久存儲的向量搜索數據庫,這個開源項目可以大大簡化embeddings的檢索、過濾和管理。

LanceDB的內核是用Rust開發的,并使用Lance構建(Lance是一種為高性能ML工作負載設計的開源列格式)。Python和JavaScript等語言可以使用API操作LanceDB。

Python的使用方式如下:

安裝:

pip install lancedb

檢索:

import lancedb

uri = "data/sample-lancedb"
db = lancedb.connect(uri)
table = db.create_table("my_table",
                         data=[{"vector": [3.1, 4.1], "item": "foo", "price": 10.0},
                               {"vector": [5.9, 26.5], "item": "bar", "price": 20.0}])
result = table.search([100, 100]).limit(2).to_df()

LanceDB的主要功能特點如下:

  • 無需管理服務器的生產規模向量搜索。
  • 支持存儲、查詢以及過濾向量、元數據和多模態數據(文本、圖像、視頻、點云等)。
  • 支持向量相似度搜索、全文檢索和SQL語法。
  • 支持Python和JavaScript/Typescript。
  • 零拷貝、自動版本控制,無需額外基礎架構即可管理數據版本。
  • 支持基于GPU構建向量索引。
  • 支持與LangChain?、LlamaIndex、Apache-Arrow、Pandas、Polars、DuckDB等生態集成。

8.Vectra

https://github.com/Stevenic/vectra

Vectra是一個Node.js的本地向量數據庫,其功能類似于Pinecone或Qdrant,但區別是Vectra使用本地文件構建。每個Vectra索引都對應磁盤上的一個文件夾。文件夾中包含一個index.json文件,文件內容包含索引的所有向量以及這些索引的元數據。創建索引時,可以指定索引的元數據屬性,只有這些字段才會存儲在index.json文件中。而項目的其他元數據將會被保存到一個有GUID指定的文件中。

運行時,整個Vectra索引都被加載到內存中,因此它的檢索效率非常高,甚至是實時的,但是它不適合用于類似需要保留長上下文的聊天機器人場景。Vectra更適合用于一些小的語料庫、靜態數據或者一些問答文檔的檢索等應用場景。

在Node.js中的使用如下:

安裝:

$ npm install vectra

創建實例:

if (!await index.isIndexCreated()) {
    await index.createIndex();
}

創建索引:

import { LocalIndex } from 'vectra';

const index = new LocalIndex(path.join(__dirname, '..', 'index'));

添加數據到索引:

import { OpenAIApi, Configuration } from 'openai';

const configuration = new Configuration({
    apiKey: `<YOUR_KEY>`,
});

const api = new OpenAIApi(configuration);

async function getVector(text: string) {
    const response = await api.createEmbedding({
        'model': 'text-embedding-ada-002',
        'input': text,
    });
    return response.data.data[0].embedding;
}

async function addItem(text: string) {
    await index.insertItem({
        vector: await getVector(text),
        metadata: { text }
    });
}

// Add items
await addItem('apple');
await addItem('oranges');
await addItem('red');
await addItem('blue');

檢索數據:

async function query(text: string) {
    const vector = await getVector(input);
    const results = await index.queryItems(vector, 3);
    if (results.length > 0) {
        for (const result of results) {
            console.log(`[${result.score}] ${result.item.metadata.text}`);
        }
    } else {
        console.log(`No results found.`);
    }
}

await query('green');
/*
[0.9036569942401076] blue
[0.8758153664568566] red
[0.8323828606103998] apple
*/

await query('banana');
/*
[0.9033128691220631] apple
[0.8493374123092652] oranges
[0.8415324469533297] blue
*/

總之

以上這些開源向量數據庫每一個都有自己獨特的一面。選擇使用哪一款取決于項目的具體需求。如果您正在處理一個需要高速數據檢索的項目,那么Annoy可能是最合適的。但如果項目涉及非度量空間,那么Nmslib可能才是首選的。一個合適的向量數據庫可以成為AI解決方案當中的記憶海綿體,讓AI不僅能推理還能記憶、檢索,提升AI應用的效果。

責任編輯:趙寧寧 來源: AI
相關推薦

2023-05-30 14:16:00

開源項目Python

2023-10-10 10:27:37

DevOps

2023-12-10 14:39:25

刪除圖片開源圖片背景移除

2023-11-29 10:16:45

內網開源

2025-02-26 00:56:24

.Net開源項目

2025-05-26 01:00:00

MCP平臺AI

2024-01-11 09:21:13

JavaScript工具JSON

2023-11-08 14:57:41

2023-05-26 16:42:28

2019-11-26 09:11:50

數據庫JavaHadoop

2019-07-31 10:00:26

Github后臺控制面板框架

2023-09-12 14:03:44

2022-06-13 09:00:33

React 項目前端

2023-12-15 13:07:00

開源網頁截圖

2025-03-17 00:33:00

2024-03-19 14:12:49

數據庫開源SQL

2023-02-22 19:15:35

AI工具機器人

2023-07-31 10:56:20

2025-01-14 10:29:34

2022-05-16 14:25:31

數據分析預測分析工具
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本久久综合 | 亚洲精品久久久久久久久久吃药 | 蜜桃视频一区二区三区 | japanhdxxxx裸体| 中文字幕日韩欧美 | 精品一区二区三区四区五区 | 成人二区| 91精品久久久久久久久中文字幕 | 国产三级精品三级在线观看四季网 | 亚洲国产精品久久久久久 | 午夜久久久久久久久久一区二区 | 国产日韩精品在线 | 久久看片 | 男女羞羞的网站 | 在线黄av | 日本一区视频在线观看 | 国产在线精品一区二区 | 国产精品视频999 | 毛片一级片 | 欧美一级片黄色 | 精品欧美久久 | 精品一区二区三区在线视频 | 日韩成人在线视频 | 91久久国产综合久久91精品网站 | 亚洲欧美综合网 | 最新伦理片 | 国产精品高清在线 | 一二三在线视频 | 毛片免费观看 | 精品免费国产视频 | 日韩1区 | 中文字幕在线观看第一页 | 欧美精品欧美精品系列 | 99久久婷婷国产综合精品电影 | 久久首页 | 精品国产一区二区三区性色av | www.一级毛片 | 麻豆视频在线免费观看 | 免费黄色片在线观看 | 久久亚洲天堂 | 99精品国产一区二区三区 |