Практычныя прытамкі: RAG: Парадоксы, які таямніча знижуюць якасць адзыскання інфармацыі
Практычныя прыказкі: RAG – памылкі, які таямніча знижуюць якасць адзыскання інфармацыі: контракты, перакрычанні та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўку ідэй з артыкула “RAG: Mistakes that Quietly Kill Retrieval Quality” для працавальнікаў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы заданняў. Этап Аналізу работае найэфектывней, калі яго спрыяваць як мерыябельную плошчу. Запісайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму расширэння масштаба. Запісвайце часы виконання і косты токенавання або запита праза функцыональныя рэзултаты. Відразувая візуабільнасць костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Чаму самэ адзыскванне інфармацыі, а не ўтворэнне тэксту, яе выключае у RAG
Для стадіі выкарыстоўвання інфармацыі, а не створэння яе, перад змянай коду неабходна адзначыць вхідныя даны, адпаведальнага за шаг і критэрыя завершэння. Аператары должны магчымае перадзягнуць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць паза кодам прыкладнення. Файлы сераўнавання, хранільнікі секрэтных данных і флагі функцыяй павінны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг задач. Паказваць трэба тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аператары не можаць розразліць галюцинацію ад прычыны, зв’язанай з недастаткам індэксацыі.
Основныя панявы, каротка
Для ключовых кансэптаў спачатку неабходна короткая інтрадукцыя: павінны быть ваказаны вхідныя даны, адпаведальная особа за крок і критэрыі завершэння пры змяне коду. Аператары должны магчыма ўвайсці зноў у крок па вядомым контрольным пункту, не спрабоўваючы здогадвацца пра схованы стан. Неабходна задокументаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не етапамі далейшай доўнелівання. Павінны быць наведеныя фрагменты, якія насправдзе ляглі в основу адпаведнай адказаў. Без ціх цитатаў аператары не зможуць розразліць галюцинацыю ад працягу індэксавання.
Памылкі 1 да 4: памылкі частковай обработкі
Для стадій Адмешкань 1 да 4 неабяжна прадзеўляць інпуты, адпаведнага власніка крока і крэтыяры выходу пры змены коду. Аператары павінны магчымаць перзапуск крока з вядомай точкі контролю, не падозрываючы схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшае, прычына неабяжна вказваць на адну адпаведную адпавядальнасць, а не на заплутаны ланцужок задач. Наводзіце тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аператары не зможаць разлічыць галюцинацію ад працягу ў індэксаванні.
Адмешкань 1: выбіранне простага спосабу раздзелення на фіксаваныя часткі без тэставання альтернатыў
Для адаптавання дарага «Памылка 1» пад стадію неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння пры перадзмене коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Спрэчвайце гэтую стадію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, узначыце перакананні успеху і адмовіцеся ад тыхняга частковага завершэння без паведамлення. Цітуйце тыя часткі, якія фактычна лежалі в основе адпаведнай адказы. Без цітатаў аператары не зможаць разлічыць галюцинацію ад прасоў у індэксаванні.
from langchain_text_splitters import RecursiveCharacterTextSplitter
# Recursive splitting respects structure first, falls back to
# character boundaries only when a section is still too large.
splitter = RecursiveCharacterTextSplitter(
chunk_size=512, # tokens, not characters, if you swap in a token-aware splitter
chunk_overlap=75, # ~15% overlap, a reasonable starting point
separators=["\n## ", "\n### ", "\n\n", "\n", ". ", " "],
)
chunks = splitter.split_text(document_text)
Памылка 2: выбіранне розмеру фрагмента без увагі да типу дакумента
Для галаты 2, касаецца выбору этапа, пярэд змінайом код неабходна адзначыць вхідныя даны, адпаведальнага за шаг і критэрыя завершэння. Аператары должны магчымаць перзапуск шага з вядомай точкі контролю, не прабуючы спадарацца прыватны стан. Запісваюць час выконання і вартасць токена або запытку празаўседле з функцыйнальнымі рэзультатамі. Відразлівая вартасць з самага пачатку запобегае неспакоўным рахункам, калі траекторыя пераходзіць з дэмаверсіі ў спакульнаныя сераўы. Наводзіць трэба тые часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аператары не можуць разлічыць галюцинацію ад прасоўкі ў індэксаванні.
Галата 3: ігнараванне або неправильнае адмаўленне перакрыцча частак
Для грубыя памялкі №3, яка заключаецца ў ігнараванні структуры документа, неабходна пазначыць вхідныя даны, адпаведальнага за кожны крок і критэрыя завершэння працы перад змінайом коду. Аператары должны магчымае перадзягнуць виконанне кроку з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Конфігурацыю трэба залічваць пазначальна ад коду прыкладнення. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг задач. Неабходна цітаваць тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без цітатаў аператары не можаць разлічыць галюцинацію ад працягу індексавання.
Грубая памялка №4: ігнараванне сэрцаўскай структуры документа
Для грубкі 4, яка выражаецца ў ігнараванні этапу, неабходна пазначыць вхідныя даны, адпаведальнага за шаг і крэтыяры завершэння пры перадзеіснавленні коду. Аператары должны магчымаць перзапуск шагу з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабходна аддактуваць дакументацыю як для стандартнага, так і для альтернатывнага падходу. Практыкі перапрыбутку, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не дадатковымі правакамі пазнейшага этапу. Прыкладзіце часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не зможуць разлічыць галюцинацію ад прасоў у індэксаванні.
Грубкі 5-7: адказы ў структуре выкарыстоўвання дадзеных
Для стадыі адказаў 5–7 неабходна пазначыць вхідныя даны, адпаведальнага за крок і крэтыяры завершэння пры змены коду. Аператары должны магчымае перадзеісцаваць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест амаль неканчатых скрыптав. Калі крок не выйшаў, адказ на проблему должен вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Прыкладзіце тыя часткі тексту, якія фактычна лежалі в основе адказа. Без цых цитатаў аператары не зможуць разлічыць галюцинацію ад працягу праз прычыну ў індэксацыі.
Адказ 5: выкарыстоўванне толькі пошуку за вектарамі і недахоўка BM25
Для стадіі Mistake 5, дзе выкарыстоўваецца толькі вектар адправкі, пярэд змянай коду неабходна задаць вхідныя даны, адпаведальнага за крок і крэтары завершэння. Аператары должны магчымае запускіць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій стадіі як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даць назвы артыфактам, задаць перакананні на успех і адмовіцца ад беззвучнага частковага завершэння. Апісваць тыя часткі, якія фактычна ляглі в основу адпаведнай адказы. Без цых апісаў аператары не зможуць розразліць галюцинацыю ад працягу індэксавання.
from langchain.retrievers import EnsembleRetriever
from langchain_community.retrievers import BM25Retriever
bm25_retriever = BM25Retriever.from_texts(chunk_texts)
bm25_retriever.k = 20
vector_retriever = vectorstore.as_retriever(search_kwargs={"k": 20})
# weights are a starting point for RRF-style blending; tune against your eval set
hybrid_retriever = EnsembleRetriever(
retrievers=[bm25_retriever, vector_retriever],
weights=[0.4, 0.6],
)
results = hybrid_retriever.invoke(user_query)
Mistake 6: спаўненне рэзультатаў за дапамою простаг сярэжнага значэння з вазамі заместо RRF
Для стадіі аналіза рэзультатаў злучэння пад час Памылкі 6 неабходна перад змянай коду задаць вхідныя даны, адпаведальнага за шаг і крэтыяры завершэння. Аперацыёныя працавнікі должны магчымае запускаць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць трэба час выконання і кост токенаў або запытаў праза функцыйнае рэзультаты. Відкрытыя данні пра косцы запобегаюць неспакоўным рахункам, калі працэс пераходзіць з дэмавай версіі ў спяльныя среды. Неабходна цітаваць тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адказу. Без цітатаў аперацыёныя працавнікі не можуць адразнаць галюцинацыю ад прасоўкі ў індэксаванні.
Памылка 7: адзначэнне занадта большай колькасці чы занадто маленькай колькасці кандыдатаў для текущай стадіі
Для адміністрування проблемы №7, калі выкарыстоўваецца занадта больша колькасць стэйджаў, пярш чым зменіць код, неабходна задаць вхідныя даны, абавесця крока і крэтынія выходу. Аператары должны магчымае перзапускати крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць параду ад коду прыкладнення. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг. Паказваць трэба тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адказу. Без цых цітатаў аператары не можаць разлічыць галюцинацію ад працягу індэксавання.
Проблемы №8 і №9: працяг індэксавання та адміністрування моделей
Для стадыяў „Памылкі 8“ і „9“ неабходна пазначыць вхідныя даны, адпаведальнага за выкананне крока і крэтарыяі завершэння працы перад зменым коду. Аператары должны магчымае перзапускати крок з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Неабходна аддзеіставіць дакументацыю як для стандартнага, так і для альтернатывнага падходу. Практыкі перапрыбутку, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не етапамі далейшай доработкі. Калі наступны крок — це код або вызов інструмента, лепш выкарыстоўваць структураваныя выходныя даны з перакананнем схэмы, чым вольныя тэкстовыя апісанні.
Памылка 8: абсалютнае праігнораванне практыкы переранжавання
Для прыткі 8, калі прахватываецца этап переранкінгу, пярэд тым, як зменіць код, неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына нехарактэрнага результата павінна вказываць на аднойчыную адпаведальнасць, а не на заплутаную схему обробкі. Наводзіць цитаты з тых частак, якія фактычна лежаць у падставе адпаведнай адказы. Без цітатаў аператары не можуць розразліць галюцинацію ад прычыны, зв’язанай з недастаткам індэксацыі. Для прыткі 8, калі прахватываецца этап переранкінгу, пярэд тым, як зменіць код, неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісваць час выконання і вартасць токеноў або запытак праза функцыйнае результат. Візуабілізацыя вартасцей з самага пачатку запобегае неспакою, калі процес пераходзіць з дэмовай версіі на спяльную.
сераўнах.from FlagEmbedding import FlagReranker
reranker = FlagReranker("BAAI/bge-reranker-v2-m3", use_fp16=True)
def rerank(query: str, candidates: list[str], top_k: int = 5) -> list[str]:
pairs = [[query, c] for c in candidates]
scores = reranker.compute_score(pairs, normalize=True)
ranked = sorted(zip(candidates, scores), key=lambda x: x[1], reverse=True)
return [text for text, _ in ranked[:top_k]]
final_context = rerank(user_query, fused_candidates, top_k=5)
Памылка 9: выкорыстоўванне універсальнага модэля для вбудоввання дадзеных у спецыялізаванай сфере
Калі працуеце над Памылкай 9, спачатку запісаце правіла працы: неабяжныя вхідныя даны, сигнал успеху і тое, што відбываецца у разе частковай нявыполнення. Такі список контролю дапамагае заліцвачыць змяны ў кодзе пазнейша. Храніце настройкі праза код аплікацыі. Файлы сераўна, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можу пераглядаць без неабяжнага чытання всіх элементаў системы. Кэшавайце стабільныя інструкцыі системы і схемы інструментаў. Павторна адправка ідэнтычных дадзеных ёсць частым выклікам ресурсоў.
Памылка 10: прахід заўсёды праз ацэнку і запуск на адчутках
Калі працюеце над Адмылкай 10, калі прахоўваецца стадія ацэнкі, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список пераконтроўваець дапамагае залічыць змяны ў кодзе пазнейша. Документавайце як шлях успеху, так і шлях вяснавання. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў ёсць часткаю продукту, а не пазнейшым дапрацоўкам. Змяржывайце рэтард на фіксаваным наборы пытанняў прычым регулюванні запрошэнняў. Частае змена запрошэнняў рэдка калі вялікі эфект на слабую систему аднаходжэння інформацыі.
from deepeval import assert_test
from deepeval.metrics import FaithfulnessMetric, ContextualPrecisionMetric
from deepeval.test_case import LLMTestCase
def test_refund_policy_query():
test_case = LLMTestCase(
input="What is the refund window for the Pro plan?",
actual_output=rag_pipeline.run("What is the refund window for the Pro plan?"),
retrieval_context=rag_pipeline.last_retrieved_chunks,
expected_output="Pro plan purchases can be refunded within 14 days of purchase.",
)
faithfulness = FaithfulnessMetric(threshold=0.8)
precision = ContextualPrecisionMetric(threshold=0.7)
assert_test(test_case, [faithfulness, precision])
Практычныя застосоўванні
Калі працюеце над стадзіяй рэальных застосоўваń, спачатку запісайце «контракт»: неабходныя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну адпаведальнасць, а не на заплутаны ланцюг задач. Замерайце рэткі запам’ятавання на фіксованым наборе пытань прычым рэгулюванню запрошэнняў. Частае змены запрошэнняў рэдка калі-небудзь выправляе слабыя аспекты запам’ятавання. Калі працюеце над стадзіяй рэальных застосоўваń, спачатку запісайце «контракт»: неабходныя даны, сігнал успеху і тое, што выходзіць пад частым неудачам. Такі список контроля дапамагае заставіць пазнейшыя змены коду быць чыстымі. Запісвайце час выканання і кост токеноў або запытаў разам з функцыйнальнымі рэзултатамі. Відразувыя даны пра косты запобегаюць неспакойным рахункам, калі праця пераходзіць з дэмаверсіі ў спакульнаныя сераўысы.
Порэванаў: выбары архітектуры выкарыстоўвання дадзеных
Этап порэванаю выбараў архітектуры выкарыстоўвання дадзеных работае наякша, калі яго спрыймаюць як мерыябельную плошчу. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і прыметку па адкату перш чым расширваць масштаб. Зберагаўце настройкі праза код аплікацыі. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций павінны знаходзіцца ў адном месцы, куды аператары можаць адбавляць без неабяжнага чытання всіх дадзеных. Раздзеляйце правілы часткавання дадзеных ад правілаў ўзяць іх для выкарыстоўвання. Змена адных не павінна прымусваць перапісванне іншых, калі змянююцыся паказнікі якосці.
Кой варыянт вам следуе выбраць?
Варыянт «Калькольніка, які вароткі выбраць» працуе найэфектывней, калі яго рассматрываць як вимерную плошчу. Запісайце адны ідеальны прыклад, адну справу з бягамі і прыметку па адкатаванню перш чым расширваць масштабы. Дакументавайце як успішны, так і вярнучыся шляхы. Перапрыбуткі, людзкія контраліны і обработка некоректных паведамленняў ёсць часткай продукту, а не чымось, што дадаецца пазней. Раздзеліце політыку часткавання інфармацыі ад політыки яе выкарыстоўвання. Змена адной з іх не должна вымагаць перапісвання другой, калі зменяюцца паказнікі якосці.
Корысты і абмежэнні добра створанага каналу RAG
Прынцыпы і абмежэнні роботы на разных этапах найкраща аналізаваць як мерыябельную плошчу. Запісайце адны ідеальны прыклад роботы, адну справу з бягамі та прыметкі па вярнэнне да пачатковага стану пры расшырэнні масштаба. Валіце прывялёкі, якія легка тэставаць, замест вялікіх скрыптов. Калі якісь крок не выйшае, прычына бягу должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Раздзеляйце правілы часткавання інфармацыі ад правіл яе выкарыстоўвання. Змена адных не должна прымусваць перапісванне іншых, калі змянююцца паказнікі якосці. Прынцыпы і абмежэнні роботы на разных этапах найкраща аналізаваць як мерыябельную плошчу. Запісайце адны ідеальны прыклад роботы, адну справу з бягамі та прыметкі па вярнэнне да пачатковага стану пры расшырэнні масштаба. Запісвайце часы выканання та косты токенав або запытак праз адныя з рэзультатаў функцыональнасці. Відразувая візуабілізацыя костаў запобегае неспакойным рахункам, калі процес пераходзіць з дэмавайнага режыма ў спяльныя среды.
Спіс пераканаў для гатовасці да прыемкі
У стадії перагляду співпадання з правиламы прыемкі выявляюцься вхідныя даны, адпаведальныя за крок і критэрыі завершэння пры змяне коду. Аперацыйныя працавнікі должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба знаходзіць паза кодам прыемкі. Файлы сераўнавання, хранальнікі секрэтных данных і флагі функцый належыць у аднам месца, якое працавнікі можуць аудытаваць, не чытаючы весь ланцуг. Паказваюцься тыя часткі, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў працавнікі не можуць адразніць галюцинацыю ад прасоўкі ў індэксаванні.
Заключэнне
У стадії Заключэння неабяжна практычна вызначыць інпуты, адпавядаючага за крок адпаведальнага, а таксама крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымае перадзягаць крок з вядомай точкі контролю, не падозрываючы схованы стан. Неабяжна аддакульсаваць як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе перакрыцця і обробка некоректных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам. Указваць кантэксты, якія фактычна ляглі в основу адпаведзення. Без цых кантэкстаў аперацыйныя працавнікі не можуць разлічыць галюцинацію ад прасоўкі ў індэксаванні.
Корыстныя рэсурсы
У стадії «Корисныя ресурсы» неабяжна практычна ваказаць інпуты, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Указваць тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аперацыйныя працавнікі не можуць разлічыць галюцинацію ад працягу ў індэксаванні. У стадії «Корыстныя ресурсы» неабяжна практычна ваказаць інпуты, адпаведальнага за крок і крэтыры завершэння пры змяне коду. Аперацыйныя працавнікі павінны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць час выконання і кост токеноў або запытаў разам з функцыйнальнымі рэзултатамі. Відразувыя даны пра косты запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спакульнаваныя сераўы.
Чэкліст аператыўнай роботы
Калі працуеце над стадзіяй чэкліста аператыўнай роботы, спачатку запісуйце угоду: неабходныя даны, сігнал успеху і тое, што выходзіць на случай частковага абякання. Такі чэкліст дапамагае заставаць пазнейшыя змены коду чыстымі.
Спрыяйце цій стадзіі як угоды межаў між вхіднымі данымі і перакананымі выходамі. Даўце назвы артыфактам, задаць правіла пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння.
Замерайце рэкалі на фіксаваным наборы пытанняў прычынам тюнінгу запрошэнняў. Частае зміненне запрошэнняў рэдка калі лячыць слабую систему адзысквання інформаціі.
Заморозьце «золаты» набор даных прычынам змены запрошэнняў або модэляў. Змена як системы, так і критэрыяў маскіруець регрэсіі.
Дадзіце тэст на працясную працю, які перабірае критычны шлях у CI з фіксатарамі, а не з жывымі платнымі API, калі толькі дозволяе бюджет.
Запісвайце адно і шлях успеху, і шлях вярнення. Перапрыбуткі, людзкія контраліны і обработка некоректных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
Перш чым пераводзіць стак, заморозьце версіі, зафіксавайце ідеальны транскрыпт для критычнага шляху і паказвайце крокі для атрыбутавання назад. У спяльных средах патрэбны ліміты частоты запытоў, перакананні ў правах на выкарыстоўванне ресурсоў і чысткі власнік для змены секрэтных даных. Валіце надзейнасць, якая не выклікае сумневаў, прыгожэй чым хітрыя разовыя дамастанты.
Прымітка для пакету f9fa4aa0641e: не кладзіце ключы прадаўцоў у репазітарый, задаце верхнюю межу токеноў на кожную сесію і зберагайце транскрыпты празаўсёды разам з фіксатрамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся пораўнанымі.
Этап 0 пры падготовцы да захісту працюе найкраща, калі яго спрыяваць як меравальную паверхню. Зберажыце адна «золатая» транскрыпція, адзін прыклад неудачы і запіс пра вярненне да пачатковага стану перш чым расширваць масштабы. Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія контралі і обработка некоректных паведамленняў є часткай продукту, а не чымсь, што дадаецца пазней.
Дакладна інформацыя пры падготовцы да захісту 0/908: змерьце час выканання, класію памылак і колькасць выкорыстоўваных ресурсаў для гэтага запісу, а пасля, на аднойчынных крэтарыях, абмовіцеся, чы хацеце застаўіць змяну, а не на аднойчынных прыкладах.
Для этапу 1 пры падготовцы да захісту абмовіцеся вхідныя даны, адпаведальнага за крок і крэтарыі завершэння перш чым зменяць код. Аперацыйныя працавнікі должны магчымае перадзеяць крок з вядомай точкі контролю, не спадзяваючыся на скрыты стан. Спрыявайце гэтаму этапу як на даговор між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Дайце назвы артыфактам, абмовіцеся крэтарыямі успеху і адмовіцеся ад тыхняе частковага завершэння без паведамлення.
Дзеянне паўжасткі 1/908: звярніце увагу на час выканання, класы памылак і колькасць викорыстоўваных токенаў для гэтага зазначэння, а пасля, на аднойчынай сутнасці пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацеце застаўіць змяну.
Працюючы над 2-й стадзіяю паўжасткі, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выканаецца у разе частковай памылки. Такі список дапамагае заставіць пасляэтапныя змяны ў кодзе чыстымі. Зберагайце настройкі парадульна ад коду прыемлівача. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыяй должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць аудыт без неабходнасці чытання всей структуры.
Дзеянне паўжасткі 2/908: звярніце увагу на час выканання, класы памылак і колькасць викорыстоўваных токенаў для гэтага зазначэння, а пасля, на аднойчынай сутнасці пытанняў, а не на індывідуальных прыкладах, выявіце, чы хацеце застаўіць змяну.
Этап 3 прыцелкі змяцнення работае наяўна, калі яго спрыяваць як вимерную паверхню. Запісаўце адна «золатая» транскрыпцыя, адин прыклад неудачы і запіс пра вярнэнне да пачатковага стану перш чым расширваць масштабы. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісьць крок не выйшла, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцюг задач.
Дакладнасць прыцелкі змяцнення 3/908: вимеравайце час выканання, класію памылак і колькасць выкорыстоўваных токенав для гэтай прыцелкі, а пасля рашайце, чы хацеце застаўіць змяну, стварыўшы фіксаваны набор пытанняў, а не спакойнае аналізаванне.
Для 4-го этапа прыткага зміцнення неабяжна практычна визначэнне інпутаў, адпаведальнага за шаг і крэтарыяў завершэння пры зміне коду. Аперацыйныя працавнікі павінны магчымае перзапускаць шаг з вядомай точкі контролю, не падозрываючы прыхованы стан. Запісваць трываласць выконання і кост токенаў або запытаў праза функцыйнае рэзультат. Відкрытыя даныя пра косцы запобегаюць неспакойным рахункам, калі процес пераходзіць з дэмавай версіі ў спяльныя среды.
Дзеянне прыткага зміцнення 4/908: вымерыць час выконання, класію памылак і витрату токенаў для гэтага пункту, а потым вырашыць, чы робіцца змяна на адной пазнаковай базе, а не на аснове індывідуальных спазыроў.
Калі працюеце над 5-м падземам прыемкі забезпечэння безпекі, спачатку запісайце умовы кантракту: неабяжлівыя даны, сигнал успеху і тое, што выканаецца у разе частковага нявыпалення. Такі список пераканаецца пазнейшыя змены коду быць чыстымі.
Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам.
Дзеянні прыемкі забезпечэння безпекі 5/908: вымерайце час выканання, класыя ошибакі і витрату токенав для гэтай прыемкі, а пасля выберайце, чы робіць змены на аднойчы заданай базе пытанняў, а не на аднойчых прыкладах.