Middle+
19
Как отсортировать 20 чанков и выбрать топ-5 наиболее релевантных для передачи в LLM?
Companies where asked
Сбербанк
Answer from AI
sobes.tech AI
Чтобы отсортировать 20 чанков и выбрать топ-5 наиболее релевантных для передачи в LLM, обычно используют метрику релевантности — например, косинусное сходство между вектором запроса и векторами чанков.
Примерный алгоритм:
- Для каждого чанка получить векторное представление (эмбеддинг).
- Получить эмбеддинг запроса.
- Вычислить косинусное сходство между запросом и каждым чанком.
- Отсортировать чанки по убыванию сходства.
- Выбрать первые 5 чанков.
Пример на Go с использованием срезов и сортировки:
import (
"sort"
"math"
)
type Chunk struct {
Text string
Embedding []float64
}
type ScoredChunk struct {
Chunk Chunk
Score float64
}
func cosineSimilarity(a, b []float64) float64 {
var dot, normA, normB float64
for i := range a {
dot += a[i] * b[i]
normA += a[i] * a[i]
normB += b[i] * b[i]
}
if normA == 0 || normB == 0 {
return 0
}
return dot / (math.Sqrt(normA) * math.Sqrt(normB))
}
func topKRelevantChunks(chunks []Chunk, queryEmbedding []float64, k int) []Chunk {
scored := make([]ScoredChunk, len(chunks))
for i, chunk := range chunks {
scored[i] = ScoredChunk{
Chunk: chunk,
Score: cosineSimilarity(chunk.Embedding, queryEmbedding),
}
}
sort.Slice(scored, func(i, j int) bool {
return scored[i].Score > scored[j].Score
})
result := make([]Chunk, 0, k)
for i := 0; i < k && i < len(scored); i++ {
result = append(result, scored[i].Chunk)
}
return result
}
Таким образом, вы выбираете наиболее релевантные чанки для передачи в LLM, что повышает качество ответа и экономит ресурсы.