Галоўная / Артыкулы / Ontалогія-свядомы GraphRAG: Калі вектары патрабуюць аб’ядрованых стосункоў

Ontалогія-свядомы GraphRAG: Калі вектары патрабуюць аб’ядрованых стосункоў

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

2819 слоў

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

Частка 1 — Как саме працуе RAG

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

question: "path traversal apache httpd"

вектарныя та лексыкальныя рангі можу не збігатыся:

VECTOR (cosine)                       LEXICAL (keyword overlap)
1. CVE-2021-41773  0.746  ← correct   1. CVE-2021-28544  6.60
2. CVE-2021-23797  0.735              2. CVE-2021-40525  6.47
3. CVE-2021-32643  0.728              5. CVE-2021-41773  5.57  ← correct, buried

Калі правильны CVE ўсё-такі є, але не ёст тэндэнцыйна домінуючы, система стварае адпаведзі на аснове своіх прыкладоў. Домены, дзе пераважаюць ідэнтыфікаторы (CVE, SKU, ідэны фартакаў), быстра выявляюць гэтыя проблемы.

Частка 2 — Бар’еры, з якімі сталкаецца RAG

Недастатак 1 — точныя ідэнтыфікаторы

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

[S1] "Rejected reason: This vulnerability does not meet the criteria for a
      security vulnerability…"

Потым генераванне адтворае некаторага «неправильнага суседа».

Няўдача 2 — цэліснасьць адносаў

Для запытання «Калія продукты падвергліся вплыву?» патрэбны рэшткі зьвязаў, а не толькі найбліжэйшы параграф. Аналіз садоўніцтва вяртае супарадныя CVE-коды; ён не пераглядае лінкі типу AFFECTS.

Няўдача 3 — факты, якія ніхто не запісаў

Дзеякія адказы існуюць толькі як перасеканні межаў аб’ектаў — ніколі як самастоятельныя рэчыпы. Жадны фрагмент не мае ў сабе такога зьвязу; толькі граф можа яго прадстаўіць.

Частка 3 — Чаго дадае граф зьнанняў

Узоркаваныя вузлы і рэшткі прыводзяць ідэнтыфікаторы і адносы да першага класу:

(:Vulnerability {cve_id: 'CVE-2021-41773', cvss_base_score: 9.8, cvss_severity: 'CRITICAL'})
   -[:AFFECTS {version: '2.4.49'}]-> (:Product {key: 'apache:http_server'})
   -[:HAS_WEAKNESS]->                (:Weakness {cwe_id: 'CWE-22'})

Перамеражванне прадстаўляе адказы на запытанні пра адносы; вектары як і раней дапамагаюць, калі тэкст ёсьць правым доказам.

Онтологія проты графа зьнанняў — аперацыйная разліка

Антологія — это угода: які типы сущностей, які типы рёбер, якія власцівасці ўскладнены. Граф знаёмых — это заполнены экзампляр па гэтай угодзе. Без антологіі выкарыстоўванне дадзеных стае нестабільным, а з’еднання стаюць ненадзеянымі. З антологіяю пайплайны пераканальваюць і адхроняюць некаліткі трыплы прычыму яны не заражаюць процэс выкарыстоўвання дадзеных.

Тры значэнні паўтары “GraphRAG”

  1. Граф як індэкс — зберагаюцься фрагменты, але выкарыстоўваецца граф для пошуку.
  2. Граф як памяць — сущності/рёбра ўжо ёсць галоўным сховішчам; текст ёсць доказам.
  3. Граф як планавальнік — агент плануе крокі, а потым запрашае текст.

Дзялёныя з антологіяю дизайны часта спалучаюць (2) і (1): структураваныя факты для тачнасці, асляплены текст для цитавання.

Частка 4 — Архітэктура, шар за шарам

Процес абсарбавання выдлічае энтыты/зв’язкі ў межах онталогіі, запісвае факты графа, зберагае фрагменты выхіднага тэксту і ўсё ж стварае векторны/лексычны індэкс на основе тэксту. Час запита викорыстоўвае ідэнтыфікаторы як анкеры, розширвае суседства ў графе, адбываецца ўсуненне дублікатавання/лексычны пошук, з’еднанне рангаў, і ствараецца запрошэнне з окремымі раздзеламі ФАКТЫ і ДАВЕДЧНЫЕ МАТЕРІЯЛЫ плюс правілы цитавання.

Тры рашэнні, якія змусілі даны

  1. Ідэнтыфікаторы-анкеры кращыя за нечыстае падабранне, калі є токен CVE/продукту.
  2. Зважана інтеграцыя павінна падняць рангі ў графе для запитаў на ідэнтыфікаторы, не заглушаючы прозаўскі тэкст у запитах на наратыв.
  3. Пераканальнія перагледы павінны адхіляць адпаведзі, якіе цітуюць відсутнія тэгі або суперчаць власнасцям графа.

Частка 5 — Адна запитанне, ад початку да канца

Запитанне:

Q: "which products are affected by CVE-2021-41773"

Рас’яснення анкераў:

ANCHOR  Vulnerability  CVE-2021-41773  method=identifier  conf=1.00

Вагі злучэння, калі ідэнтыфікатор выступае як анкару:

weights = {graph: 2.0, vector: 1.0}     # identifier match
# a lexical product match would be 1.2; no anchor at all, 0.0

Конкуруючыя спісы:

VECTOR  1. CVE-2021-21022 (Magento IDOR)   2. CVE-2021-27385  …
GRAPH   1. CVE-2021-41773 (anchor)         2. CVE-2021-25216 (shares netapp:cloud_backup)

Рэкіпрокныя балы злучэння рангаў:

