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

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

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

3445 слоў

Існавайце гэты документ як перапрацоўаную версію ідэй з артыкула “Я выдаліў свой база дадзеных вектораў, і мая система RAG стала кращай” для аператараў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы задання. Этап агульнага аналізу работае найкраща, калі яго розглядаць як мерыябельную паверхню. Запісайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму расшырэння масштаба. Дакументавайце як успішны, так і няуспешны шляхы ведчыбы. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў ёсць частью продукту, а не пасляднім дапрацоўкам.

Што такое RAG і чаму гэта важна для вас?

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

Вочывая першая ідея (і чаму яна не выконваецца)

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

from openai import OpenAI
import PyPDF2

client = OpenAI(api_key="your-api-key")

# Extract all text from a PDF
def extract_pdf_text(pdf_path):
    reader = PyPDF2.PdfReader(pdf_path)
    full_text = ""
    for page in reader.pages:
        full_text += page.extract_text() + "\n"
    return full_text

document_text = extract_pdf_text("annual_report.pdf")
user_question = "What was the total revenue in 2024?"

response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[
        {"role": "system", "content": "Answer based on the provided document."},
        {"role": "user", "content": f"Document:\n{document_text}\n\nQuestion: {user_question}"}
    ]
)

print(response.choices[0].message.content)

Традыцыйны вектарны RAG: ныякі стандарт промышленасці

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

/p>
from openai import OpenAI
import chromadb
import PyPDF2

client = OpenAI(api_key="your-api-key")

# Step 1: Extract and chunk the document
def extract_and_chunk(pdf_path, chunk_size=500):
    reader = PyPDF2.PdfReader(pdf_path)
    full_text = ""
    for page in reader.pages:
        full_text += page.extract_text() + "\n"

    words = full_text.split()
    chunks = []
    for i in range(0, len(words), chunk_size):
        chunk = " ".join(words[i:i + chunk_size])
        chunks.append(chunk)
    return chunks

chunks = extract_and_chunk("annual_report.pdf")

# Step 2 and 3: Embed and store in ChromaDB
chroma_client = chromadb.Client()
collection = chroma_client.create_collection("my_documents")

collection.add(
    documents=chunks,
    ids=[f"chunk_{i}" for i in range(len(chunks))]
)

# Step 4: Search for relevant chunks
user_question = "What was the total revenue in 2024?"

results = collection.query(
    query_texts=[user_question],
    n_results=5
)

relevant_chunks = "\n\n".join(results["documents"][0])

# Step 5: Generate answer with focused context
response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[
        {"role": "system", "content": "Answer based only on the provided context."},
        {"role": "user", "content": f"Context:\n{relevant_chunks}\n\nQuestion: {user_question}"}
    ]
)

print(response.choices[0].message.content)

Дзе выключаецца Vector RAG

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

Проблема 1: Разбіўка на часткі разрушае контэкст

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

paragraph = """The company's Q3 operating income was $4.2 billion,
representing a 12% increase over the prior year period. This growth
was primarily driven by the expansion of cloud services, which
contributed $2.8 billion in recurring revenue as detailed in the
segment breakdown in Appendix C."""

# Simulating a chunk boundary at word 20
words = paragraph.split()
chunk_1 = " ".join(words[:20])
chunk_2 = " ".join(words[20:])

print("Chunk 1:", chunk_1)
print("---")
print("Chunk 2:", chunk_2)

Заданне 2: Крос-саўвязі губяцца

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

# Simulating a cross-reference failure
documents = {
    "page_12": "The company's debt-to-equity ratio improved significantly in 2024. For a full breakdown of long-term obligations, see Appendix G on page 87.",
    "page_45": "Marketing expenses increased by 15% due to new campaigns.",
    "page_87": "Appendix G: Long-term debt stands at $12.4B. Senior notes: $8.1B. Credit facility: $4.3B. Maturity schedule: 2026-2034."
}

# Vector RAG would likely return page_12 for a debt question
# but miss page_87 where the actual numbers live
# because "debt-to-equity ratio" is more similar to the query
# than "Senior notes" and "Credit facility"

Проблема 3: Фразаванне корыстніка мае занадта вялікое значэнне

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

Введзенне Vectorless RAG: Навучэнне ШІ чытаць як чалавек

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

Шаг 1: Стварыце іерархічны дрэўяны індекс

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

Root: Annual Report 2024
  |-- Executive Summary (pages 1-3)
  |     Summary: "Overview of company performance, key metrics..."
  |-- Financial Statements (pages 15-45)
  |     |-- Income Statement (pages 15-20)
  |     |-- Balance Sheet (pages 21-30)
  |     +-- Cash Flow Statement (pages 31-45)
  |-- Risk Factors (pages 46-60)
  +-- Appendices (pages 80-120)
        |-- Appendix A: Segment Data (pages 80-95)
        +-- Appendix G: Detailed Tables (pages 96-120)

Шаг 2: Пошук у дрэве на адной засадзе логічных выводам

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

import json
from openai import OpenAI
import PyPDF2

client = OpenAI(api_key="your-api-key")

# Extract text page by page
def extract_pages(pdf_path):
    reader = PyPDF2.PdfReader(pdf_path)
    pages = {}
    for i, page in enumerate(reader.pages):
        pages[i + 1] = page.extract_text()
    return pages

pages = extract_pages("annual_report.pdf")
all_text = "\n".join([f"--- Page {k} ---\n{v}" for k, v in pages.items()])

