Галоўная / Артыкулы / Практычныя прытамулкі: Стратэгіі фрагментавання RAG: Паўны інжынерны падчынак

Практычныя прытамулкі: Стратэгіі фрагментавання RAG: Паўны інжынерны падчынак

Практычныя прыказкі: Стратэгіі фрагментавання RAG: Полны інжынерны паўнаклад: кантракты, перакрыцчы і слоты для коду для команд, якія выкарыстоўваюць гэты патэрн.

2654 слоў

Наступныя прытамлівкі паказваюць практычны шлях для розумэння кнігі «RAG Chunking Strategies: The Complete Engineering Guide». Акцэнт ставіцца на кантракты, пераконтроўванні і месца для коду, які можна легка адразу вставіць, а не на мотывацыйныя аспекты. Калі працуеце на стадзіі агляду, спачатку запісайце кантракт: неабяжныя вхідныя даны, сігнал успеху і тое, што выканаецца у разе частковага невыпання. Такі список пераконтроўвання дапамагае заліцьваць пазнейшыя змены ў кодзе. Спрыймайце гэтую стадзію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы элементам, задаце критэрыя успеху і не падтрымайце частковае завершэння без паведамлення.

Асновны компроміс: контэкст проты точнасці

Этап «Контекст ключовых компромісаў» працюе найэфектывней, калі яго розглядаць як вимерную плошчу. Зафіксавце адну ідеальную версію, адин прыклад неудачы і запіс пра відкатанне раней, чым расширваце обсяг работы. Запісвайце часы виконання і вартасьць токенав або запытаў разам з функцыйнальнымі рэзультатамі. Візуабельная інформацыя пра вартасьці з самага пачатку запобегае неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спакульную. Раздзеліце політыку часткавання дадзеных ад політыки ўзяць іх. Змена адной з яных не павінна вымагаць перапісвання другой, калі зменяюцца паказнікі якосці.

[ TOO SMALL CHUNKS ]                  [ TOO LARGE CHUNKS ]
Loss of Context / Meaning             "Lost in the Middle" Effect
(e.g., "IF request is made...")       (Dense with irrelevant fluff)
            │                                      │
            └───────────────► 🎯 ◄─────────────────┘
                      THE GOLDILOCKS ZONE
                    (High Precision + Context)

Стратэгія 1: Раздзелванне фіксаванага розмеру і рэкурсыўнае (Базовыя варыянты)

Стадія рекурзыўнае обробкі з фіксаваным размерам у стратэгіі 1 працуе наяўней, калі яе розглядаюць як вимерную паверхню. Зафіксавайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Зберагаюце настройкі паза кодам прыемліка. Файлы серавэра, хранільнікі секретных дадзеных і флагі функцый должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць аудыт без неабяжнага чытання всіх дадзеных. Раздзеляйце правілы часткавання дадзеных ад правілў ўзяць іх. Змена адных не должна вымагаць перапісву іншых, калі зменяюцыся паказателі якосці.

Часткавання з фіксаваным размерам (наўатывальны падход)

Этап фіксаванага размеру чакункавання «Наўін» працюе найэфективней калі яго спрыяваць як меравальную плошчу. Зберагучы адны ідеалны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Дакументаваць трэба як успішны, так і вярнучыся паты. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не чымось, што дадаецца пазней. Раздзеліце політыку чакункавання ад політыкі выкарыстоўвання дадзеных. Змена адной з іх не должна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці. Этап фіксаванага размеру чакункавання «Наўін» працюе найэфективней калі яго спрыяваць як меравальную плошчу. Зберагучы адны ідеалны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану, перш чым расширваць сферу дзеяння. Спрыявайце гэтам этапу як кантракту межа вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаць критэрыя успеху і не прабывайце прыймаць часткова завершаныя рэзультаты без паведамлення.

Рэкурзіўнае чакункаванне симвалоў (Базовы стандарт для працы)

Для стадіі рекурсыўнага часткавання симвалаў неабходна перад змянай коду задаць вхідныя даны, абавесцелювальніка крока і крэтырыя завершэння. Аперацыёныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токенаў або запытаў праза функцыйнае рэзультаты. Відкрытыя даны пра косцы запобегаюць неспакоўным рахункам, калі парадок зменяецца з дэмавай версіі на спадзеленыя среды. Указваць часткі тексту, якія фактычна сталі падставай для адпаведнага адказу. Без ціх цытатаў аперацыёныя працавнікі не можуць адразніць галюцинацыю ад прасоў у індэксаванні.

