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

RAG, эмбедынгі і вектарныя базы даных з нуля

RAG, эмбедынгі і вектарныя базы з нуля: як тэкст становіцца лікамі праз токенізацыю, як працуе пошук падабенства і як усё складаецца ў RAG.

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

Крыніцы: RAG, Embeddings, and Vector Databases — Explained From Scratch

Існавайце гэта як перапрацоўаны варыянт ідэй з кнігі «RAG, Embeddings, and Vector Databases — Explained From Scratch» для працавальнікаў: чыткія этапы, аранжаваныя блакі коду і прыметкі з восстанавлення, якія застаюцца пасля перадачы задання. Этап Аналізу працюе найэфектывней, калі яго розглядаць як мерыябельную паверхню. Запісаце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вярнення да пачатковага стану прычаму, перш чым расшырваць масштаб задання. Валіце маленькія, тэставальныя елементы замест большых скрыптов. Калі якісь крок не выходзіце, прычына неудачы павінна вказываць на адную адпаведальнасць, а не на заплутаны ланцюг задач.

Што такое RAG?

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

[ Documents ] --> [ Chunk ] --> [ Embed ] --> [ Store in Vector DB ]
                                                       |
User Question --> [ Embed Question ] --> [ Find Similar Chunks ] --> [ LLM ] --> Answer

Што такое Embedding?

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

"king"   → [0.21, -0.05, 0.87, ..., 0.33]   (384 numbers)
"queen"  → [0.19, -0.03, 0.85, ..., 0.31]   (384 numbers)
"banana" → [-0.72, 0.44, 0.01, ..., -0.56]  (384 numbers)

Як тэкст стае цячынамі

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

Гэта ўсё частыя прычыны неэфектыўнасці.

Шаг 1: Токенізацыя

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

"backend engineer jobs in bangalore"
Tokens: ["backend", "engineer", "jobs", "in", "bang", "##alore"]

Шаг 2: Шары трансформера

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

"backend"   → [0.52, -0.18, 0.83, 0.45, ...]   (384 numbers)
"engineer"  → [0.48, -0.15, 0.79, 0.41, ...]   (384 numbers)
"jobs"      → [0.31, -0.05, 0.67, 0.22, ...]   (384 numbers)
"in"        → [0.07, 0.02, 0.11, 0.04, ...]    (384 numbers)
"bang"      → [0.39, 0.27, 0.55, 0.30, ...]    (384 numbers)
"##alore"   → [0.14, 0.10, 0.21, 0.11, ...]    (384 numbers)

Шаг 3: Агрэгацыя

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

Dimension 1: (0.52 + 0.48 + 0.31 + 0.07 + 0.39 + 0.14) / 6 = 0.318
Dimension 2: (-0.18 + -0.15 + -0.05 + 0.02 + 0.27 + 0.10) / 6 = 0.002
... same for all 384 dimensions ...
Final: [0.318, 0.002, ...]  ← ONE vector for the entire sentence

Короткае адзясненне: вектары протыва размераў

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

2D point (on a map):     [x, y]           → 1 vector, 2 dimensions
3D point (in a room):    [x, y, z]        → 1 vector, 3 dimensions
Embedding:               [n1, n2, ..n384] → 1 vector, 384 dimensions

Што такое база дадзенняў вектароў?

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

┌──────────────────────────────────────────────────┐
│                   Vector DB                      │
│                                                  │
│  Entry 1:                                        │
│    text:   "Senior Backend Engineer Wipro..."    │
│    vector: [0.21, -0.05, 0.87, ...]              │
│                                                  │
│  Entry 2:                                        │
│    text:   "Frontend dev needed Chennai..."      │
│    vector: [0.71, 0.55, -0.30, ...]              │
│                                                  │
│  Entry 3:                                        │
│    text:   "Backend Engineer Flipkart..."        │
│    vector: [0.19, -0.03, 0.85, ...]              │
│                                                  │
└──────────────────────────────────────────────────┘

