Я пытаюсь использовать библиотеку Vecs из Supabase (см. страницы github и документации).
Я создал коллекцию и добавил несколько документов, используя адаптер и индекс HNSW, вот так:
docs = vx.get_or_create_collection(
name="my_embeddings",
adapter=embedding_adapter,
)
docs.upsert(records=records)
docs.create_index(
method=IndexMethod.hnsw,
measure=IndexMeasure.cosine_distance,
index_arguments=IndexArgsHNSW(m=16, ef_construction=64),
)
Затем в другом скрипте я пытаюсь запросить эту коллекцию следующим образом:
collection = vx.get_or_create_collection(
name="my_embeddings",
adapter=embedding_adapter,
)
results = collection.query(
data=query,
limit=top_k,
ef_search=200, # HNSW parameter
skip_adapter=False, # use adapter to convert text -> vector
include_metadata=True,
include_value=True,
)
и я получаю эту ошибку:
sqlalchemy.exc.DatabaseError: (pg8000.exceptions.DatabaseError) {'S': 'ERROR', 'V': 'ERROR', 'C': '42601', 'M': 'syntax error at or near "$1"', 'P': '28', 'F': 'scan.l', 'L': '1240', 'R': 'scanner_yyerror'}
[SQL: set local ivfflat.probes = %s::INTEGER]
[parameters: (10,)]
Кажется, он пытается что-то узнать об индексировании ivfflat, но я не хочу использовать то, что уже проиндексировал таблицу с помощью HNSW. Я не знаю, как остановить эту ошибку. В документации они делают именно то, что делаю я, например:
docs = vx.get_or_create_collection(name="docs", dimension=3)
# add records to the collection
docs.upsert(
vectors=[
(
"vec0", # the records user defined identifier
[0.1, 0.2, 0.3], # the vector. A list or np.array
{"year": 1973} # associated metadata
)
]
)
docs.index()
docs.query(
query_vector=[0.10,0.21,0.29], # required
limit=1, # (optional) number of records to return
filters={"year": {"$eq": 1973}}, # (optional) metadata filters
measure="cosine_distance", # (optional) distance measure to use
include_value=False, # (optional) should distance measure values be returned?
include_metadata=False, # (optional) should record metadata be returned?
)
Подробнее здесь: https://stackoverflow.com/questions/797 ... m-supabase