Практычныя прытамулкі: Падбор карыстацьбы RAG — Частка 2: HyDE (гіпотэтычны дакумент)
Практычныя прыказкі: як паспрацаваць з RAG для падышу ў яго працэздатнасці — Частка 2: HyDE (гіпотэтычныя дакументы, перагледы та слоты для коду, якія можна выкарыстоўваць командам, якія викорыстоўваюць гэты патэрн).
У гэтым керавану практычным крокам перакладзена вялікадорожная сцэнараўка ад сыр'ёў да рабочай системы для: падборчага павышэння карыстнасці 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анневымі.