Практычныя прытамулі: Граф RAG у практыцы: чаму стандартны RAG не справляецца з складзімымі запитамі
Практычныя прытамулкі: Граф RAG у дзеянні: чаму стандартны RAG не справляецца з складзімы міжзапитамі: контракты, перакананні та слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Існуець версія, прызначаная для аператараў, якая перакладае ідеі з кнігі “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анымі.