Галоўная / Артыкулы / Практычныя прытамулкі: RAG, створаны для вектараў, у Oracle: імбеддінгі, HNSW/IVF і гібрыдныя падходы

Практычныя прытамулкі: RAG, створаны для вектараў, у Oracle: імбеддінгі, HNSW/IVF і гібрыдныя падходы

Практычныя прыказкі: RAG на базе вектараў у Oracle – імбеддынгі, HNSW/IVF і гібрыдныя падходы; кантракты, пераказы і месцы для коду для команд, якія викорыстоўваюць гэты патэрн.

2465 слоў

Існавайце гэты документ як перапрацоўаную версію ідэй з артыкула “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: вымерыце час выканання, класію памылак і колькасць выкорыстоўваных токенав для гэтага пункту, а потым выберыце, чы робіць змену на аднойчы заданых критэрыях, а не на асоціяціях.