Галоўная / Артыкулы / Практычныя прытамулкі: Я створыў систему RAG, якая сама адбывае аудыт. Ось як (з

Практычныя прытамулкі: Я створыў систему RAG, якая сама адбывае аудыт. Ось як (з

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

3096 слоў

У гэтым карыце паказвана дорага ад сыр'ёчных матэрыялаў да рабочай системы для: «Я створыў систему RAG, якая сама аудытуе сябе. Як гэта здарыцца (з кодам)». Акцэнт ставіцься на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у репазітарый без неабяснення меты. У стадзіі агульнага відгледу неабходна практычна апісацыя вхідных дадзеных, адпаведальнага за крок і крэатарыяў завершэння працы перш чым змяніць код. Аператары должны магчымае перадзваніць крок з вядомай точкі контролю, не падозрываючы прыхованы стан системы. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы должна быць чыстаю, а не паслядкам заплутанага ланцоўка працы.

Чаму ніхто не стежы за процэсам адзысквання дадзеных (і чаму гэта скора ўдарыць іх)

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

Тры рэчы, якія выходзяць з-пад контролю тыха

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

1. Chunk Poisoning

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

2. Змяны ў эмбеддінгу

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

3. Неэфектывае выкарыстоўванне контэкстнага вікна

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

Што мы ствараем

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

▣ Пераконтраце #1: Аблікаванне релевантнасці частак.

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

▣ Пераканальнай #2: Адказванне на змяны у эмбеддінгах.

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

▣ Пераконтроль #3: Канэкстнае вікно – эфектыўнасць.

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

Неабяжнае.

Стварэнне аудыту: пачніце з набора «золатых» запытанняў

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

[
  {
    "query": "What is the refund policy for digital products?",
    "expected_chunk_ids": ["faq_doc_chunk_12", "faq_doc_chunk_13"],
    "notes": "Customer FAQ, policy updated 2024-Q1"
  },
  {
    "query": "How do I reset my API key?",
    "expected_chunk_ids": ["api_docs_chunk_07"],
    "notes": "API documentation, stable"
  }
]

Калькі момантамі, якія маюць значэнне пад час стварэння:

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

Скрыпт аудыты

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

Структура рэпазітария Github

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

rag-retrieval-audit/
├── audit/
│   ├── __init__.py           # Package exports
│   ├── rag_audit.py          # Main audit logic — all three checks
│   └── config.py             # All thresholds and model settings
├── examples/
│   ├── golden_queries.json   # Sample golden set (10 queries)
│   └── run_audit.py          # End-to-end demo — runs without an existing collection
├── tests/
│   └── test_audit.py         # Unit tests for all scoring functions
├── requirements.txt          # sentence-transformers, chromadb, scipy, numpy
└── README.md                 # Setup, usage, how to read the report
# rag_audit.py — structure overview
# Full implementation: https://github.com/satyam671/rag-retrieval-audit

# ── CONFIGURATION (tune to your pipeline)
EMBEDDING_MODEL      = "all-MiniLM-L6-v2"  # must match your index
TOP_K                = 5
RELEVANCE_THRESHOLD  = 0.70
DRIFT_P_THRESHOLD    = 0.05
EFFICIENCY_THRESHOLD = 0.40

# ── CHECK 1: Are the right chunks coming back?
def score_relevance(query_embedding, chunk_embeddings, expected_ids, retrieved_ids):
    """Cosine similarity per chunk + expected chunk hit/miss against golden set."""
    ...
# ── CHECK 2: Has retrieval quality shifted over time?
def detect_drift(current_sims, baseline_path=None):
    """Two-sample KS test comparing current similarity distribution to baseline."""
    ...
# ── CHECK 3: How much of the context window is signal?
def score_efficiency(retrieved_docs, answer):
    """Token overlap between retrieved chunks and the LLM answer."""
    ...
# ── RUNNER
def run_audit(golden_set_path, collection_name, chroma_persist_dir,
              baseline_path=None, answers_path=None, output_path="rag_audit_report.json"):
    """Runs all three checks, writes a structured JSON report, saves the baseline."""
    ...

Падробны аналіз таго, што насправды рабіць кожны пераконтроль

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

▣ Ацэнка релевантнасці частак

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

# WITHOUT the relevance gate — standard approach most teams use
def build_context_naive(query, collection, top_k=5):
    results = collection.query(
        query_embeddings=[embed(query)],
        n_results=top_k,
        include=["documents"]
    )
    # Pass everything back, no quality check
    return "\n\n".join(results["documents"][0])

# WITH the relevance gate - what the audit tells you to build
def build_context_gated(query, collection, model, top_k=5, threshold=0.70):
    q_emb   = model.encode([query], normalize_embeddings=True)[0]
    results = collection.query(
        query_embeddings=[q_emb.tolist()],
        n_results=top_k,
        include=["documents", "embeddings", "ids"]
    )
    passed_chunks = []
    for i, chunk_emb in enumerate(results["embeddings"][0]):
        sim = cosine_sim(q_emb, np.array(chunk_emb))
        if sim >= threshold:
            passed_chunks.append(results["documents"][0][i])
    # Empty context is better than wrong context
    return "\n\n".join(passed_chunks)

▣ Адкрытыя дытэкція адхіленняў

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

▣ Карабатнае выкарыстоўванне вікна контэксту

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

Чытанне адчытыны

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

Адказкі выходныя даны пасля запуску run_audit.py:

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

python -m examples.run_audit

Чарткі для аудыту системы адналёгчэння

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

Адна рэч, якую бы вы зробілі інакш

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

Што гэта не абяжвае

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

Справы

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

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

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

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

Раздзеліце політыку часткавання ад політыке выявлення дадзейнаў. Змена адной з іх не павінна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці.

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

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

Раздзеліце політыку часткавання ад політыке выявлення дадзейнаў. Змена адной з іх не павінна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці.

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

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