# Example: LangChain Recursive Character Splitter
from langchain.text_splitter import RecursiveCharacterTextSplitter
splitter = RecursiveCharacterTextSplitter(
    chunk_size=512,
    chunk_overlap=50,
    separators=["\n\n", "\n", ". ", " ", ""]
)

Стратэгія 2: Часткаванне з урахоўваннем структуры і сэмантыкі

Для стадіі «Стратэгія 2: Семантыка, ўсведамлена структурой» неабходна прадзефінавацыя вхідных дадзеных, адпаведнага адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць праза кодам прыкладнення. Файлы сераўіса, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое працавнікі можуць пераглядаць, не чытаючы весь граф. Неабходна цітаваць тыя часткі тексту, якія фактычна ляглі в основу адпаведнай адпаведзі. Без цітатаў працавнікі не можуць адразніць галюцинацыю ад прасоўкі ў індэксаванні.

Разбіўка на часткі, ўсведамлена структурой (дакумент-орыентаваная)

Для стадіі фрагментавання дакумента з урахоўваннем структуры неабходна перш за ўсё визначыць вхідныя даны, адпаведальнага за этап і критэрыя завершэння прычыненне перад змінайом коду. Аператары должны магчымае перзапускати этап з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не етапамі далейшай наладкі. Прыцінаваць трэба тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адпаведзі. Без ціх цытатаў аператары не зможаць розразліць галюцинацыю ад працягу індэксавання. Для стадіі фрагментавання дакумента з урахоўваннем структуры неабходна перш за ўсё визначыць вхідныя даны, адпаведальнага за этап і критэрыя завершэння прычыненне перад змінайом коду. Аператары должны магчымае перзапускати этап з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяць трэба цій стадіі як на даговоры межа вхідных даных і перакананых выходных рэзультатаў. Назваць всі элементы, визначыць критэрыя успеху і адмовіцца ад безадказных частковых рашэнняў.

Завершэнне.

Семантычна часткавацеўка (межы на аднойчыні з значэнням)

Калі працуеце над стадзіяй семантычнай часткавацеўкі з межамі на аднойчыні з значэнням, спачатку запісайце угоду: неабходныя даны, сігнал успеху і тое, што выканаецца у разы частковага невялікога браку. Такі чарт дапамагае заліцвачыць пазнейшыя змены ў кодзе. Запісвайце часы выканання і кост токеноў або запытаў па боку функцыйнаых рэзультатаў. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя среды. Замерьце рэтард на фіксаванай сэтке запытаў прычым регулюванні прапазаў. Частыя змены прапазаў рэдка калі лепшаюць слабую систему адзысквання інформаціі.

Sentence A ──► Embed ──┐
Sentence B ──► Embed ──┴── Similarity: 0.89 (Keep together)
Sentence C ──► Embed ──── Similarity: 0.32 (Drop below threshold -> CUT HERE)

Стратэгія 3: Развітыя архітектуры, якія зберагаюць контэкст

Калі працуеце над стадзіяй «Стратэгія 3: Развітая версія з адарожэннем контексту», спачатку запісайце умовы працы: неабяжлівыя даннэ, сігнал успеху і тое, што выканаецца у разе частковага нявыполнення. Такі список контроля дапамагае заліцьварыць чыстасцю пазнейшых змян у кодзе. Храніце настройкі парадульна коду прыемлена. Файлы сераўіснага сэрвісу, базы секретных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Перад налаштаваннем запитоў пераканайцеся ў рэверыі на фіксаванай сэтке запитаў. Частыя змены запітоў рэдка калі вядуць да павышэння якосці выкарыстоўвання дадзеных.

1. Разбіўка на часткі: ад малага да вялікага (родны-дзецінскі падчынення)

