Практычныя нататкі: вектарны RAG на Oracle — эмбедынгі, HNSW/IVF і гібрыдны пошук
Практычны разбор тэмы «вектарны RAG на Oracle: эмбедынгі, HNSW/IVF і гібрыдны пошук»: кантракты, праверкі і гатовыя фрагменты кода для каманд, якія ўкараняюць гэты падыход.
Крыніцы: Vector‑native RAG on Oracle: embeddings, HNSW/IVF, and hybrid search under database governance
Існавайце гэты документ як перапрацоўаную версію ідэй з артыкула “Vector‑native RAG on Oracle: embeddings, HNSW/IVF, and hybrid search under database governance” для працавальнікаў-оператараў: чыткія этапы, аранжаваныя блакі коду і прыметкі з вяснавання, якія застаюцца пасля перадачы задання. Этап “Апглед” найэфектывней працюе, калі яго розглядаць як мерыябельную паверхню. Запісайце адна ідэальная транскрыпцыя, адзін прыклад неудачы і прыметкі з вяснавання перад тым, як расшырваць масштаб задання. Дакументавайце як успішны, так і няуспешны шляхы вядзення задання. Перапрыбуткі, людскія контрольны пункты і обработка некорэктных поведань ўскладнень ёсцю часткай продукту, а не пасляднім дапрацоўкам.
Ключовыя выводы
Для этапа «Ключовыя вывароткі» неабходна ўзначэння вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад змінайом коду. Аператары должны магчымае перадзягнуць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшоў, прычына неудачы павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны працэс. Наводзіце тыя часткі тэксту, якія фактычна лежаць у падставе адпаведнай адказы. Без ціх цытатаў аператары не зможаць розразліць галюцынацыю ад працягу індэксавання.
Прыямыя прычыны
У стадыі прабэрасупактаў неабходна з’явіць вхідныя даны, адпаведальнага за крок і крэтыры завершэння пры перадзмене коду. Аперацыйныя працавнікі павінны магчымае перазапускаць крок з вядомай точкі контролю, не прабуючы спадарожваць схованы стан. Спрыяйце цій этапы як даговору межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, з’явіць перакананні пра успех і адмовіцеся ад беззвучнага частковага завершэння. Указуйце тыя часткі тэксту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аперацыйныя працавнікі не зможуць адразніць галюцынацыю ад працэсу індэксавання.
Што значыць «vector‑native» у Oracle
Для ўрагу «What vector native means stage» неабходна яшчэ перад змянай коду адзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здогадвацца пра схованы стан. Запісвайце час выканання і вартасьць токеноў або запытанняя разам з функцыйнальнымі рэзультатамі. Відразліва візуалізацыя вартасцей запобегае неспакою, калі працэс пераходзіць з дэмовай асяроддзя ў спакульную. Указвайце тыя часткі тэксту, якія фактычна лежалі в основе адпаведнай адказы. Без цых цітатаў аператары не можуць розразліць галюцынацію і прычыны, якія вынікаюць з недастатку індэксаў. Для ўрагу «What vector native means stage» неабходна яшчэ перад змянай коду адзначыць вхідныя даны, адпаведальнага за крок і крытэрыя завершэння. Аператары должны магчымае перайсці на гэты крок з вядомага пункта контролю, не спрабоўваючы здагадвацца пра схованы стан. Аддзейнавайце дакументацыю як пра успішны, так і пра варыянты восстанавлення працэсу. Перапрыбуткі, людзкі контроль і обработка некорэктных паведамленняя ёсць часткай продукту, а не елементамі, якія дадаюцца пазней.
З дакумента да чанка, да эмбедынгу
Калі працюеце на этапе «З дакумента да чанка», спачатку запісайце умовы: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага нявыпання. Такі спіс контроля дапамагае заліцьварыцца з пазнейшымі зменамі ў кодзе. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына нявыпання павінна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Перад налаштаваннем запітоў пераканайцеся ў рывні вярнага адналёгчэння на фіксаваны набор запітанняў. Частае змены запітоў рэдка калі вярнуе слабкія рэзультаты пошуку.
DBMS_HYBRID_VECTOR: ключавые словы + сэмантыка ў аднам вызыве
Калі працюеце над семантыкай ключавага DBMSHYBRIDVECTOR на данай стадзіі, спачатку запісацеце кантракт: неабяжлівыя вхідныя даны, сігнал успеху і тое, што выходзіць у разе частковага нэуспеху. Такі чарткі спамагаець залічыць пазнейшыя змены ў кодзе. Спрэцьвачаце гэтую стадзію як кантракт межа вхіднымі данымі і перакананымі выходнымі рэзультатамі. Даце назвы артыфактам, задаце правіла пераканання успеху і адмовіцеся ад тыхоўскага частковага завершэння. Замерыяўце рывень воспамінання на фіксаванай сэтцы запітаў прычым рэгулюванні прапазітак. Частае змены прапазітак рэдка калі вылечвае слабыя механізмы пошуку.
Выбор індэкса: HNSW чытаў IVF
Калі працуеце над этапам выбору індэкса HNSW, спачатку запішыце умовы вікорыстоўвання: неабходныя даныя, сігнал пра успех і тое, што выходзіць пад частковым невялікім бракам. Такі чэк-ліст дапамагае заставаць пазнейшыя змены коду чыстымі. Запісвайце час выканання і вартасць токеноў або запытак праза функцыйнае рэзультат. Відразліва візуалізацыя вартасцей запобегае неспакою, калі працэс пераходзіць з дэмовай асяроддзя ў спяльнаныя сераўеры. Замерьце рэкалі на фіксованай сэтке запытаў прычым налаштаванні прамптам. Частае змены прамптов рэдка калі вялікія прычыны слабкага адзысквання дадзеных.
Стварэнне гібрыднага алгорытму адзысквання, які можна захаць
Гібрыдны спосаб рэтрывалія тэкста, які вы вікорыстоўваеце, працуе наякша, калі яго розглядаць як мерыемую структуру. Запісаўце адна ідэальная версія, адзін прыклад неудачы і прыметку па адкату перш чым расшырваць масштаб. Валічыце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, прычына неудачы павінна вказваць на адную адпаведальнасць, а не на заплутаны ланцужок задач. Раздзеляйце правілы часткавання інфармацыі ад правілаў рэтрывалія. Змена ў адных не павінна вымагаць перапісву іншых, калі зменяюцца паказнікі якосці.
SELECT id, source, content
FROM documents
WHERE source = 'kb'
AND published >= DATE '2025-01-01'
ORDER BY VECTOR_DISTANCE(embedding, :qvec, COSINE)
FETCH FIRST 5 ROWS ONLY;
SELECT id, source, content
FROM documents
ORDER BY embedding <=> :qvec
FETCH FIRST 3 ROWS ONLY;
Маленькая дэманстрацыя з початку да канца
Мініяцюрны ўраджэнні на даным этапе даўае найлепшыя рэзультаты, калі яго спрыяжаць з меркаваным паверхнёй. Запісаўце адна «золатая» транскрыпцыя, адзін прыклад неудачы і прыметку па адвярнуцьцю працы пры расшырэнні масштаба. Спрыяжыце гэты этап як кантракт межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Даўце назвы артыфактам, задаце крытэрыя успеху і адмовіцеся ад беззвучнага частковага завершэння. Раздзеліце політыку частковай апрацоўкі дадзенняў ад політыкі ўтрыманні інформацыі. Змена адной з яных не павінна вымагаць перапісвання другой, калі зменяюцыся паказнікі якосці.
CREATE TABLE documents (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
source VARCHAR2(64),
published DATE,
content VARCHAR2(4000), -- use CLOB for larger text in production
embedding VECTOR(3, FLOAT32)
);
INSERT INTO documents (source, published, content, embedding) VALUES
('kb', DATE '2025-01-15', 'How to reset your password',
TO_VECTOR('[0.10, 0.05, 0.90]', 3, FLOAT32));
INSERT INTO documents (source, published, content, embedding) VALUES
('kb', DATE '2025-02-10', 'How to export monthly invoices',
TO_VECTOR('[0.80, 0.10, 0.10]', 3, FLOAT32));
INSERT INTO documents (source, published, content, embedding) VALUES
('runbook', DATE '2025-03-05', 'Rotate API keys every 90 days',
TO_VECTOR('[0.15, 0.85, 0.10]', 3, FLOAT32));
COMMIT;
CREATE VECTOR INDEX docs_hnsw_idx
ON documents (embedding)
ORGANIZATION INMEMORY NEIGHBOR GRAPH
DISTANCE COSINE;
SELECT id, source, content
FROM documents
ORDER BY VECTOR_DISTANCE(
embedding,
TO_VECTOR('[0.12, 0.04, 0.92]', 3, FLOAT32),
COSINE
)
FETCH FIRST 3 ROWS ONLY;
-- Suppose :qvec is a VECTOR(3, FLOAT32) bind variable
SELECT id, source, content
FROM documents
ORDER BY VECTOR_DISTANCE(embedding, :qvec, COSINE)
FETCH FIRST 3 ROWS ONLY;
SELECT id, source, content
FROM documents
ORDER BY embedding <=> :qvec
FETCH FIRST 3 ROWS ONLY;
SELECT id, source, content
FROM documents
WHERE source = 'kb'
ORDER BY VECTOR_DISTANCE(
embedding,
TO_VECTOR('[0.12, 0.04, 0.92]', 3, FLOAT32),
COSINE
)
FETCH FIRST 2 ROWS ONLY;
DROP INDEX docs_hnsw_idx;
CREATE VECTOR INDEX docs_ivf_idx
ON documents (embedding)
ORGANIZATION NEIGHBOR PARTITIONS
DISTANCE COSINE;
Організацыя адпаведзення: у вашай прыкладнай програме чы ў Select AI
Працэс аранжавання адказу на стадыі працюе найэфектывней, калі яго спрыяваць як меравальную плошчу. Зберагачыце адны ідэальны прыклад работы, адны прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Запісвайце часы выканання і косты токеноў або запытак праза функцыйнае рэзультат. Відразлівасць костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Раздзеляйце політыку часткавага апрацоўвання дадзеных і політыку ўтрымання іх. Змена адной з яных не павінна вымагаць перапісвання другой, калі зменяюцыся паказнікі якосці. Працэс аранжавання адказу на стадыі працюе найэфектывней, калі яго спрыяваць як меравальную плошчу. Зберагачыце адны ідэальны прыклад работы, адны прыклад неудачы і запіс пра вярнэнне да пачатковага стану перад расшырэнням масштаба. Дакументавайце як успішны, так і вярнэнчы выкарыстоўвання працэсу. Перапрабавкі, людзкія контрольныя пункты і апрацоўка некорэктных дадзеных ўжо ёсць часткай продукту, а не чымсь, што дадаецца пазней.
-- In a session with an AI Profile that scopes access
SELECT AI SHOWSQL 'List the top 3 KB articles about password resets from 2025.'
USING 'profile = <your_ai_profile>';</your_ai_profile>
Работа ў прыродных умовах
Для этапы працы ў працэспрыводзе неабходна пярэд змянай коду адначасова візначыць інпуты, адпаведальнага за крок і крэтарыя для завершэння. Аперацыйныя працавнікі должны магчымае запускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Лепш выбіраць маленькія, тэставаныя елементы замест большых скрыптов. Калі крок не выйшаў, прычына нехаспекі должна вказываць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцужок задач. Прыкладвайце цітаты з тых частак, якія фактычна лежалі в основе адпаведнай адказы. Без цітатаў аперацыйныя працавнікі не зможуць адразліць галюцынацыю ад працэсу індэксавання.
BEGIN
DBMS_STATS.GATHER_TABLE_STATS(USER, 'DOCUMENTS');
END;
/
BEGIN
DBMS_STATS.GATHER_INDEX_STATS(USER, 'DOCS_HNSW_IDX');
END;
/
Меркі версіі і прыметы сяродавішча
Для сферы застосавання версіі і этапы сераўніка неабходна прадзефінавацыя вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аперацыйныя працавнікі должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы прыхованы стан. Спрыяйце цій этапы як даговору межа вхідных дадзеных і перакананых выходных рэзультатаў. Даўце назвы артыфактам, прадзефінавацыя крэтараў успеху і адмовіцеся ад бяспрыводнага частковага завершэння. Указуйце тыя часткі тэксту, якія фактычна лежаць у падставе адпаведнай адказу. Без ціх цытатаў аперацыйныя працавнікі не зможуць адразніць галюцынацыю ад працягу індэксавання.
За межамі сферы застосавання
Для этапы «За межам сферы дзеяння» неабходна прадзеўжэйшае адзначэнне вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы пра схованы стан. Запісваць трываласць выканання і кост токенаў або запытаў разам з функцыйнальнымі рэзултатамі. Відразы костаў з самага пачатку запобегае неспакойным рахункам, калі працэс пераходзіць з дэмаверсіі ў спяльныя асяроддзя. Указваць тые часткі тэксту, якія фактычна ляглі в основу адпаведнай адказы. Без цых цітатаў аператары не можуць разлічыць галюцынацію ад прасоў у індэксаванні. Для этапы «За межам сферы дзеяння» неабходна прадзеўжэйшае адзначэнне вхідных дадзеных, адпаведальнага за крок і крэтарыяў завершэння працы перад зменым коду. Аператары должны магчыма было перзапускаць крок з вядомай точкі контролю, не падозрываючы пра схованы стан. Аддзеўжэйшае документавацыя успішнаг і варотнаг падходаў. Перапрыбуткі, людзкія контрольныя пункты і обработка неканальных паведамленняў ёсць часткай продукту, а не пасляднім дапрацоўкам.
Спробуйце далей
Калі працюеце над стадзіяй «Спробуйце далей», спачатку запісайце умовы кантракту: неабяжлівыя даны, сігнал успеху і тое, што выходзіць пад частыя неудачы. Такі спіс контроля дапамагае заліцьваты змяны ў кодзе чыстымі. Валіце маленькія, тэставаныя елементы замест большых скрыптов. Калі якісь крок не выйшае, неудача должна вказваць на адну конкрэтную адпаведальнасць, а не на заплутаны ланцюг задач. Перад налаштаваннем запітоў пераканайцеся, наскількі эфектыва сістэма адпаведзя на фіксованы набор запітаў. Частая зміна запітоў рэдка калі вярнайце слабкую эфектывнась ціранування інформацыі.
Апавясненні
Калі працуеце над стадзіяй «Справакі», спачатку запісайце угоду: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі справак дапамагае заліцьваты пазнейшыя змены коду.
Справак для эксплуатацыі
Калі працуеце над стадзіяй «Справак для эксплуатацыі», спачатку запісайце угоду: неабяжлівыя даныя, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі справак дапамагае заліцьваты пазнейшыя змены коду.
Зберагаеце настройкі паза кодам прыемленае. Файлы серавэра, хранілішча секрэтных даных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое аператары можаць пераглядаць без неабяжлівага чытання всей структуры.
Зьвярзіце рэкалі на фіксаванай сэтке запытаў прычымо да налагоджэння прамптав. Часта змена прамптав рэдка калі лечыць слабую сістэму аднаходжэння інфармацыі.
Зафіксавайце версіі залежнасцей і запісаўце сумарны атрыбут зображэння, якое было выкаранае пад час дамоў. Возможнасць перапрыявлення рэзультатаў важлівей за традыцыйныя знаёмства.
Дакументавайце як шлях успеху, так і шлях вярнення да нормальнага стану. Перапрыявленні, людзкі контроль і обработка некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
Зьвярзіце рэкалі на фіксаванай сэтке запытаў прычымо да налагоджэння прамптав. Часта змена прамптав рэдка калі лечыць слабую сістэму аднаходжэння інфармацыі.
Перш чым пераводзіць стэк у болей высокі ранг, зафіксавайце версіі, зробіце „золаты“ транскрыпт для крытычнага шляху і паказвайце способы вярнення да пачатковага стану. У спільных срэдах неабходны ліміты частоты запытаў, перакананні ў правільнасці належнасці і чысткі власнік для змены секрэтных даных. Лепш надзейна надзея на стабільнасць, чым крэатывныя, але разовыя дамоў.
Запіска параграфу dbbeb034416b: не трэба кантрацеўваць ключы прадастоўніка ў рэпазітарыі, задаць максімальную кантроль на токены на адну сесыю, а таксама зберагчы транскрыпціі праза фіксатуры адлічэння, каб пазнейшыя замены мадэляў заставалі пораўнанневымі.
Запіска па ўжорсткаванню на стадыі 0 найэфектывней працуе, калі яе спрыягчваць як мерыемую плошчу. Зафіксавайце адну ідэальную транскрыпцію, адзін кейс неудачы і запіску пра вярнэнне да пачатковага стану перш чым расшырваць масштаб. Спрыягчвайце гэтую стадыю як кантракт межа вхіднымі дадзеннямі і перакананымі выходнымі рэзультатамі. Назвайце артыфакты, задаць перакананні на успех і адмовіцеся ад тыхоўскага частковага завершэння.
Дзеянне ўжорсткавання 0/899: замерьце час выкарыстання, класію адказаў і кансумат выкарыстаных токенаў для гэтай запіскі, а пасля вырашыце, чы робіць змяну на адной пазначанай сэткі пытанняў, а не на адной лячбе.
Для першага пасэгу з узгадчанняя сістэмы задаюцца вхідныя даны, адміністратар крока і крэтэрыя завершэння пры зміне коду. Аперацыйныя працавнікі должны магчымае перадзеяць крок з вядомай точкі контролю, не падозрываючы схованы стан. Конфігурацыю трэба залічыць праза код аплікацыі. Файлы сераўнавання, хранільнікі секрэтных дадзеных і флагі функцыйяў должны знаходзіцца ў аднам месцы, якое працавнікі можуць пераглядаць, не чытаючы весь ланцуг.
Дзялейны пасэг узгадчання 1/899: звярнуць увагу на час выканання, класію адзінакоў і выкарыстоўванне токеноў для гэтага пасэгу, а потым вырашыць, чы робіцца змяна на аднойчынных крэтэрыях, а не на аснове індывідуальных спостарэнняў.
Для этапы 0 прыема забезпечэння надзеі неабяжна практычная ваказка: перад зменым коду трэба адзначыць вхідныя даныя, адпаведальнага за крок і крытэрыя завершэння. Аперацыйныя працавнікі должны магчыма ўможна перадзеяць крок з вядомага пункта контролю, не прыпускаючы нявідомых станоў сістэмы. Неабходна аддзекласты ці робіцца все правільна, а таксама што рабіць, калі выйдзе проблема. Практыкі павторных спробы, людзкага контролю і обработкі некорэктных паведамленняў ёсць часткай продукту, а не чымсь, што дадаецца пазней.
Дзялёўка забезпечэння надзеі 0/918: трэба змярваць час выканання, класы каштоўкаў і вітрату токенаў для гэтай ваказкі, а пасля на адной з фіксаваных крэатываў, а не на адной прыміткі, вырашаць, чы робіцца змена.
Калі працюеце над першым этапам зміцнення, спачатку запісайце контракт: неабяжлівыя даны, сігнал успеху і тое, што выходзіць у разе частковага невыпання. Такі спіс контроля дапамагае залічыць пазнейшыя змены коду адкрыта і працэйна. Спрытывайце гэты этап як контракт межа данымі і перакананымі выходамі. Дайце назвы элементам, задаце крытэрыі успеху і не падзеляйцеся на частковыя завершэння без паведамлення.
Дзеянні зміцнення 1/918: вымерыце час выканання, класію памылак і колькасць выкорыстоўваных токенав для гэтага пункту, а потым выберыце, чы робіць змену на аднойчы заданых крытэрыях, а не на асоціяціях.