Практычныя нарады: RAG, Embeddings і базы дадзеных вектораў — пояснены з нуля
Практычныя нарады: RAG, Embeddings і базы дадзеных вектораў — пояснены з нуля: контракты, перакананняі і месцы для коду для команд, якія викорыстоўваюць гэты патэрн.
Існавайце гэта як перапрацоўаны варыянт ідэй з кніги «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"
Чэрніця аператывай працы
Калі працюеце над стадзіяй аператыўнага чэк-лісту, спачатку запісайце контракт: неабходныя даны, сігнал успеху і тое, што выходзіць пад час частковага абякання. Такі чэк-ліст дапамагае заставаць пазнейшыя змены коду чыстымі.
Документавайце як шлях успеху, так і шлях вярнення. Перапрыбуткі, людзкіе контралі і обработка некоректных паведамленняў ёсць частью продукту, а не пазнейшым дапрацоўкам.