AI
Datastax
什么是 Datastax?
Datastax 是一种人工智能数据库,是一种专门设计的数据存储和管理系统,用于支持人工智能模型、查询以及机器学习应用。人工智能数据库能够为组织优化资源,并在毫秒级提供数据分析和可视化。
人工智能数据库是一种专门针对以下领域调优的数据库系统:
- 人工智能
- 机器学习
- 习应用
与传统数据库不同,人工智能数据库能够处理大规模且复杂的数据集。它们可以快速地接收、分析并检索数据。
Database
向量相似度(Vector Similarities)
区别
方法 | 度量方式 | 是否考虑方向 | 是否考虑长度 | 适用场景 |
---|---|---|---|---|
Cosine | 向量方向的相似度(夹角余弦值) | 是 | 否 | 文本分析、推荐系统 |
Dot Product | 向量的加权关系 | 是 | 是 | 投影计算、深度学习加权 |
Euclidean Distance | 向量之间的绝对直线距离 | 否 | 是 | 聚类、几何计算 |
选择依据
- 如果只关注方向,用 Cosine Similarity。
- 如果需要权重关系,用 Dot Product。
- 如果需要度量绝对距离,用 Euclidean Distance。
连接数据库
- 安装 Python 依赖
> pip install --upgrade astrapy
- 生成 Token
- 连接 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()}")
- 上传数据
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 集线器并提供相关组件列表,以下列是您需要向量化的列:
- 描述(应用用途):这一列包含了元件的使用场景等语义信息,非常关键,用于匹配类似“USB 集线器电路图”这样的用户查询。
- 元件参数:这是关于元件的技术细节,用于确定在特定设计中的兼容性或功能。
可选项:
- 封装(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),则必须使用投影功能。