Alterna · учебный материал
18.1 Сначала найдём части документа
Большой документ не всегда помещается в вопрос целиком. Разделим его на фрагменты и сохраним источник каждой части.
Что в этом материале
- Поиск работает не с «папкой знаний», а с адресуемыми фрагментами
Содержание и основные понятия
Мы умеем сравнивать представления и генерировать по входу.
Большой документ не всегда помещается в вопрос целиком. Разделим его на фрагменты и сохраним источник каждой части.
Поиск выбирает фрагменты; builder добавляет их к вопросу. Память, история и tool result имеют разные источники. Право действия проверяет программа, а цикл обязан иметь причину остановки.
Для изменения рисунка включитеJavaScript; расчёт и теория доступны далее.
Поиск работает не с «папкой знаний», а с адресуемыми фрагментами
Pipeline ingestion читает bytes, определяет формат, извлекает текст, нормализует допустимые различия и режет документ на chunks. Каждый chunk обязан сохранить provenance: document ID/version, диапазон offsets, заголовок, дату и права доступа. Без этих полей найденный текст трудно проверить, обновить или процитировать.
При window
w
и overlap
o<w
следующий start равен
s+w-o
. Overlap уменьшает риск разрыва локального контекста, но создаёт дубликаты и увеличивает index. Token-based boundaries зависят от tokenizer; character offsets нужны отдельно для подсветки исходника.
s
0
=
0
,
s
k
+
1
=
s
k
+
w
−
o
,
c
k
=
t
s
k
:
min
(
s
k
+
w
,
n
)
.
s_0=0,\qquad s_{k+1}=s_k+w-o,
\qquad c_k=t_{s_k:\min(s_k+w,n)}.
s
0
=
0
,
s
k
+
1
=
s
k
+
w
−
o
,
c
k
=
t
s
k
:
m
i
n
(
s
k
+
w
,
n
)
.
Что показывает модель.
Визуальная модель связывает каждый chunk с подсвеченным диапазоном исходного документа и показывает overlap как повтор, а не новое знание. Stable chunk ID должен зависеть от версии splitter и content hash; изменение документа требует invalidation старых vectors.
Граница применимости.
Fixed windows не понимают структуру таблиц, кода или ссылок между разделами. OCR способен вносить ошибки до retrieval. Chunking не решает access control: фильтрация разрешённых документов должна происходить до выдачи context пользователю, включая shared cache.
tokens_18a="a b c d e f g".split(); window_18a,overlap_18a=4,1
chunks_18a=[]
for start_18a in range(0,len(tokens_18a),window_18a-overlap_18a):
chunks_18a.append((start_18a,tokens_18a[start_18a:start_18a+window_18a]))
assert chunks_18a==[(0,['a','b','c','d']),(3,['d','e','f','g']),(6,['g'])]
Код повторяет только что разобранные операции.
Полный проверяемыйPython-пример главы
доступен отдельным файлом; показанный короткий фрагмент не заменяет его реализацию.
Stable IDs и source metadata позволяют проследить происхождение context.
Сравнение и выбор фрагментов. Как этот вопрос продолжает полученный результат?
Python-примеры главы 18
Академическая база →