переехали на вектурную бд

This commit is contained in:
2026-07-22 22:36:12 +04:00
parent 17a64809cb
commit b6829ce753
5 changed files with 130 additions and 23 deletions

View File

@@ -4,7 +4,7 @@ using CodeBase.Warehouse;
namespace CodeBase.Services
{
public class CodeService(ChunkService service,
ChunkWarehouse warehouse,
QdrantRepository repository,
VectorizationService vectorizationService,
LlmService llmService)
{
@@ -32,7 +32,7 @@ namespace CodeBase.Services
var chunks = await vectorizationService.EnrichChunksWithVectorsAsync(allChunks);
warehouse.UpsertDictionary(name, allChunks);
await repository.SaveChunksAsync(name, chunks);
return chunks;
}
@@ -41,38 +41,22 @@ namespace CodeBase.Services
{
var query = await vectorizationService.GetVectorAsync(question);
var answerVectors = Search(query, name, 15);
var answerVectors = await SearchAsync(query, name, 15);
var answer = await llmService.AskQuestionAsync(question, answerVectors.Select(s => s.Chunk).ToList());
var answer = await llmService.AskQuestionAsync(question, answerVectors);
return answer;
}
// Главный метод поиска
public List<(CodeChunk Chunk, float Score)> Search(
public async Task<List<CodeChunk>> SearchAsync(
float[] queryVector,
string name,
int topK = 3) // Возвращаем топ-3 результата
{
var memoryBase = warehouse.GetChunks(name);
var results = await repository.SearchAsync(name, queryVector, topK);
var results = new List<(CodeChunk, float)>();
foreach (var chunk in memoryBase)
{
if (chunk.Vector == null || chunk.Vector.Length == 0)
continue;
// Считаем близость вектора вопроса к вектору кода
float similarity = CalculateCosineSimilarity(queryVector, chunk.Vector);
results.Add((chunk, similarity));
}
// Сортируем по убыванию сходства (чем ближе к 1, тем лучше)
return results
.OrderByDescending(x => x.Item2)
.Take(topK)
.ToList();
return results;
}
// Математика косинусного сходства