Галоўная / Артыкулы

Практычныя нататкі: Graph RAG у дзеянні — чаму звычайны RAG не спраўляецца са складанымі запытамі

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

Выдавец: REACTAPP.TOP13 хв чытання3051 слоў

Крыніцы: Graph RAG in Action: Why Standard RAG Fails at Complex Queries (And How Graph RAG Fixes It)

Існуець версія, прызначаная для аператараў, якая перакладае ідэі з кнігі “Graph RAG in Action: Why Standard RAG Fails at Complex Queries (And How Graph RAG Fixes It)”: чыткія этапы, аранжаваныя блакіты коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы. Этап Апглэйда работае найкрашча, калі яго розглядзаць як мерыябельную паверхню. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму расшырэння масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач.

Аслівныя проблемы: ад’ёжаныя фрагменты

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

Што Graph RAG рабіць інакшэ

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

Feature            | Vector RAG          | Graph RAG
-------------------|---------------------|-------------------------
Storage unit       | Text chunks         | Entities + relationships
Retrieval method   | Semantic similarity | Graph traversal
Best for           | Direct lookup       | Multi-hop reasoning
Context scope      | Local fragment      | Connected network

Узгалоджваючы фактор экстракціі

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

Цэп адрабаткі.

Як працюе цэп Graph RAG

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

flowchart LR
    Q[User query] --> E[Entity extraction]
    E --> G[Graph construction]
    G --> T[Traversal + path ranking]
    T --> C[Path context]
    C --> L[LLM answer generation]
    L --> R[Final response]

План рэалізацыі (POC)

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

1. Выявленне структураваных фактов

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

import networkx as nx

SAMPLE_TRIPLES = [
    ("John Doe", "is CEO of", "Acme Corp"),
    ("Jane Smith", "sits on board of", "Acme Corp"),
    ("Jane Smith", "mentors", "John Doe"),
]

def build_graph(triples):
    graph = nx.DiGraph()
    for source, relation, target in triples:
        graph.add_node(source)
        graph.add_node(target)
        graph.add_edge(source, target, relation=relation)
    return graph

2. Пошук кандыдатскіх шляхоў

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

def traverse_graph(graph, seeds, depth=2):
    paths = []
    seen = set()
    undirected = graph.to_undirected()

    for seed in seeds:
        for target in graph.nodes:
            if seed == target:
                continue
            for path in nx.all_simple_paths(undirected, source=seed, target=target, cutoff=depth):
                canonical = tuple(path) if tuple(path) <= tuple(reversed(path)) else tuple(reversed(path))
                if canonical in seen:
                    continue
                seen.add(canonical)
                paths.append(path)
    return paths

3. Оцэнка шляхоў

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

def score_path(graph, path, query):
    query_tokens = set(tokenize(query))
    path_nodes = [node.lower() for node in path]
    path_rels = []

    for i in range(len(path) - 1):
        rel, _ = get_edge_relation(graph, path[i], path[i + 1])
        path_rels.append(rel.lower())

    path_text = " ".join(path_nodes + path_rels)

    overlap_score = len(query_tokens.intersection(set(tokenize(path_text)))) * 10
    node_score = sum(1 for node in path_nodes if any(token in node for token in query_tokens)) * 5
    rel_score = sum(1 for rel in path_rels if any(token in rel for token in query_tokens)) * 8

    length_penalty = max(0, len(path) - 2) * 2
    connection_bonus = sum(len(node.split()) for node in path_nodes)

    return overlap_score + node_score + rel_score + connection_bonus - length_penalty

4. Перакануць найкрашчы шлях у кантэкст

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

def path_to_text(graph, path):
    lines = []
    for i in range(len(path) - 1):
        source = path[i]
        target = path[i + 1]
        relation, reversed_edge = get_edge_relation(graph, source, target)
        if reversed_edge:
            lines.append(f"{target} {relation} {source}.")
        else:
            lines.append(f"{source} {relation} {target}.")
    return " ".join(lines)

5. Задайце запіт LLM па выбраным шляху

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

def generate_llm_answer(query, context):
    prompt = (
        "You are a helpful assistant. Use only the graph facts below to answer the query clearly. "
        "Do not introduce any new information. "
        f"If the answer is not directly supported by these facts, say you don't know.\n\n"
        f"Question: {query}\n\n"
        "Graph facts:\n"
        f"{context}\n\n"
        "Answer with a short explanation of the supporting facts:"
    )

    response = client.responses.create(
        model=config["deployment_name"],
        input=prompt,
        max_output_tokens=250,
        temperature=0.1,
    )
    return response.output_text.strip()

6. Адкрыць яго як API для дэманстрацыі

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

@app.post("/query")
def query_graph_rag(request: QueryRequest):
    query = request.query.strip()
    graph = build_graph(SAMPLE_TRIPLES)
    answer, path, context, ranked_paths = answer_query(query, graph)
    return {
        "query": query,
        "answer": answer,
        "reasoning_path": context,
        "path_nodes": path,
        "ranked_paths": ranked_paths,
    }

Пераход з протатыпу да продакшну: масштабаванне

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

цэ хутчэй, чым заплутаная лінія падачы.

1. Автаматызаваныя працэсы выкарыстоўвання (Справжнія бутлнэкі)

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

2. Пастойчыя сховішча графаў падпрыемства

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

3. Оптымізаванае аднаходжання дадзеных і карыстоўванне часам адпаведзення

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

4. Апэляцыя ў працэўнасць і безпека

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

Архітэктура падсумку

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

Дызайн сістэмы POC за мгновеннае перагляданне

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

Рэзультаты

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

Калі выкарыстоўваць vector RAG проты Graph RAG

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

Чаму гэта важна

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

Рэсурсы

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

Какі у вас ўзгляд?

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

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

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

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

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

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

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

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

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

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