# Step 1: Build the tree index using AI reasoning
tree_prompt = f"""You are a document analyst. Read this document and create
a hierarchical table of contents as a JSON tree. Each node should have:
- "title": section name
- "summary": 2-3 sentence description of what this section covers
- "pages": [start_page, end_page]
- "children": array of child nodes (or empty array)

Document:
{all_text[:80000]}

Return ONLY valid JSON. No other text."""

tree_response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[{"role": "user", "content": tree_prompt}],
    response_format={"type": "json_object"}
)

document_tree = json.loads(tree_response.choices[0].message.content)
print("Document tree built successfully!")
print(json.dumps(document_tree, indent=2)[:500])

# Step 2: Reasoning-based search over the tree
user_question = "What was the year-over-year change in operating margin?"

search_prompt = f"""You are a retrieval expert. Given a user question and
a document's table of contents tree, identify which sections are most
likely to contain the answer.

Think step by step:
1. What kind of information does the question ask for?
2. Which sections would a human expert check first?
3. Are there sections that might cross-reference each other?

Document tree:
{json.dumps(document_tree, indent=2)}

Question: {user_question}

Return JSON with:
- "reasoning": your step-by-step thought process
- "relevant_pages": list of page numbers to retrieve"""

search_response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[{"role": "user", "content": search_prompt}],
    response_format={"type": "json_object"}
)

search_result = json.loads(search_response.choices[0].message.content)
print("Reasoning:", search_result["reasoning"])

# Step 3: Fetch only relevant pages and generate answer
relevant_text = ""
for page_num in search_result["relevant_pages"]:
    if page_num in pages:
        relevant_text += f"\n--- Page {page_num} ---\n{pages[page_num]}"

answer_response = client.chat.completions.create(
    model="gpt-4.1",
    messages=[
        {"role": "system", "content": "Answer precisely based on the document context provided."},
        {"role": "user", "content": f"Context:{relevant_text}\n\nQuestion: {user_question}"}
    ]
)

print("\nAnswer:", answer_response.choices[0].message.content)

Падготовка да прыменення з PageIndex SDK

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

from pageindex import PageIndexClient
import time

# Initialize the client
pi_client = PageIndexClient(api_key="your-pageindex-api-key")

# Upload and process your document
result = pi_client.submit_document("./annual_report.pdf")
doc_id = result["doc_id"]

# Wait for processing to complete
while True:
    status = pi_client.get_document(doc_id)["status"]
    if status == "completed":
        print("Document processed!")
        break
    time.sleep(5)

# Inspect the generated tree structure
tree_result = pi_client.get_tree(doc_id)
if tree_result.get("status") == "completed":
    tree = tree_result["result"]
    for node in tree:
        print(f"[{node['node_id']}] {node['title']} - Page {node['page_index']}")

# Ask questions using the Chat API
response = pi_client.chat_completions(
    messages=[{"role": "user", "content": "What was total revenue in FY2024 vs FY2023?"}],
    doc_id=doc_id
)

print(response["choices"][0]["message"]["content"])
{
  "title": "Financial Stability",
  "node_id": "0006",
  "page_index": 21,
  "text": "The Federal Reserve maintains financial stability...",
  "nodes": [
    {
      "title": "Monitoring Financial Vulnerabilities",
      "node_id": "0007",
      "page_index": 22,
      "text": "The Federal Reserve's monitoring focuses on..."
    },
    {
      "title": "Domestic and International Cooperation",
      "node_id": "0008",
      "page_index": 28,
      "text": "In 2023, the Federal Reserve collaborated..."
    }
  ]
}
response = pi_client.chat_completions(
    messages=[{"role": "user", "content": "Compare the results across these two reports."}],
    doc_id=["pi-abc123def456", "pi-abc123ghi789"]
)

Цыфры расказваюць історію

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

Калі выкорыстоўваць той чы іншы падход

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

А што далей?

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

Падсумак:

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

Чэрніц кантролю эксплуатацыі

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

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

Перад налаштаваннем запрошэнняў замерайце рэкалі на фіксаваным наборы пытанняў. Частае змена запрошэнняў рэдка калі вялікі эфект на слабую систему пошуку.

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

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

Перад налаштаваннем запрошэнняў замерайце рэкалі на фіксаваным наборы пытанняў. Частае змена запрошэнняў рэдка калі вялікі эфект на слабую систему пошуку.

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

Прыметка для 61253a21aab9: не кладзіце ключы прадаўцаў у репазітарый, задаце верхнюю межу токенав на сесію і зберагачыце транскрыпты празаўседы ў фіксатыях для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннімы.

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

Дзеянне паўжчання 0/802: звярніце увагу на час выканання, клас памылкі і колькасць выкарыстоўваных токенаў для гэтага зьязначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазырэннях, выявіце, чы хацяце застаўіць змены.

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

Дзеянне паўжчання 1/802: звярніце увагу на час выканання, клас памылкі і колькасць выкарыстоўваных токенаў для гэтага зьязначэння, а пасля, на аднойчыне з фіксаваным наборам пытанняў, а не на асобістых спазырэннях, выявіце, чы хацяце застаўіць змены.

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

Дзеянні прыцелення на зміцнэнне 2/802: вымерыце час выканання, класію памылак і витрату токенав для гэтага пункту, а потым вынікніце, чы робіць змяну на аднойчы вядомай сэткі пытанняў, а не на аднойчы інтуїцыі.

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

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

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

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

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

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