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, который я могу внедрить.>
Я пишу услугу в C# с ASP.NET, которая должна использовать векторную базу данных.[code]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); [/code] [b] и функция для подъема кусков в магазине [/b] [code]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"); [/code] Но это побеждает многие абстракции, на мой взгляд, - например, я теряю ссылку на Embeddinggenerator, поскольку это не работает с Vectorstore, который я могу внедрить.>