Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Filtragem baseada em LINQ
Ao fazer pesquisas vetoriais é possível criar um filtro (além da semelhança vetorial) que atua nas propriedades dos dados para restringir a lista de registros correspondentes.
Este filtro está a mudar para suportar mais opções de filtragem. Anteriormente, o filtro teria sido expresso usando um tipo de VectorSearchFilter
personalizado, mas com essa atualização o filtro seria expresso usando expressões LINQ.
A cláusula de filtro antiga ainda é preservada em uma propriedade chamada OldFilter e será removida no futuro.
// Before
var searchResult = await collection.VectorizedSearchAsync(
searchVector,
new() { Filter = new VectorSearchFilter().EqualTo(nameof(Glossary.Category), "External Definitions") });
// After
var searchResult = await collection.VectorizedSearchAsync(
searchVector,
new() { Filter = g => g.Category == "External Definitions" });
// The old filter option is still available
var searchResult = await collection.VectorizedSearchAsync(
searchVector,
new() { OldFilter = new VectorSearchFilter().EqualTo(nameof(Glossary.Category), "External Definitions") });
Seleção de propriedades de destino para pesquisa
Ao fazer uma pesquisa vetorial, é possível escolher a propriedade vetorial contra a qual a pesquisa deve ser executada.
Anteriormente, isso era feito através de uma opção na classe VectorSearchOptions
chamada VectorPropertyName
.
VectorPropertyName
era uma cadeia de caracteres que poderia conter o nome da propriedade de destino.
VectorPropertyName
está sendo obsoleta em favor de uma nova propriedade chamada VectorProperty
.
VectorProperty
é uma expressão que faz referência direta à propriedade necessária.
// Before
var options = new VectorSearchOptions() { VectorPropertyName = "DescriptionEmbedding" };
// After
var options = new VectorSearchOptions<MyRecord>() { VectorProperty = r => r.DescriptionEmbedding };
Especificar VectorProperty
permanecerá opcional, assim como VectorPropertyName
era opcional.
O comportamento ao não especificar o nome da propriedade está mudando.
Anteriormente, se não especificasse uma propriedade de destino e existisse mais de uma propriedade de vetor no modelo de dados, a pesquisa teria como alvo a primeira propriedade de vetor disponível no esquema.
Uma vez que a propriedade que é 'primeiro' pode mudar em muitas circunstâncias não relacionadas com o código de pesquisa, usar esta estratégia é arriscado. Estamos, portanto, mudando esse comportamento, de modo que, se houver mais de uma propriedade vetorial, uma deve ser escolhida.
VectorSearchOptions
alteração para o tipo genérico
A VectorSearchOptions
classe está mudando para VectorSearchOptions<TRecord>
, para acomodar a filtragem baseada em LINQ e os novos seletores de propriedade mencionados acima.
Se você estiver construindo atualmente a classe options sem fornecer o nome da classe options, não haverá alteração. Por exemplo, VectorizedSearchAsync(embedding, new() { Top = 5 })
.
Por outro lado, se você estiver usando new
com o nome do tipo, você precisará adicionar o tipo de registro como um parâmetro genérico.
// Before
var options = new VectorSearchOptions() { Top = 5 };
// After
var options = new VectorSearchOptions<MyRecord>() { Top = 5 };
Remoção de fábricas de coleções em favor do padrão de herança e decorador
Cada implementação do VectorStore permite ao utilizador passar uma fábrica personalizada para utilizar na construção de coleções. Este padrão está a ser removido e a abordagem recomendada agora é herdar do VectorStore, onde se deseja uma construção personalizada e substituir o método GetCollection.
// Before
var vectorStore = new QdrantVectorStore(
new QdrantClient("localhost"),
new()
{
VectorStoreCollectionFactory = new CustomQdrantCollectionFactory(productDefinition)
});
// After
public class QdrantCustomCollectionVectorStore(QdrantClient qdrantClient) : QdrantVectorStore(qdrantClient)
{
public override IVectorStoreRecordCollection<TKey, TRecord> GetCollection<TKey, TRecord>(string name, VectorStoreRecordDefinition? vectorStoreRecordDefinition = null)
{
// custom construction logic...
}
}
var vectorStore = new QdrantCustomCollectionVectorStore(new QdrantClient("localhost"));
Remoção das opções DeleteRecordOptions e UpsertRecordOptions
Os parâmetros DeleteRecordOptions
e UpsertRecordOptions
foram removidos dos métodos DeleteAsync
, DeleteBatchAsync
, UpsertAsync
e UpsertBatchAsync
na interface IVectorStoreRecordCollection<TKey, TRecord>
.
Esses parâmetros eram todos opcionais e as classes de opções não continham nenhuma opção a ser definida.
Se você estava passando essas opções no passado, você precisará removê-las com esta atualização.
// Before
collection.DeleteAsync("mykey", new DeleteRecordOptions(), cancellationToken);
// After
collection.DeleteAsync("mykey", cancellationToken);
Não Aplicável
Atualmente, estas alterações só são aplicáveis em C#
Brevemente
Atualmente, estas alterações só são aplicáveis em C#