Калі працюеце над першым этапам «Маленькія часткі – вялікія часткі для родыка-дзеці», спачатку запісайце угоду: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам. Змяроўвайце ступень вяснавання на фіксованым наборе запытанняў прычым падбір запытань. Частае змена запытанняў рэдка калі вярнуе слабую способнасць да вяснавання. Калі працюеце над першым этапам «Маленькія часткі – вялікія часткі для родыка-дзеці», спачатку запісайце угоду: неабяжлівыя данні, сигнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Спрыятлівайце гэтаму этапу як угодзе між вхіднымі даннемі і перакананымі выходнымі рэзультатамі. Даўце назвы элементам, задайце критэрыя успеху і адмовіцеся ад тыхнага частковага завершэння без паведамлення.

2. Пазнейшая часткаваўка

Этап 2 «Пазлаванне пасляў» работае наякша, калі яго спрыяваць як мерыемую паверхню. Запісаце адна ідеальная версія транскрыпцыі, адзін прыклад неудачы і прыметку пра адвярненне перш чым расширваць масштабы. Запісвайце часы выканання і косты токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівая візуабельнасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмавайнага режыма ў спяльныя среды. Раздзеляйце правілы пазлавання пасляў ад правілаў выкарыстоўвання дадзеных. Змена аднаго з іх не должна прымусіваць перапісванне другога, калі змянююцца паказнікі якосці.

Матрыца рашэнняў для прыменення

Этап матрыцы рашэння працэўкі ўсё лепш функцыонуе, калі яго спрыяваць як меравальную плошчу. Зафіксавайце адну ідеальную версію, адзін прыклад неудачы і запіс пра вярнэнне да поперадней версіі перш чым расширваць масштабы. Зберагаюце настройкі паза кодам прыемліка. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны знаходзіцца ў аднам месцы, куды аператары можаць адбавляць аудыт без неабяжнага чытання всіх дадзеных. Раздзеляйце правілы частковай обработкі дадзеных ад правілаў ўтрымання іх. Змена адных не должна вымагаць перапісву іншых, калі зменяюцыся паказначыкі якосці.

Кантрольныя правілы інжынерыі для успеху

Правіла інжынернай структуры для параграфовых заданняў даюць найкращыя результаты, калі іх спрыяваць як меруючую паверхню. Зафіксуйце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб задання. Документавайце як шлях успеху, так і шлях вярнэння да нормальнага стану. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є часткай продукту, а не етапамі далейшай правкі. Раздзеліце політыку частковай обработкі дадзеных ад політыки ўтрымання інформацыі. Змена адной з яных не должна вымагаць перапісвання другой, калі зменяюцыся показнікі якосці. Правіла інжынернай структуры для параграфовых заданняў даюць найкращыя результаты, калі іх спрыяваць як меруючую паверхню. Зафіксуйце адны ідеальны прыклад, адзін кейс неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштаб задання. Спрыявайце гэты параграф як даговор між вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Дайце назвы элементам, задаць критэрыя успеху і не падтрымвайце бяспечнае частковае завершэння задання.

Час прыступіць да рэальной работы..

Ёнколі хочацеся перайсці на новы этап, паказуйце вхідныя даны, адміністратара крока і критэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісвайце час выконання і кост токена або запыту праз функцыйнальныя рэзултаты. Відразувая візуабельнасць костаў запобегае неспакойным рахункам, калі траекторыя перайходзіць з дэмаверсіі ў спакульнаныя среды. Указвайце тыя часткі, якія фактычна ляглі в основу адпаведнай адказы. Без цых цітатаў аператары не можуць разлічыць галюцинацію ад прасоў у індэксаванні.

Прыямыя прэтарысткі

У стадії прабэрасупактаў неабходна з’явіць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць паза кодам прыемленае. Файлы серавэра, хранільнікі секретных дадзеных і флагі функцый належыць у аднам месца, якое працавнікі можу аудытаваць, не чытаючы весь ланцуг. Паказваць трэба тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў працавнікі не зможу роззначыць галюцинацію ад працявання з непаштоўным індэксам.

pip install langchain langchain-community langchain-experimental llama-index llama-index-embeddings-openai openai chromadb
export OPENAI_API_KEY="your-openai-api-key"

1. Рекурсыўнае раздзелэнне симвалаў (LangChain)

