Код: Выделить всё
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");
Подробнее здесь: https://stackoverflow.com/questions/797 ... s-cant-fin