Скількі вектароў зберагаецца?

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

Page 1 (naukri.com)    → 3000 chars → split into 6 chunks  → 6 vectors
Page 2 (linkedin.com)  → 5000 chars → split into 10 chunks → 10 vectors
Page 3 (indeed.com)    → 2000 chars → split into 4 chunks  → 4 vectors
Page 4 (glassdoor.com) → 4500 chars → split into 9 chunks  → 9 vectors
Page 5 (some blog)     → 1500 chars → split into 3 chunks  → 3 vectors
                                       ─────────
                                       32 vectors in the database

Як працюе працэс выкарыстоўвання дадзеных

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

Шаг 1: Уключыце запітаўку за дапамогою ТАЎ ж самай модэлі

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

"backend engineering jobs in Bengaluru" → [0.20, -0.04, 0.86, ...]

Шаг 2: Пораўнанне з кожным захаванным вектаром

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

Неяк.

Query vector vs Chunk 1 ("Senior Backend Engineer Wipro, Bengaluru...")
→ similarity: 0.95 ✅
Query vector vs Chunk 2 ("Frontend dev needed Chennai...")
→ similarity: 0.23 ❌Query vector vs Chunk 3 ("Backend Engineer Flipkart Bengaluru...")
→ similarity: 0.97 ✅

Шаг 3: Вернуць тыя k найлепшых чакункоў

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

Проблема чакункавання

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

Original text:
"...looking for a talented software engineer with 5 years of backend experience..."
Chunk 1 (chars 0-500):   "...looking for a talented software engi"
Chunk 2 (chars 500-999): "neer with 5 years of backend experience..."
"Home  About  Careers  Login  Contact Us  Senior Backend Eng"

Лепшыя падходы:

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

Паўны аналіз з рэальнымі цыфрамі

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

"Home Jobs Companies Senior Backend Engineer Wipro, Bengaluru
 Build scalable APIs using Java Spring Boot. 5+ years experience required."

Токенізацыя (29 токенаў):

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

["[CLS]", "home", "jobs", "companies", "senior", "backend", "engineer",
 "wi", "##pro", ",", "bengal", "##uru", "build", "scala", "##ble",
 "api", "##s", "using", "java", "spring", "boot", ".", "5", "+",
 "years", "experience", "required", ".", "[SEP]"]

Вектары на токен (для лепшай чытаемасці паказваюць 8 вімера замест 384):

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

