Практычныя прытамулкі: Я выучыў RAG, стварыўшы систему запытанняў і адпаведзей
Практычныя прыказкі: Я выучыў RAG, стварыўшы систему запытанняў і адпаведзей: контракты, перакрыцчы і слоты для коду для команд, якія викорыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўку ідэй з кнігі «Я навучылася RAG, стварыўшы систему запытанняў і адпаведзей» для працовнікаў: чыстыя этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы. Этап Аналізу работае найкраща, калі яго спрыяглядаць як вимерную плошчу. Запісайце адна ідеальная транскрыпцыю, адзін прыклад неудачы і прыметку з вярненням да пачатковага стану прычаму расшырэння масштаба. Запісвайце часы виконання і кост токенав або запытанняў праза функцыйнае рэзультат. Відразлівае паказанне костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмаверсіі ў спяльныя среды.
Короткая прыметка пра RAG
Короткая прыткая памятка: перш чым зменіць код, неабходна ясная ваказка пра вхідныя даны, адміністратара крока і критэрыя завершэння. Аператары должны магчымаць перезапуск крока з вядомай точкі контролю, не падозрюючы пра схованы стан. Конфігурацыю трэба залічваць пазначкай ад коду прыемніка. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаючы весь ланцуг задач. Неабходна паказваць тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не можаць розразліць галюцинацію ад прычыны, зв’язанай з недастаткам індэксацыі.
Як структуруецца система
Для таго, каб з’ясаваць, як працюе система на даным этапе, пярэд зменайом код неабходна ўзначыць вхідныя даны, адпаведальнага за крок і критэрыя завершэння. Аператары должны магчымае перазапускать крок з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Неабходна адночасна документацыя успішнага і варыянтага ходу выканання. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не елементамі пазнейшай доработкі. Паказваць трэба тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не зможуць розразліць галюцинацыю ад працэзу індексавання.
Стварэнне каналу приймання дадзеных
Для стадіі стварэння каналу прыема дадзейнаў неабходна прадгадаць вхідныя даны, адпаведальнага за шаг і крэтыяры завершэння пры змены коду. Аператары должны магчымае перзапускать шаг з вядомай точкі контролю, не прабуючы выявіць схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптаў. Калі шаг не выканаецца, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны канал працы. Прыкладзіце тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цитатаў аператары не зможуць разлічыць галюцинацію ад працяжкі ў індэксаванні.
Зялленне
У стадії завантажэння неабяжна практычна апраначыць параметры вхідных дадзеных, адпаведнага эксперта і крэтэрыя завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск этапа з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце гэтай стадіі як даговору межа вхіднымі дадзенымі і перакананымі выходнымі рэзультатамі. Даўце назвы файлам, апраначыць крэтэрыя успеху і не прымайце часткова завершаныя рэзультаты без падтверджэння. Указуйце тыя часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аператары не зможаць разлічыць галюцинацію ад працягу індэксавання.
{
"doc_id": "bsp-mpr-2023-q3",
"title": "Monetary Policy Report Q3 2023",
"period_label": "Q3 2023",
"publication_date": "2023-08-17",
"url": "https://www.bsp.gov.ph/..."
}
Аналіз
Для стадіі аналізу паведамленняя неабходна ўскладненне вхідных дадзей, адпаведальнага за этап і крэтынаў завершэння пры перадзмене коду. Аперацыйныя працавнікі должны магчымае перадзначыць этап з вядомай точкі контролю, не прабуючы выявіць схованы стан. Запісваюцца час выконання і косты токеноў або запытак праза функцыйнае рэзультаты. Відразлівае паказанне костаў запобегае неспадзяваным расчыткам, калі парадокс пераходзіць з дэмовай среды ў спяльную. Наводзіцца тые часткі тексту, якія фактычна лежалі в основе адпаведнай адказу. Без цых цітатаў аперацыйныя працавнікі не можуць разлічыць галюцинацію ад прасоў у індэксаванні.
Чанкаванне, імбеддынг і апсерт
Для стадіі вбудоввання дадзеных у формат Chunking і ўтварэння новых елементаў неабходна пазначыць вхідныя даны, адпаведальнага за гэты крок і критэрыя завершэння працы перад змінайом коду. Аператары должны магчымае перадзваніць гэты крок з вядомага пункта контролю, не прымуджаючыся з’ясавіць схованы стан. Конфігурацыю трэба залічыць паза кодам прыемліка. Файлы сераўнавання, храненні секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядзець, не чытаяўшы весь граф. Паказваць неабходна тыя часткі тексту, якія фактычна ляглі в основу адпаведнай адказы. Без ціх цитатаў аператары не можаць разлічыць галюцинацію ад працягу індэксавання.
def chunk_text_by_tokens(text, enc, chunk_size=512, overlap=64):
tokens = enc.encode(text)
stride = chunk_size - overlap
chunks = []
start = 0
while start < len(tokens):
window = tokens[start : start + chunk_size]
chunks.append(enc.decode(window))
if start + chunk_size >= len(tokens):
break
start += stride
return chunks
Слой выкарыстоўвання дадзеных і проблема свежасці
Для шара і етапу адміністрацыі даных неабяжна прадзефінаваць вхідныя даны, адпраўніка крока і критэрыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Неабяжна задокументаваць як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є частью продукту, а не дадатковым удосконаленнем пазнейшае. Паказваць часткі тексту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аперацыйныя працавнікі не зможуць адразніць галюцинацыю ад прасоў у індэксаванні.
RECENCY_WEIGHT = 0.85
def combined_score(hit):
relevance = hit.score / max_score
recency = (pub_date - min_date).days / date_span_days # 0.0 to 1.0
return (1 - RECENCY_WEIGHT) * relevance + RECENCY_WEIGHT * recency
# scope to Q1 2023 only
retrieve_chunks(query, period_label_key="q1_2023")
# scope to a date range
retrieve_chunks(query, publication_date_from="2023-01-01", publication_date_to="2023-12-31")
Шар генеравання
У стадії шара генеравання, пры перамены коду, неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння. Аперацыяныя працавнікі должны магчыма ўвайсці крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны процес. Прытамульвайце тыя часткі тексту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх прытамульванняў аперацыяныя працавнікі не зможуць адразніць галюцинацыю ад працягу індэксавання. У стадії шара генеравання, пры перамены коду, неабяжна ўзначыць вхідныя даны, адпаведальнага за крок і крэтыры завершэння. Аперацыяныя працавнікі должны магчыма ўвайсці крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Запісвайце час выконання і кост токеноў або запытаў разам з функцыйнальнымі рэзультатамі. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі процес пераходзіць з дэмовай среды ў спаканую.
Проблемы, з якімаі вы фактычна сталісь
Калі працуеце над проблемамі, з якімаі вы фактычна сталісь, спачатку запішыце умовы: неабяжлівыя даны, сигнал успеху і тое, што выходзіць у разе частковага невыпання. Такі список дапамагае заліцьварыць пазнейшыя змены ў кодзе. Зберагаюце настройкі паза кодам прыемліка. Файлы сераўнавання, храненні секрэтных данных і флагі функцыйяў должны знаходзіцца ў аднам месцы, куда аператары можуць адбавіць аудыт без неабяжлівага чытання всей структуры. Перад налаштаваннем запитоў пераканайцеся ў рэкале на фіксаваным наборы запитанняў. Частае змена запитоў рэдка калі вярнуе слабую эфектыўнасць пошуку.
Шаблоны PDF, якія забруднююць часткі коду
Калі працюеце над стадзіяй выкарыстоўвання шаблонных частак PDF, спачатку запісайце умовы кантракту: неабяжныя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі список пераконтроўкаў дапамагае заліцьваты змяны ў кодзе пазнейша.
def _clean_parsed_text(text):
text = text.replace("\x0c", "\n\n")
text = re.sub(r"Classification:\s*GENERAL\s*\n", "", text)
text = re.sub(r"Monetary Policy Report\s*[--][^\n]+\|\s*\d+\s*\n", "", text)
text = re.sub(r"\n{3,}", "\n\n", text)
return text.strip()
Актывацыя вычысцэння колекцыі
Калі працюеце над этапам вычысцэння калекцыі Accidental, спачатку запішыце умовы вярбунка: неабходныя данні, сигнал успеху і тое, што выканаецца у разы ўзельнага неякшэння. Такі чарткі спамагаець залічыць пазнейшыя змены ў кодзе. Валіце маленькія, тэставаныя елементы замест вялікіх скрыптав. Калі якісь крок не выйшае, неякшэнне павінна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Перад налаштаваннем запитоў пераканайцеся ў рэзультатах адпаведнага набора запытанняў. Частыя змены запитоў рэдка калі выправляюць слабкія аспекты адзысквання інформацыі. Калі працюеце над этапам вычысцэння калекцыі Accidental, спачатку запішыце умовы вярбунка: неабходныя данні, сигнал успеху і тое, што выканаецца у разы ўзельнага неякшэння. Такі чарткі спамагаець залічыць пазнейшыя змены ў кодзе. Запісвайце час выканання і кост токенав або запытаў праза функцыйнае рэзультат. Відкрытыя данні пра косцы з самага пачатку запобегаюць неспакойным рахункам, калі праця пераходзіць з дэмавайнага режыма ў спяльныя среды.
def _should_recreate_qdrant_collection():
if _is_production_environment():
return False
explicit = os.environ.get("QDRANT_RECREATE_COLLECTION", "").lower()
if explicit in ("1", "true", "yes"):
return True
app_env = (os.environ.get("ENVIRONMENT") or "").lower()
return app_env in ("development", "dev", "local")
Павтарэнне чакункоў пасля паўторнага прыему
Этап павтарэння чакункоў пасля паўторнага прыему работае наякша, калі яго спрыявае можласць вимеры паводзкаў. Перад расшырэнням масштаба неабходна зафіксаваць адну ідеальную транскрыпцыю, адзін прыклад неудачы і запіс пра атрыбуцыю да пачатковага стану. Конфігурацыю трэба знаходзіць параду ў коду прыемлівача. Файлы сяродавішча, хранільнікі секрэтных дадзеных і флагі функций должны быць аднароджаны ў аднам месца, куда аператары можуць адбавіць аудыт без неабяжнага чытання всіх дадзеных. Палітыку чакункавання трэба аддзеліць ад палітыкі выявлення. Змена ў одной не должна прымусваць перапісванне другой, калі зменяюцыся паказнікі якосці.
client.delete(
collection_name=collection,
points_selector=models.Filter(must=[
models.FieldCondition(
key="source_file",
match=models.MatchValue(value=source_file)
)
]),
)
Затрымка пад час «холаднага» запуску на безплатным тарифе
Затрымка пачатку роботы на стадіўцы працюе найэфектывней, калі яе розглядаюць як вимерную величыну. Запісаўце адна ідеальная транскрыпцыя, адзін прыклад неудачы і запіс пра вярнэнне да поперадньего стану, прычаму расшырюваць масштабы не трэба. Дакументавайце як шлях успеху, так і шлях вярнэння. Перапрыбуткі, людзкі контроль і обработка некоректных паведамленняў є частью продукту, а не етапамі далейшай доўнелівання. Раздзеляйце правілы часткавання і правілы выявлення. Змена аднаго з яных не должна прымусіваць перапісвання другога, калі змянююцыся показнікі якосці.
Выбір розмеру часткі
Этап выбора размеру частакі працюе найэфектывней, калі яго розглядаць як вимерную плошчу. Зафіксавце адны ідеальны прыклад, адну справу з бягам і прыметку па вярнэнні да пачатковага стану пры расшырэнні масштаба. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына бягу должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Раздзеліце правілы формавання частакі і правілы ўзяць дадзеныя. Змена адных не должна вымагаць перапісву іншых, калі зменяюцца паказнікі якосці. Этап выбора размеру частакі працюе найэфектывней, калі яго розглядаць як вимерную плошчу. Зафіксавце адны ідеальны прыклад, адну справу з бягам і прыметку па вярнэнні да пачатковага стану пры расшырэнні масштаба. Запісвайце часы выконання і косты токеноў або запытак разам з функцыйнальнымі рэзултатамі. Відразувыя даныя пра косты запобегаюць неспакоўным рахункам, калі процес пераходзіць з дэмовай среды ў спяльныя сераўеры.
Што бы вы зробілі інакше
Для этапа «Што вы зрабіце» неабяжна пазначыць вхідныя даны, адпаведальнага за крок і критэрыі завершэння пры перадзяве коду. Аператары должны магчымаць перзапуск кроку з вядомай точкі контролю, не падозрываючы прыхованы стан. Конфігурацыю трэба залічыць пазначальна ад коду прыемлена. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць, не чытаяўшы весь ланцуг. Паказваць трэба тыя часткі, якія фактычна ляглі в основу адпаведнай адказы. Без цых цітатаў аператары не можаць разлічыць галюцинацію ад прасоўкі ў індэксаванні.
Спробуйце
Для стадіі «Практыкуйце» паказаце вхідныя даны, адміністратара крока і крэтыяры завершэння пры перадзеіснаванні коду. Аператары должны магчымаць перзапуск крока з вядомай точкі контролю, не спрабоўваючы здагадвацца пра схованы стан. Дакументавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкія перакрыцця і обробка некоректных паведамленняў є часткай продукту, а не наступным этапам дапрацоўкі. Указвайце тыя часткі, якія фактычна лежалі в основе адпаведнай адказу. Без ціх цытатаў аператары не зможуць разлічыць галюцинацію ад працягу індэксавання.
Чек-ліст для эксплуатацыі
Працюючы над стадіяй чек-ліста для эксплуатацыі, спачатку запісваеце умовы: неабходныя вхідныя даны, сігнал успеху і тое, што выходзіць пры частковай нявыполненасці. Гэты чек-ліст дапамагае заставіць пасляэтапныя змены коду быць чыстымі.
Спрыяйце гэтай стадіі як умовам між вхіднымі данымі і перакананымі выходнымі рэзультатамі. Называйце артыфакты, паказваеце крэтыяры успеху і адмовляйцеся ад мовчанкавага частковага завершэння.
Зьвярзіце рэкалі на фіксаванай сэтке запытаў прычымо да налагоджэння прамптав. Часта змена прамптав рэдка калі-небудзь выправляе слабую систему аднаходжэння інфармацыі.
Зафіксавайце версіі залежнасцяў і запісаўце сумарны атрыбут зображэння, якое было выкаранае пад час дамы. Возможнасць перапрыявлення результатаў лепша за традыцыйныя знаёмства.
Запісвайце часы выкарыстання і косты токенаў або запытаў разам з функцыйнаімі рэзультатамі. Відразувыя данні пра косты запобегаюць неспакойным рахункам, калі працэс пераходзіць з дамы ў спакульнаныя среды.
Зьвярзіце рэкалі на фіксаванай сэтке запытаў прычымо да налагоджэння прамптав. Часта змена прамптав рэдка калі-небудзь выправляе слабую систему аднаходжэння інфармацыі.
Перш чым пераводзіць всю структуру, зафіксавайце версіі, зробіце точны апіс працэсу для крытычных частак і падтвердзіце крокі для абратнага запуску. У спакульных средах неабходны ліміты частоты, перакананні ў правах на выкарыстанне і чысткі власнік для ротацыі секрэтных дадзенняў. Лепш выбіраць простую надзеянасць на стабільнасць, чым крэатывныя, але еднакратныя дамы.
Запіскі для пакета a30a0175d827: не класты ключі прадаўцоў у репазітарыю, задаць максымальны ліміт токена на сесію, а таксама зберагчы транскрыпціі празаўсюды з фікстурамі для ацэнкі, каб пазнейшыя замены моделяў заставаліся порównаннэй.