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

Практычныя нататкі: што такое генерацыя з дапоўненым пошукам (RAG)

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

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

Крыніцы: What Is Retrieval-Augmented Generation (RAG)? A Practical Guide with Python Examples — Geeky Codes

Наступныя прытамкі восстанавляюць практычны маршрут для выучэння кнігі «Што такое Retrieval-Augmented Generation (RAG)? Практычны падчырнік з прыкладамі на Python — Geeky Codes». Акцэнт ставяцца на контракты, пераконтроўванні і месца для коду, які можна проста замясціць, а не на мотывацыйныя аспекты.

Вы дазнаецеся, як працюе RAG, чаму LLM-ы ствараюць халюцынаціі, і створыце свой першы пайплайн Retrieval-Augmented Generation на Python.

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

Адміністрацыя

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

Пашырэнне

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

Генераванне

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

                    Documents
                        │
                        ▼
                  Data Ingestion
                        │
                        ▼
                   Text Extraction
                        │
                        ▼
                    Chunking
                        │
                        ▼
                  Embedding Model
                        │
                        ▼
                 Vector Database
──────────────────────────────────────────

                  User Question
                        │
                        ▼
                Query Embedding
                        │
                        ▼
                 Similarity Search
                        │
                        ▼
              Top-K Relevant Chunks
                        │
                        ▼
                 Prompt Builder
                        │
                        ▼
                  Large Language Model
                        │
                        ▼
                     Final Answer
from sentence_transformers import SentenceTransformer
import faiss
import numpy as np

documents = [
    "Employees receive 20 days of paid leave every year.",
    "Annual bonuses are paid in December.",
    "Health insurance covers hospitalization expenses."
]

model = SentenceTransformer("all-MiniLM-L6-v2")
embeddings = model.encode(documents)

index = faiss.IndexFlatL2(embeddings.shape[1])

index.add(np.array(embeddings).astype("float32"))

query = "How many leave days do employees receive?"

query_embedding = model.encode([query])

D, I = index.search(
    np.array(query_embedding).astype("float32"),
    k=1
)

print(documents[I[0][0]])

Пашырэныя вызовы у працоўным рэжыме

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

Ключовыя выводы

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

Справакі

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

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

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

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

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

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

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

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

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

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