Для стадіі 1 «Рекурсыўнае раздзелэнне симвалоў» неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за выкананне крока і крэтыяры завершэння. Аператары должны магчымае перайсці на выкананне крока з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Неабходна аддзержваць дакументацыю як пра шлях успеху, так і пра шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней. Паказваць часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не можуць разлічыць галюцинацію ад прасоў у індэксаванні. Для стадіі 1 «Рекурсыўнае раздзелэнне симвалоў» неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за выкананне крока і крэтыяры завершэння. Аператары должны магчымае перайсці на выкананне крока з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Спрыяць гэтай стадіі як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Назваць всі неабходныя элементы, задаць крэтыяры успеху і адмовіцца ад мовчанкавага частковага завершэння задачы.

from langchain_text_splitters import RecursiveCharacterTextSplitter

# Sample document
sample_text = """
# RAG System Design
Retrieval-Augmented Generation (RAG) decouples knowledge storage from reasoning capability.
Instead of forcing the AI to answer strictly from memory, RAG searches an external database first.
## The Ingestion Pipeline
1. Document Extraction: PDFs and web pages are converted into clean text.
2. Chunking: Documents are chopped into smaller, manageable text blocks.
3. Vectorization: Each block is converted into a numeric representation.
"""

# Initialize Recursive Splitter
text_splitter = RecursiveCharacterTextSplitter(
    chunk_size=200,        # Target chunk size in characters/tokens
    chunk_overlap=30,      # Overlap to prevent mid-sentence context loss
    separators=["\n\n", "\n", ". ", " ", ""] # Try double line breaks first
)
chunks = text_splitter.create_documents([sample_text])
print(f"Total chunks created: {len(chunks)}\n")
for i, chunk in enumerate(chunks):
    print(f"--- Chunk {i+1} ---")
    print(chunk.page_content)

2. Разбіўка на часткі «родыч-дзеця» / з малага на великае (LangChain + Chroma)

Калі працюеце над стадіяй разбіўкі на часткі «родыч-дзеця» з малага на великае, спачатку запішыце умовы: неабходныя данні, сигнал успеху та тое, што вядзецься у разы ў частковай невдачы. Такі список контролю дапамагае залишацца чыстасаблівым пад час пазнейшых змян у кодзе. Запісвайце час выконання та вартасьць токенав або запыткаў праза функцыйнае рэзультат. Відразліва візуалізацыя вартасцей запобегае неспакою, калі процес пераходзіць з дэмавайну у спяльныя сераўы. Перад налаштаваннем запрошэнняяў пераканайцеся ў рівні відтворэння інформацыі на фіксаванай сэтке запытаў. Частае зміненне запрошэнняяў рэдка калі-небудзь выправляе слабкія аспекты пошуку інформацыі.

from langchain_text_splitters import RecursiveCharacterTextSplitter
from langchain.retrievers import ParentDocumentRetriever
from langchain_community.vectorstores import Chroma
from langchain_community.storage import InMemoryStore
from langchain_openai import OpenAIEmbeddings
from langchain_core.documents import Document
# 1. Initialize Vector Store (for small child embeddings) and DocStore (for large parent text)
embeddings = OpenAIEmbeddings()
vectorstore = Chroma(collection_name="parent_child_rag", embedding_function=embeddings)
docstore = InMemoryStore()

# 2. Define Parent (Big) and Child (Small) Splitters
parent_splitter = RecursiveCharacterTextSplitter(chunk_size=600, chunk_overlap=50)
child_splitter = RecursiveCharacterTextSplitter(chunk_size=120, chunk_overlap=20)

# 3. Create the ParentDocumentRetriever
retriever = ParentDocumentRetriever(
    vectorstore=vectorstore,
    docstore=docstore,
    child_splitter=child_splitter,
    parent_splitter=parent_splitter,
)

# 4. Ingest Documents
docs = [
    Document(
        page_content="""
        System Architecture: The Two Pipelines.
        A production RAG framework runs on two main pipelines: Ingestion and Inference.
        The Ingestion pipeline extracts text, creates chunks, embeds them, and stores them in a vector DB.
        The Inference pipeline encodes user queries, performs vector similarity search, injects context into prompts, and generates LLM answers.
        Hybrid search combines keyword and vector retrieval to handle exact SKU IDs alongside general concepts.
        """
    )
]
retriever.add_documents(docs)

