awesome-everything EN
↑ Обратно к восхождению

AI / LLM

RAG architecture: чтение кода и pipeline

Суть Чтение реального кода RAG-pipeline — chunker, поиск по cosine similarity, стадия retrieve-then-rerank и сборщик контекста — с выбором исправления наибольшего рычага.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 14 min

Баги RAG прячутся в коде, который работает без ошибок и возвращает правдоподобный текст. Читайте каждый сниппет так, как читали бы на ревью, и выбирайте дефект, который senior ловит до того, как тот выдаст уверенный неверный ответ.

Цель

Отработайте цикл ревью RAG-pipeline: заметить изъян chunking, баг в математике similarity, отсутствующую стадию rerank и ошибку сборки контекста, которая тихо роняет качество ответов.

Сниппет 1 — chunker

def chunk(text, size=1000):
    # split on a fixed character count, no overlap
    return [text[i:i + size] for i in range(0, len(text), size)]
Викторина

Какая проблема этого chunker для прозового корпуса даёт наибольший рычаг и каково первое исправление?

Сниппет 2 — оценка similarity

import numpy as np

def score(query_vec, chunk_vec):
    # rank candidates by this value
    return np.dot(query_vec, chunk_vec)
Викторина

Ранжирование по сырому скалярному произведению вместо cosine similarity опасно, когда embeddings не нормализованы. Почему и каково исправление?

Сниппет 3 — retrieve и rerank

def answer(query):
    qv = embed(query)
    candidates = vector_store.search(qv, k=3)   # top-3 by cosine
    context = "\n".join(c.text for c in candidates)
    return llm(f"Answer using:\n{context}\n\nQ: {query}")
Викторина

Senior отмечает это как причину низкого качества ответов на сложных запросах. Какое изменение даёт наибольший рычаг?

Сниппет 4 — сборка контекста

def assemble(reranked, query):
    # reranked is sorted best-first
    blocks = [c.text for c in reranked]          # best chunk first, rest after
    context = "\n\n".join(blocks)
    return f"{context}\n\nQuestion: {query}"
Викторина

Для длинного собранного контекста: что говорит lost-in-the-middle об этом порядке и как собирать вместо этого?

Итог

Каждый баг RAG читается в коде: chunking фиксированного размера без overlap рассекает факты на границах; ранжирование по сырому скалярному произведению на ненормализованных векторах даёт величине обойти смысл, поэтому используйте cosine; одиночный retrieve с k=3 без rerank — один промах ANN до галлюцинации, поэтому retrieve широко, затем rerank узко; а порядок сборки важен, потому что внимание U-образное — оставляйте мало чанков и ставьте сильнейшие доказательства по краям. Чините стадию pipeline с наибольшим рычагом, затем переоцените на отложенном наборе для подтверждения.

Продолжить восхождение ↑RAG architecture: соберите и оцените retrieval-pipeline
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.