"[CLS]"       → [ 0.01,  0.03, -0.02,  0.05,  0.01, -0.04,  0.02,  0.06]
"home"        → [ 0.44,  0.12, -0.33,  0.08, -0.21,  0.55,  0.09, -0.17]
"jobs"        → [ 0.31, -0.05,  0.67,  0.22,  0.14, -0.08,  0.43,  0.11]
"companies"   → [ 0.28,  0.09,  0.51,  0.18,  0.07, -0.12,  0.38,  0.05]
"senior"      → [ 0.15, -0.22,  0.71,  0.33,  0.41,  0.09,  0.55,  0.27]
"backend"     → [ 0.52, -0.18,  0.83,  0.45,  0.38,  0.21,  0.61,  0.34]
"engineer"    → [ 0.48, -0.15,  0.79,  0.41,  0.35,  0.18,  0.58,  0.31]
"wi"          → [ 0.11,  0.04,  0.22,  0.09,  0.03,  0.07,  0.14,  0.02]
"##pro"       → [ 0.08,  0.02,  0.19,  0.06,  0.01,  0.05,  0.11, -0.01]
","           → [ 0.00,  0.01,  0.00,  0.01, -0.01,  0.00,  0.01,  0.00]
"bengal"      → [ 0.39,  0.27,  0.55,  0.30,  0.22,  0.33,  0.41,  0.19]
"##uru"       → [ 0.14,  0.10,  0.21,  0.11,  0.08,  0.12,  0.15,  0.07]
"build"       → [ 0.35, -0.11,  0.62,  0.28,  0.19,  0.15,  0.47,  0.22]
"scala"       → [ 0.29, -0.09,  0.54,  0.24,  0.16,  0.11,  0.40,  0.18]
"##ble"       → [ 0.10,  0.03,  0.18,  0.07,  0.05,  0.04,  0.13,  0.06]
"api"         → [ 0.41, -0.14,  0.73,  0.37,  0.30,  0.19,  0.53,  0.28]
"##s"         → [ 0.03,  0.01,  0.05,  0.02,  0.01,  0.01,  0.04,  0.01]
"using"       → [ 0.07,  0.02,  0.11,  0.04,  0.03,  0.02,  0.08,  0.03]
"java"        → [ 0.46, -0.20,  0.77,  0.39,  0.32,  0.17,  0.56,  0.29]
"spring"      → [ 0.42, -0.16,  0.70,  0.35,  0.28,  0.14,  0.51,  0.25]
"boot"        → [ 0.38, -0.13,  0.65,  0.31,  0.25,  0.12,  0.48,  0.23]
"."           → [ 0.00,  0.01,  0.00,  0.01, -0.01,  0.00,  0.01,  0.00]
"5"           → [ 0.05,  0.01,  0.09,  0.03,  0.02,  0.01,  0.06,  0.02]
"+"           → [ 0.01,  0.00,  0.02,  0.01,  0.00,  0.00,  0.01,  0.00]
"years"       → [ 0.20, -0.07,  0.44,  0.19,  0.13,  0.08,  0.33,  0.14]
"experience"  → [ 0.33, -0.10,  0.61,  0.27,  0.20,  0.13,  0.45,  0.21]
"required"    → [ 0.18, -0.06,  0.39,  0.16,  0.11,  0.07,  0.29,  0.12]
"."           → [ 0.00,  0.01,  0.00,  0.01, -0.01,  0.00,  0.01,  0.00]
"[SEP]"       → [ 0.02,  0.01, -0.01,  0.03,  0.00, -0.02,  0.01,  0.04]

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

Аб’еднанне — 29 вектараў стаюць 1:

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

Dim 1: (0.01 + 0.44 + 0.31 + 0.28 + 0.15 + 0.52 + 0.48 + 0.11 + 0.08 + 0.00
      + 0.39 + 0.14 + 0.35 + 0.29 + 0.10 + 0.41 + 0.03 + 0.07 + 0.46 + 0.42
      + 0.38 + 0.00 + 0.05 + 0.01 + 0.20 + 0.33 + 0.18 + 0.00 + 0.02) / 29
    = 0.231
Dim 2: (0.03 + 0.12 + -0.05 + 0.09 + -0.22 + -0.18 + -0.15 + 0.04 + 0.02 + 0.01
      + 0.27 + 0.10 + -0.11 + -0.09 + 0.03 + -0.14 + 0.01 + 0.02 + -0.20 + -0.16
      + -0.13 + 0.01 + 0.01 + 0.00 + -0.07 + -0.10 + -0.06 + 0.01 + 0.01) / 29
    = -0.030... same for all 384 dimensions ...

Зберагаецца ў базе дадзеных вектароў:

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

text:   "Home Jobs Companies Senior Backend Engineer Wipro, Bengaluru..."
vector: [0.231, -0.030, 0.421, 0.189, ...]

Цяпер корыстнік шукае: “старшы інжынер бэкенду ў Wipro”

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

Query vector: [0.228, -0.028, 0.418, 0.185, ...]
Chunk vector: [0.231, -0.030, 0.421, 0.189, ...]

Два мадэлі, два задачы

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

Чаму важнае RAG

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

Што чынае хорашым модэлем эмбеддзінгу?

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

A: "Senior Backend Engineer at Wipro"
B: "Software Developer role in Bengaluru"
C: "Best chocolate cake recipe"

Чэрніця аператывай працы

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

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