AI

Datastax

什么是 Datastax?

Datastax 是一种人工智能数据库,是一种专门设计的数据存储和管理系统,用于支持人工智能模型、查询以及机器学习应用。人工智能数据库能够为组织优化资源,并在毫秒级提供数据分析和可视化。

人工智能数据库是一种专门针对以下领域调优的数据库系统:

  • 人工智能
  • 机器学习
  • 习应用

与传统数据库不同,人工智能数据库能够处理大规模且复杂的数据集。它们可以快速地接收、分析并检索数据。


Database

向量相似度(Vector Similarities)

区别

方法度量方式是否考虑方向是否考虑长度适用场景
Cosine向量方向的相似度(夹角余弦值)文本分析、推荐系统
Dot Product向量的加权关系投影计算、深度学习加权
Euclidean Distance向量之间的绝对直线距离聚类、几何计算

选择依据

  • 如果只关注方向,用 Cosine Similarity
  • 如果需要权重关系,用 Dot Product
  • 如果需要度量绝对距离,用 Euclidean Distance

连接数据库

  1. 安装 Python 依赖
> pip install --upgrade astrapy
  1. 生成 Token
  2. 连接 Datastax 数据库
from astrapy import DataAPIClient

# Initialize the client
client = DataAPIClient("YOUR_TOKEN")
db = client.get_database_by_api_endpoint(
  "https://0e4f5579-f81b-419d-9ccb-1065252a9010-us-east-2.apps.astra.datastax.com"
)

print(f"Connected to Astra DB: {db.list_collection_names()}")
  1. 上传数据

Insert documents with embeddings into the collection.

documents = [
    {
        "text": "Chat bot integrated sneakers that talk to you",
        "$vector": [0.1, 0.15, 0.3, 0.12, 0.05],
    },
    {
        "text": "An AI quilt to help you sleep forever",
        "$vector": [0.45, 0.09, 0.01, 0.2, 0.11],
    },
    {
        "text": "A deep learning display that controls your mood",
        "$vector": [0.1, 0.05, 0.08, 0.3, 0.6],
    },
]
insertion_result = collection.insert_many(documents)
print(f"* Inserted {len(insertion_result.inserted_ids)} items.\n")

Use an embedding provider integration

When you load data into a collection that uses an embedding provider integration, Astra DB vectorize can automatically generate embeddings for your data. For more information, see Vector and vectorize.

# Insert documents into the collection.
# (UUIDs here are version 7.)
documents = [
    {
        "$vectorize": "Chat bot integrated sneakers that talk to you",
    },
    {
        "$vectorize": "An AI quilt to help you sleep forever",
    },
    {
        "$vectorize": "A deep learning display that controls your mood",
    },
]
insertion_result = collection.insert_many(documents)
print(f"* Inserted {len(insertion_result.inserted_ids)} items.\n")

如何选择向量字段的数据

例如:如果您希望构建一个电子元器件向量数据库,用于类似 AI 聊天机器人的应用,例如设计 USB 集线器并提供相关组件列表,以下列是您需要向量化的列:

  1. 描述(应用用途):这一列包含了元件的使用场景等语义信息,非常关键,用于匹配类似“USB 集线器电路图”这样的用户查询。
  2. 元件参数:这是关于元件的技术细节,用于确定在特定设计中的兼容性或功能。

可选项:

  • 封装(Footprint):如果查询可能涉及空间或物理限制,向量化这一列可以帮助基于兼容性匹配组件。

零件编号(Part Number) 通常不适合向量化,因为它主要是一个标识符,而不是可以用于语义或数值比较的数据。但您可以将其与向量化的结果关联,用于查找具体信息。


向量搜索

将数据加载到集合后,可以使用 Astra Portal 中的 Data Explorer 来查看数据、搜索相似向量,并按元数据进行筛选。 向量搜索用于确定查询向量与集合中文档向量之间的相似性。每个文档的相似度得分代表查询向量与该文档向量之间的接近程度。

要执行向量搜索,您需要具备可以查看目标数据库和集合的角色权限。通过 Data API 执行向量搜索时,您需要一个具备该角色的应用程序令牌。可以使用内置角色,也可以使用具有以下权限的自定义角色:

  • 查看数据库 (View DB)
  • 描述所有键空间 (Describe All Keyspaces)
  • 描述键空间 (Describe Keyspace)
  • 查询表 (Select Table)
  • 描述表 (Describe Table)

搜索你的数据

执行向量搜索:

# Perform a similarity search.
query_vector = [0.15, 0.1, 0.1, 0.35, 0.55]
results = collection.find(
    sort={"$vector": query_vector},
    limit=10,
    include_similarity=True,
)
print("Vector search results:")
for document in results:
    print("    ", document)

使用元数据筛选执行向量搜索:

# Perform a similarity search with metadata filters
query_vector = [0.15, 0.1, 0.1, 0.35, 0.55]
results = collection.find(
    {"$and": [
        {"price": {"$gte": 100}},
        {"name": "John"}
    ]},
    sort={"$vector": query_vector},
    limit=10,
    projection={"*": True},
)
print("Vector search results:")
for document in results:
    print("    ", document)

对于向量近似最近邻(ANN)搜索,响应结果为最多包含 1000 个文档的单页内容,除非您设置了更低的限制。

您可以使用投影(projection)来在响应中包含特定的文档属性。如果需要返回某些默认被排除的保留字段(例如 $vector 和 $vectorize),则必须使用投影功能。

使用 Vectorize 搜索数据

对于使用 vectorize 自动生成嵌入的集合,可以使用文本而不是向量来执行相似性搜索。vectorize 会为您的文本查询生成一个嵌入向量,然后基于该嵌入向量执行相似性搜索。

您可以通过 Astra Portal 或 Data API 使用 vectorize 执行搜索。

# Perform a similarity search
query = "I'd like some talking shoes"
results = collection.find(
    sort={"$vectorize": query},
    limit=2,
    projection={"$vectorize": True},
    include_similarity=True,
)
print(f"Vector search results for '{query}':")
for document in results:
    print("    ", document)

使用 Vectorize 和元数据筛选执行向量搜索:

# Perform a similarity search with metadata filters
query = "I'd like some talking shoes"
results = collection.find(
    {"$and": [
        {"price": {"$gte": 100}},
        {"name": "John"}
    ]},
    sort={"$vectorize": query},
    limit=10,
    projection={"$vectorize": True},
)
print("Vector search results:")
for document in results:
    print("    ", document)

对于向量近似最近邻(ANN)搜索,响应结果为单页内容,最多包含 1000 个文档,除非您设置了更低的限制。

您可以使用投影(projection)在响应中包含特定的文档属性。如果需要返回某些默认被排除的保留字段(例如 $vector 和 $vectorize),则必须使用投影功能。

Previous
CUDA Toolkit
Next
Isaac