# Hello, Vector DB | AIGC 时代，你需要一个真正的向量数据库么？

2023/10/27 17:24

AIGC 时代，开发者需要一个“真正的向量数据库”吗？

## 01.五分钟入门向量检索

import numpy as np

# Function to calculate euclidean distance
def euclidean_distance(a, b):
return np.linalg.norm(a - b)

# Function to perform knn
def knn(data, target, k):
# Calculate distances between target and all points in the data
distances = [euclidean_distance(d, target) for d in data]

# Combine distances with data indices
distances = np.array(list(zip(distances, np.arange(len(data)))))

# Sort by distance
sorted_distances = distances[distances[:, 0].argsort()]

# Get the top k closest indices
closest_k_indices = sorted_distances[:k, 1].astype(int)

# Return the top k closest vectors
return data[closest_k_indices]


# Define some 2D vectors
data = np.random.rand(100, 2)

# Define a target vector
target = np.array([0.5, 0.5])

# Define k
k = 3

# Perform knn
closest_vectors = knn(data, target, k)

# Print the result
print("The closest vectors are:")
print(closest_vectors)


• 快速进行原型验证。

• 没有数据持久化的需求。

• 数据量小于一百万，且没有标量过滤的需求。

• 对查询性能要求不高。

import numpy as np
import faiss

# Generate some example data
dimension = 64                            # dimension of the vector space
database_size = 10000                     # size of the database
query_size = 100                          # number of queries to perform
np.random.seed(123)                       # make the random numbers predictable

# Generating vectors to index in the database (db_vectors)
db_vectors = np.random.random((database_size, dimension)).astype('float32')

# Generating vectors for query (query_vectors)
query_vectors = np.random.random((query_size, dimension)).astype('float32')

# Building the index
index = faiss.IndexFlatL2(dimension)  # using the L2 distance metric
print(index.is_trained)              # should return True

# Adding vectors to the index
print(index.ntotal)                  # should return database_size (10000)

# Perform a search
k = 4                                # we want to see 4 nearest neighbors
distances, indices = index.search(query_vectors, k)

# Print the results
print("Indices of nearest neighbors: \n", indices)
print("\nL2 distances to the nearest neighbors: \n", distances)


## 02.为什么需要 Purpose-built 向量数据库

### 智能化

Milvus 是一个 DB4AI 的系统，同时也是做了大量 AI4DB 的尝试。向量数据库与传统数据库的最大区别来源于对数据的返回准确度要求不同。传统数据库要求百分之百正确的返回结果，而向量数据库的 ANN 计算天生就属于近似匹配。通过 AI 改造向量数据库系统，其空间远远大于传统数据库进行调优或辅助问题排查。

## 03.尾声

1）请先参考 Milvus 部署文档 https://milvus.io/docs/install_standalone-docker.md部署 Milvus 服务。

2）参考 Hello Milvus 文档 https://milvus.io/docs/example_code.md，50 行代码即可实现向量检索功能。

3）查看 Towhee 的范例文档 https://github.com/towhee-io/examples/，了解向量数据库的应用场景，包括图片检索、知识增强、图文问答、视频去重等应用场景。

（本文作者系 Zilliz 合伙人、技术总监 栾小凡）

0 评论
0 收藏
0