# 5. Query the Retriever
query = "What happens during inference in RAG?"
retrieved_parents = retriever.invoke(query)
print(f"Retrieved Parent Context (Full Block):\n")
print(retrieved_parents[0].page_content)

3. Семантычная разбіўка на часткі (LlamaIndex)

Калі працюеце з 3 стадзямі Semantic Chunking LlamaIndex, спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага неяксамоства. Такі список пераканаецца дапамагае залічыць змяны ў кодзе пазнейша. Зберагайце настройкі за межамі коду прыемліка. Файлы сераўнавання, хранілішчы секрэтных дадзеных і флагі функций павінны знаходзіцца ў адном месцы, куды аператары можаюць адбавіць аудыт без неабяжлівага чытання всей структуры. Замерайце рэкалі на фіксаваным наборе запытанняў прычымо да налаштавання прамптаў. Частыя змены прамптаў рэдка калі выправляюць слабую эфектыўнасць адзысквання дадзеных.

from llama_index.core.node_parser import SemanticSplitterNodeParser
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.core.schema import Document
# 1. Initialize the Embedding Model used for detecting topic shifts
embed_model = OpenAIEmbedding(model="text-embedding-3-small")

# 2. Configure the Semantic Splitter
semantic_parser = SemanticSplitterNodeParser(
    buffer_size=1,                         # Number of surrounding sentences to evaluate together
    breakpoint_percentile_threshold=90,     # Split threshold percentile (higher = fewer, larger chunks)
    embed_model=embed_model
)

# 3. Sample document with distinct thematic shifts
raw_text = """
Quantum computing leverages qubits that can exist in superposition states, unlike classical bits.
Superposition allows algorithms to process vast potential outcomes simultaneously.
Entanglement further connects qubit states instantaneously across physical space.
On a totally different topic, baking sourdough bread requires maintaining a wild yeast starter.
You feed the starter equal parts flour and water every 24 hours to encourage fermentation.
Proper gluten development requires folding the dough during the bulk fermentation stage.
"""
doc = Document(text=raw_text)

# 4. Generate Nodes (Chunks)
nodes = semantic_parser.get_nodes_from_documents([doc])
print(f"Total Semantically Coherent Chunks: {len(nodes)}\n")
for i, node in enumerate(nodes):
    print(f"--- Chunk {i+1} ---")
    print(node.get_content().strip())
    print("\n")

Падсумак адбудовы

Калі працуеце над стадзіяй падсумку адканалявання, спачатку запісайце «контракт»: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага адказу. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткай продукту, а не пазнейшым дапрацоўкам. Змяржывайце рэткасць адказоў на фіксаваныя наборы запытанняў прычым регулюванні падказак. Частае змена падказак рэдка калі вярнайце слабкую базу адказоў. Калі працуеце над стадзіяй падсумку адканалявання, спачатку запісайце «контракт»: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага адказу. Такі список пераканальвае ў тым, каб пазнейшыя змены коду былі чыстымі. Спрэцаваўце гэтую стадзію як контракт межа данымі і пераканальванымі выходамі. Назвайце артыфакты, задаць тэсты на успех і не прабывайце адмаўляць частковыя адказы без паведамлення.

Вывад: Чанкаванне — гэта інжынерныя проблемы, а не проблемы ШІ

Метод чанкавання ў выніку ўсё краща працюе, калі яго розглядаць як виміроўваную структуру. Запісайце адну ідеальную версію транскрипцыі, адин прыклад неудачы і прыметку па поверненню да попярэдня стану пры розширэнні масштаба. Запісвайце часы виконання і вартасць токенав або запита разам з функцыональнымі рэзултатамі. Візуабельна інформацыя пра вартасці з самага пачатку запобегае неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спяльнаныя сераўеры. Раздзеляйце правілы чанкавання і правілы выкарыстоўвання дадзеных. Змена адных не павінна прымусваць перапісвання іншых, калі змянююцыся паказнікі якосці.

Чэк-ліст для эксплуатацыі

Для етапа чэк-ліста для эксплуатацыі неабходна з’явіць вхідныя даны, адпаведальнага за кожны крок і критэрыя завершэння пры зміне коду. Аператары павінны магчымаць перзапуск кроку з вядомай точкі контролю, не спрабоўваючы здогадвацца пра схованы стан.