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

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

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

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

Крыніцы: Ontology-Aware GraphRAG

Тэнзыўныя методы адналёгчэння задацоў добра адпавядают на багато запытаў, працуячы ў стандартны спосаб: з выкарыстоўванням точных ідэнтыфікатораў, адносаў между рознымі элементамі і фактов, якія існуюць толькі ў форме графа. 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, які будзе апдэйтаваць гэтыя фікстуры, каб рэгрэсіі не маглі захавацца ў традыцыйных знаёмствах.