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

Практычныя нататкі: паляпшаем RAG, частка 2 — HyDE (гіпатэтычныя дакументы)

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

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

Крыніцы: Improve RAG Performance — Part 2: HyDE (Hypothetical Document Embeddings)

У гэтым керавану практычным крокам перакладзена вялікадорожная сцэнараўка ад сыр'ёў да рабочай сістэмы для: падборчага павышэння карыстнасці RAG — Частка 2: HyDE (гіпотэтычныя вбудованні дакументаў). Акцэнт ставіцца на практычныя крокі, чыстае перакананне і код, які можна проста дадаць у рэпазітарый без неабясненых спадзяванняў. У этапы агульнага перакладзення неабходна праказаць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння прычымоўкі перад зменай коду. Аператары должны магчымае перадзванаць крок з вядомай точкі контролю без неабясненняя скрытых станоў. Спрэчвайце гэту стадыю як кантракт межа вхіднымі данымі і падтвердзенымі выходнымі рэзультатамі. Дайце назвы артыфактам, праказаць крытэрыя успеху і не прымайце беззвучна часткова завершаныя рэзультаты.

Ідэя

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

QUERY (every request):
  user question ──▶ LLM "write a passage that answers this" ──▶ hypothetical passage
                                                                       │
                                                                    embed
                                                                       │
                                                     search against REAL document vectors

Настройка

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

Код, у тых частках, якія маюць значэнне

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

def generate_hypothetical_document(llm, query):
    prompt = (
        "Write one short paragraph, in the style of a cloud-storage product's "
        "help-center article, that plausibly answers the question below. Write "
        "it as a confident, factual help-doc passage — plain prose, no "
        "preamble, no disclaimers, no 'I don't know'. Invent specifics "
        "(numbers, plan names, steps) if needed to sound like a real article; "
        "they do not need to be correct.\n\n"
        f"Question: {query}\n\nPassage:"
    )
    resp = llm.chat.completions.create(
        model=LLM_MODEL, messages=[{"role": "user", "content": prompt}], temperature=0.7,
    )
    return (resp.choices[0].message.content or "").strip()
naive_vec = embed(llm, [query.text])[0]
naive_hits = search_docs(client, coll, naive_vec, TOP_K)
hyp_doc = generate_hypothetical_document(llm, query.text)
hyde_vec = embed(llm, [hyp_doc])[0]
hyde_hits = search_docs(client, coll, hyde_vec, TOP_K)

Рэзультаты (з рэальнага запуску)

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

„Равныя“ умовы, якія на самай працэ ня ўсё такі равныя

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

Дзе гэта актываўна заводзіць у проблемы

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

Чыстая частка

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

Калі яго выкарыстоўваць — і калі ня

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

Прабуйце самі

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

Продажа ў 3-й частыне

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

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

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

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

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

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

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

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

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