Microsoft Semantic ядра Vectordata с Redis EncureCollectionExists не может найти коллекциюC#

Место общения программистов C#
Ответить
Anonymous
 Microsoft Semantic ядра Vectordata с Redis EncureCollectionExists не может найти коллекцию

Сообщение Anonymous »

Я пишу услугу в C# с ASP.NET, которая должна использовать векторную базу данных.

Код: Выделить всё

var embeddingGenerator = new OllamaEmbeddingGenerator(new Uri("http://localhost:11434"), modelId: "mxbai-embed-large");

builder.Services.AddChatClient(chatClient);

var vectorStoreOptions = new RedisVectorStoreOptions()
{
EmbeddingGenerator = embeddingGenerator,
};

builder.Services.AddRedisVectorStore("localhost:6379",vectorStoreOptions);
и функция для подъема кусков в магазине

Код: Выделить всё

public async Task UpsertToKnowledgeBase(Project project, IEnumerable chunks)
{

var collection = vectorStore.GetCollection(Constants.VectorDbCollectionPrefix + project.Id);

await collection.EnsureCollectionExistsAsync();

await collection.UpsertAsync(chunks);
}
< /code>
У меня была эта точная установка, работающая раньше, но с Qdrant вместо Redis для векторного хранилища. < /p>
builder.Services.AddSingleton(new QdrantVectorStore(new QdrantClient("localhost"), ownsClient: true, qdrantStoreOptions));
< /code>
Но теперь после перехода на Redis я получаю следующую ошибку при вызове функции upserttoknowledgebase: < /p>
StackExchange.Redis.RedisServerException: incident_knowledge_7d3c2e71-db43-414d-9729-a847140c5e83: no such index
< /code>
Ошибка добавляется с помощью collection.ensurecollectionexistsasync (), которая странная, поскольку эта функция специально должна создавать коллекцию, если она еще не существует. < /p>
Документация Microsoft читает так. Skhotelsjson :, при настройке записи с ключом H1, ключ записи должен быть предварительно профиксирован, как этот Skhotelsjson: H1, который должен быть добавлен в индекс. Семантическое ядро не обрабатывает Redis, автоматически добавляя толстую кишку к имени коллекции, поскольку поставщики должны быть взаимозаменяемыми.var collection = new RedisJsonCollection(
ConnectionMultiplexer.Connect("localhost:6379").GetDatabase(),
"skhotelsjson",
new() { PrefixCollectionNameToKeyNames = false });

await collection.GetAsync("myprefix_h1");
Но это побеждает многие абстракции, на мой взгляд, - например, я теряю ссылку на Embeddinggenerator, поскольку это не работает с Vectorstore, который я могу внедрить.>

Подробнее здесь: https://stackoverflow.com/questions/797 ... s-cant-fin
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»