переехали на вектурную бд
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
// Математика косинусного сходства
|
||||
|
||||
Reference in New Issue
Block a user