CVE-2021-41773   2.0/(60+1) = 0.03279   ← graph, rank 1
CVE-2021-21022   1.0/(60+1) = 0.01639   ← vector, rank 1

Факты графа, запакаваныя для модэлі:

FACTS (from the knowledge graph):
[G1] CVE-2021-41773 | CRITICAL 9.8 (CVSS 3.1) | CWE: CWE-22
     affects: apache:http_server 2.4.49, fedoraproject:fedora 34,
              fedoraproject:fedora 35, netapp:cloud_backup,
              oracle:instantis_enterprisetrack 17.1 / 17.2 / 17.3
     source: https://nvd.nist.gov/vuln/detail/CVE-2021-41773

Джерела доказаў:

EVIDENCE (source text):
[S1] "A flaw was found in a change made to path normalization in Apache
      HTTP Server 2.4.49. An attacker could use a path traversal attack…"

Структураваны адказ з цітатамі:

{"answer": "CVE-2021-41773 is CRITICAL with a CVSS base score of 9.8 [G1].
            It affects apache:http_server 2.4.49, fedoraproject:fedora 34,
            fedoraproject:fedora 35 [G1].",
 "sources": ["G1"],
 "entities": [{"label": "Vulnerability", "key": "CVE-2021-41773"}],
 "confidence": "high"}

Вороты пасля генеравання:

✓ every cited tag exists in the context
✓ the answer cites something at all
✓ every CVE id in the answer appears in the context
✓ entity labels are real ontology classes
✓ numbers that look like CVSS scores match the graph facts
→ ACCEPTED

Паслаблы адказ, які не праходзіць перакрытчыкі:

{"answer": "CVE-2021-41773 scores 4.3 and affects nginx [G1]."}

Працыны адхоўкі:

✗ states 4.3 but the graph facts say [9.8]
✗ entity Product nginx:nginx is not in the context
→ REJECTED → one repair attempt → still bad → REFUSAL

Тая ж сама тэхніка, але на адны крок даўжэй

З’еднанне інвентара ператварае “паражаныя продукты” на “паражаныя прыкладнікі першага рангу і адпаведныя каманды”:

application        criticality  team            library  pinned    match_precision
checkout-web       tier1        payments        httpd    2.4.49    version-exact
log-aggregator     tier2        infrastructure  httpd    2.4.49    version-exact
api-gateway        tier1        platform-core   httpd    1.15.17   product-level

Тая ж сама анкара і тэхніка злучэння; ўсьмо ж адны дапаможны крок через піні прыкладнікаў.

Частка 6 — Рэзультаты, косты і багі

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

Багі, таму што яны ўсё-такі ёсць справжнім контэнтом

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

Частка 7 — Калі будуваць гэта, а калі не трэба

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

Пяць інваріантных прынцыпаў, якія важна даглядаць у будзь-ям масштабе

  1. Антологія перш — тыпы раней, чым тройкі.
  2. Анкеры для ідэнтыфікатораў — точнае падпаданне раней, чым косайнус.
  3. Раздзеліце факты і доказы у запытанні.
  4. Цітацыя або адхіленне пасля генеравання.
  5. Мэжураванне на запытаннях, якія ў вас є — не толькі на блогах з публічнымі статыстыкамі успеху.

Этыя інварыянтныя элементы застаюцца корыстнымі як у дэмантах на ноутбуках, так і ў системах абаранення для калькуляцыі рызыкаў для разных корыстнікаў. Расшырэнне дапаможнасці должна значыць расшырэнне онтологіі та вялікага калекцыі дадзеных, а не проста дадагучча ўсё большых кількасцяў інструкцый да неструктураваных дадзеных. Следаваць трэба пісаць паметры экстракцыі (точнасць/працэсаванасць аб’ектаў та звязкаў) разам з паметрамі адпаведных адказаў; інакш “лепшы” модэль можа таямна ствараць фальшывыя звязкі, якія выглядаюць правдаподобна, але паспяшаюць невыкарыстанне рэзультатаў аудыта. Онтологію трэба версіяваць як API: дадагуччы змены ўжо є простыя, перэназначэння вымагае спецыяльных процедураў міграцыі, а выдаленне — стварэння спецыяльных записаў, каб старыя копіі не воскресілі выдаленыя звязкі. Для кантролю трэба ставіць апавешчэння пра раст падазроўных адмоваў та пра высокія паказнікі бягучых адказоў экстрактара, а не толькі пра затрымкі роботы Gateway — такія сігналы дапамагаюць выкрываць проблемы ў системе знанняў раней, чым корыстнікі пазнаюць некоректную ступень рызыка CVE. Нарэшце, у першыя месцы трэба выдзеліць бюджет на людскую пераглядку спорных CVE-ідентыфікатораў та супарабоцтва продуктаїв; такія меткі станавяцца важлівымі для пазнейшага аналізу.

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

Пры ацэнкі прадавцаў чы ўсталяванняў запытайце, як яны кодуюць абмежэння онтологіі, як яны спаўнаюць рангі графа і вектара, а таксама як яны тэстуюць адраднасць цітатаў. Дэманстрацыі, якія паказваюць толькі прыемны інтэрфейс графа без этых трох пасляўдзей, зазвычай ствараюць тую ж самую проблему RAG пад новым назвам. Валіце банальныя, напісаныя пайплайны з явнымі анкерамі працоўнае “агентское графавае разумованне”, якое не можа паказаць, якая грань падтрымала тверджэнне пра сер’ёзнасць. Саме такі банальны падход зрабляе GraphRAG, які ведае про онтологію, прыдатным для выкарыстоўвання.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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