ბიბლიოთეკა
00/07 · ~34 წთ
GUIDEDECK · საკუთარი ცოდნა LLM-ისთვის

RAG & ვექტორული
ძებნა.

34-წუთიანი სამუშაო სესია retrieval-augmented generation-ზე — როგორ ვაპასუხებინოთ ენის მოდელს თქვენი დოკუმენტებიდან, ხელახლა წვრთნის გარეშე. ემბედინგები, ჩანკინგი, მსგავსების ძებნა, რერანკინგი და ვექტორული ბაზები, რომლებიც ამ ყველაფერს ერთად კრავს.

~34 წთდამწყები → საშუალოAI ინჟინერია
გადაახვიეთ
01 · რატომ RAG 4 წთ

მოდელი მხოლოდ იმაზე პასუხობს,
რაზეც წვრთნიდნენ.

LLM-მა საჯარო ინტერნეტი ისწავლა ფიქსირებულ წვრთნის ზღვრამდე. მას არასდროს უნახავს თქვენი კომპანიის wiki, გუშინდელი მხარდაჭერის ტიკეტები ან PDF, რომელიც მომხმარებელმა ახლახან ატვირთა. ჰკითხეთ ამაზე და ან იტყვის „არ ვიცი“, ან, უარესი, რაღაცას მოიგონებს. RAG ამას ასწორებს: მოდელს კითხვის მომენტში სწორ ფაქტებს აწვდის.

RAG — Retrieval-Augmented Generation — მარტივი პატერნია: სანამ მოდელი პასუხს გასცემს, თქვენ მოიძიებთ თქვენივე მონაცემების ყველაზე რელევანტურ ნაწილებს და პრომპტში ჩასვამთ. შემდეგ მოდელი აგენერირებს პასუხს, რომელიც დაფუძნებულია ამ ნაწილებზე. წარმოიდგინეთ გამოცდა ღია წიგნით — მსჯელობას მაინც მოდელი აკეთებს, უბრალოდ სწორ გვერდს თქვენ უდებთ წინ.

მთელი იდეა ერთ სტრიქონში

  • მოძიება — მოძებნეთ თქვენს მონაცემებში ის რამდენიმე ნაწყვეტი, რომელიც ნამდვილად უკავშირდება კითხვას.
  • გამდიდრება — ჩასვით ეს ნაწყვეტები პრომპტში, როგორც კონტექსტი.
  • გენერაცია — მიეცით მოდელს საშუალება ამ კონტექსტით უპასუხოს და მიუთითოს, საიდან მოვიდა.

კითხვა ამოიღებს ნაწყვეტებს თქვენი ცოდნის ბაზიდან; ეს ნაწყვეტები პრომპტში მიჰყვება, რომ მოდელმა მათგან უპასუხოს.

რატომ არ დავწვრთნათ მოდელი ხელახლა?

ფაინთიუნინგი — ფაქტების ჩაშენება წონებში
  • ძვირი და ნელი — წვრთნას ხელახლა უშვებთ ყოველ ჯერზე, როცა ფაქტი იცვლება.
  • რთულად განახლებადი — ერთი მცდარი სტრიქონის გასწორება კიდევ ერთ წვრთნას ნიშნავს.
  • არ არის მარტივი ციტირება — მოდელი ვერ მიუთითებს, საიდან მოვიდა პასუხი.
  • მაინც ჰალუცინირებს — დამახსოვრებული ფაქტები ერთმანეთში ირევა.
RAG — ფაქტების მოძიება კითხვის მომენტში
  • იაფი და სწრაფი — შეცვალეთ დოკუმენტი და შემდეგი პასუხი უკვე ამას ასახავს.
  • ყოველთვის აქტუალური — დაამატეთ დღევანდელი ტიკეტი და მაშინვე მოსაძებნი ხდება.
  • ჩაშენებული ციტირება — ზუსტად იცით, რომელი ნაწყვეტი გამოიყენა.
  • ნაკლები მოგონილი პასუხი — ფაქტები პირდაპირ პრომპტში ზის.

ანალოგია  როგორც განსხვავება იმას შორის, გამოცდისთვის სახელმძღვანელოს ზეპირად სწავლობთ (ფაინთიუნინგი) თუ წიგნის შეტანისა და გადამოწმების უფლება გაქვთ (RAG). ფაინთიუნინგი სტილსა და უნარებს ასწავლის; RAG ფაქტებს აწვდის. გუნდების უმეტესობა ჯერ RAG-ს მიმართავს.

02 · ემბედინგები 5 წთ

ტექსტის რიცხვებად ქცევა,
რომ დარჩეს აზრი.

კომპიუტერი წინადადებებს ისე ვერ ადარებს, როგორც ჩვენ. ხრიკი ისაა, რომ ტექსტის თითოეული ნაწილი რიცხვების გრძელ სიად — ვექტორად — გადაიქცეს და ისე განლაგდეს, რომ მსგავსი აზრის ტექსტები ერთმანეთთან ახლოს მოხვდნენ. ამ გარდაქმნას ემბედინგი ჰქვია და სწორედ ის ამუშავებს მთელ ვექტორულ ძებნას.

ემბედინგი — რიცხვების სია (ვექტორი), რომელიც ტექსტის ნაწილის აზრს გამოხატავს. მოდელი კითხულობს ტექსტს და გამოსცემს, ვთქვათ, 1,536 რიცხვს. ერთსა და იმავე იდეაზე დაწერილი ტექსტები ახლომდებარე ვექტორებს იღებენ; დაუკავშირებელი ტექსტები — შორეულს, მაშინაც კი, როცა საერთო სიტყვა არ აქვთ. „როგორ დავიბრუნო ფული?“ და „თანხის დაბრუნების პოლიტიკა“ მეზობლები აღმოჩნდებიან.
import { embed } from "ai"
import { openai } from "@ai-sdk/openai"

const { embedding } = await embed({
  model: openai.embedding("text-embedding-3-small"),
  value: "How do I get my money back?",
})
// embedding → [0.021, -0.044, 0.087, … ]  (1536 numbers)
"refund policy" embedding model text → vector MEANING-SPACE refund money back weather

თითოეული ტექსტი წერტილად იქცევა. „თანხის დაბრუნება“ და „ფულის უკან დაბრუნება“ ერთად დგას; „ამინდი“ — შორს.

რატომ არის ეს ძლიერი

  • აზრი და არა საკვანძო სიტყვები. ძველი ძებნა ზუსტ სიტყვას refund ეძებდა. ემბედინგები იდეას უსადაგებს, ასე რომ სულ სხვაგვარად ჩამოყალიბებული კითხვაც სწორ დოკუმენტს პოულობს.
  • მანძილი = კავშირი. როცა ყველაფერი წერტილია, „რელევანტურია თუ არა?“ იქცევა კითხვად „რამდენად ახლოსაა ეს ორი წერტილი?“ — სწრაფ მათემატიკურ ოპერაციად.
  • ერთხელ გააკეთეთ, სამუდამოდ გამოიყენეთ. ყველა დოკუმენტისთვის ემბედინგებს წინასწარ ითვლით და ვექტორებს ინახავთ; კითხვის მომენტში მხოლოდ მოკლე შეკითხვისთვის ითვლით.

ემბედინგის მოდელის არჩევა

  • OpenAI (text-embedding-3) — ძლიერი ნაგულისხმევი არჩევანი, მარტივი API, გადახდა ტოკენებზე.
  • Cohere (embed v3/v4) — შესანიშნავი მრავალენოვანი ხარისხი; ასევე მისია ის რერანკერი, რომელსაც მე-5 ნაწილში შევხვდებით.
  • ღია კოდი (მაგ. BGE, E5, nomic) — თავად უშვებთ, გამოძახებაზე გადასახდელი არ არის, მონაცემები სრულად თქვენს კონტროლშია.

ერთი წესი: დოკუმენტებსა და შეკითხვებს ემბედინგი ერთი და იმავე მოდელით გაუკეთეთ. ორი სხვადასხვა მოდელის ვექტორები ერთსა და იმავე სივრცეში არ ცხოვრობს და მათი შედარება შეუძლებელია.

03 · ჩანკინგი 5 წთ

დოკუმენტების დაყოფა ისე,
რომ მოძიებამ ნამდვილად იპოვოს.

50-გვერდიან სახელმძღვანელოს ერთ ვექტორად არავინ აქცევს — ეს ერთი წერტილი მასში არსებული ყველაფრის ბუნდოვანი საშუალო იქნებოდა და მოდელისთვისაც მთელი დოკუმენტი უნდა მიგეწოდებინათ. სამაგიეროდ, დოკუმენტებს პატარა, ფოკუსირებულ ნაწილებად — ჩანკებად — ჭრით და თითოეულს ცალკე ემბედინგს უკეთებთ.

ჩანკი — დოკუმენტის პატარა, თვითკმარი ნაჭერი (რამდენიმე აბზაცი, ვთქვათ 300–800 სიტყვა). თითოეულ ჩანკს ცალკე ემბედინგი უკეთდება და ცალკე ინახება, ასე რომ ძებნას შეუძლია მხოლოდ საჭირო ნაჭერი დააბრუნოს და არა მთელი ფაილი. ჩანკის ზომა ბალანსია: ძალიან დიდი — და ვექტორი ბუნდოვანია; ძალიან პატარა — და ერთი იდეა შუაზე იჭრება.
// split a long document into overlapping windows
const chunks = splitText(doc, {
  size: 800,      // ~chars (or tokens) per chunk
  overlap: 100,   // repeat across the seam
})
// → each chunk gets embedded + stored on its own
for (const c of chunks) await store(await embed(c), c)
დოკი
ჩანკი 1
ჩანკი 2
ჩანკი 3
გადაფარვა

დოკუმენტი იჭრება ჩანკებად, რომლებიც ოდნავ ფარავს ერთმანეთს — ასე ნაკერზე გაყოფილი წინადადება ერთ-ერთ მათგანში მაინც სრულად ჩანს.

ზომა

სწორი ზომის ნაჭერი

რამდენიმე ასეული სიტყვა ჩვეულებრივ ოქროს შუალედია — საკმარისად დიდი, რომ ერთი სრული აზრი დაიტიოს, და საკმარისად პატარა, რომ ვექტორი მკვეთრი დარჩეს.

გადაფარვა

გადაფარეთ ნაკერები

მეზობლებს შორის გაიმეორეთ ტექსტის ~10–20%, რომ საზღვარზე გადამჯდარი აზრი არ დაიკარგოს — პასუხი სწორედ გაჭრის ადგილას შეიძლება იჯდეს.

სტრუქტურა

დაჭერით ბუნებრივ საზღვრებზე

დაყავით სათაურებზე, აბზაცებზე ან წინადადებებზე — და არა სიტყვის შუაში. სტრუქტურის დაცვა თითოეულ ჩანკს იკითხებადს და თემატურს ტოვებს.

ცუდი ჩანკინგი
  • ძალიან დიდი — ერთი ჩანკი ხუთ თემას ფარავს; მისი ვექტორი ამღვრეული საშუალოა და არაფერს ემთხვევა კარგად.
  • უხეში გაჭრა — ცხრილი ან წინადადება შუაზე იჭრება და მოძიებული ნაწყვეტი უაზრობაა.
კარგი ჩანკინგი
  • ერთი იდეა ერთ ჩანკზე — ფოკუსირებული ვექტორები, რომლებიც ზუსტ კითხვებს ემთხვევა.
  • გადაფარვა + სტრუქტურა — პასუხები ნაკერებს გადაურჩება და პრომპტში ჩასმისას გამართულად იკითხება.

ანალოგია  კულინარიული წიგნის ინდექსი რეცეპტების და არა თავების მიხედვით — გინდათ ზუსტად იმ კერძის გვერდი და არა მთელი „დესერტების“ სექცია.

05 · რერანკინგი და ჰიბრიდული ძებნა 5 წთ

ვექტორული ძებნა შესანიშნავი
პირველი გავლაა — არა ბოლო სიტყვა.

სუფთა მსგავსების ძებნას ბრმა წერტილები აქვს. მას შეიძლება გამორჩეს ზუსტი ტერმინი — შეცდომის კოდი ან პროდუქტის SKU — და მისი პირველი შედეგი ყოველთვის საუკეთესო არაა. ორი იაფი გაუმჯობესება ამის უმეტესობას ასწორებს: ჰიბრიდული ძებნა და რერანკინგი.

ჰიბრიდული ძებნა — გაუშვით ორი ძებნა და შეაერთეთ: კლასიკური საკვანძო სიტყვის ძებნა (მას ასევე ლექსიკურს ან BM25-ს უწოდებენ და ზუსტ სიტყვებს ეძებს) პლუს სემანტიკური ვექტორული ძებნა (რომელიც აზრს ეძებს). საკვანძო სიტყვის ძებნა ზუსტ ტოკენებს, მაგალითად ERR-503-ს, უტყუარად პოულობს; სემანტიკური ძებნა პერიფრაზებს იჭერს. ერთად ისინი ერთმანეთის ხარვეზებს ფარავენ.

ლექსიკური + სემანტიკური, შემდეგ შერწყმა

საკვანძო სიტყვის ძებნა სიტყვებზე ზუსტია; ვექტორული ძებნა აზრში ერკვევა. გაუშვით ორივე და შემდეგ ორი რანგირებული სია ერთში შეადუღეთ. გავრცელებული და მდგრადი გზაა RRF (reciprocal rank fusion) — ის უბრალოდ აჯილდოებს ჩანკებს, რომლებიც რომელიმე სიაში მაღლა დგანან, და ქულების მორგება არ სჭირდება.

  • საკვანძო სიტყვა იგებს სახელებზე, ID-ებზე, კოდებზე, იშვიათ ტერმინებზე.
  • სემანტიკა იგებს პერიფრაზებსა და სინონიმებზე.
  • შერწყმა — ნაკლები შემთხვევა, როცა „აშკარა დოკუმენტი ვერ იპოვა“.

ორი დამოუკიდებელი ძებნა, ერთი შერწყმული შედეგების სია.

ჭკვიანი მეორე გავლა მოკლე სიაზე

სწრაფი ვექტორული ძებნა უხეშ მოკლე სიას გაძლევთ — ვთქვათ, საუკეთესო 50-ს. რერანკერი უფრო მძიმე და უფრო ზუსტი მოდელია, რომელიც შეკითხვასა და თითოეულ კანდიდატს ერთად კითხულობს, ნამდვილ რელევანტურობას აქულებს და შემდეგ თავიდან ალაგებს. რერანკინგის მერე მხოლოდ საუკეთესო 5-ს ტოვებთ. ერთეულზე ის უფრო ნელია და სწორედ ამიტომ უშვებთ 50-ზე და არა 5 მილიონზე.

  • რეტრივერი — სწრაფი, ფართო ბადეს ისვრის (recall).
  • რერანკერი — ნელი, ნამდვილ საუკეთესოს არჩევს (precision).
  • საუკეთესო შედეგები თავში ხვდება, სადაც მოდელი ყველაზე მეტ ყურადღებას აქცევს.
// Cohere Rerank — reorder by true relevance
const ranked = await cohere.rerank({
  model: "rerank-v3.5",
  query,
  documents: candidates, // top-50 from search
  topN: 5,               // keep the best 5
})

მოიძიეთ ფართოდ და იაფად, გადაარანჟირეთ ვიწროდ და მკვეთრად.

  • დაამატეთ ჰიბრიდული ძებნა, როცა მომხმარებლები ზუსტი იდენტიფიკატორებით ეძებენ — პროდუქტის კოდები, სახელები, ვერსიის ნომრები, სამართლებრივი მითითებები — და სუფთა ვექტორული ძებნა მუდმივად ვერ პოულობს მათ.
  • დაამატეთ რერანკერი, როცა მოძიება დაახლოებით სწორ ჩანკებს აბრუნებს, მაგრამ ნამდვილად საუკეთესო პირველ რამდენიმეში არაა. RAG-აპლიკაციების უმეტესობისთვის ეს ხარისხის ყველაზე ეფექტური ერთეული გაუმჯობესებაა.
  • დაიწყეთ მარტივად. ჩვეულებრივი top-k ვექტორული ძებნა კარგი v1-ია. ეს დაამატეთ მაშინ, როცა თქვენი შეფასებები აჩვენებს გამორჩენებს — და არა უფრო ადრე.
06 · ინსტრუმენტები 5 წთ

სად ცხოვრობს ვექტორები:
ვექტორული ბაზა.

ვექტორული ბაზა ინახავს თქვენი ჩანკების ვექტორებს, აგებს ANN-ინდექსს და მსგავსების შეკითხვებს სწრაფად პასუხობს — უმეტესობა ასევე აკეთებს იმ მეტამონაცემებით ფილტრაციასა და ჰიბრიდულ ძებნას, რომელიც ახლახან ნახეთ. აი, წამყვანი ვარიანტები, რაში არის თითოეული საუკეთესო და როგორ ავირჩიოთ.

ვექტორული ბაზა — მონაცემთა საცავი, აგებული იმისთვის, რომ ემბედინგები შეინახოს და „იპოვე უახლოესი ვექტორები“ მილიწამებში შეასრულოს, თუნდაც მილიონობით წერტილზე. მთავარი პრაქტიკული არჩევანია: დაამატოთ ის ბაზას, რომელსაც უკვე უშვებთ (pgvector) თუ აიღოთ გამოყოფილი სისტემა, აშენებული მხოლოდ ვექტორებისთვის.
pgvector

Postgres, გაფართოებული

გაფართოება, რომელიც ჩვეულებრივ Postgres-ს ვექტორულ სვეტსა და ANN-ინდექსს ამატებს.

  • დადებითი — იყენებთ იმ ბაზას, სარეზერვო ასლებსა და SQL-ს, რაც უკვე გაქვთ; ვექტორები თქვენს რელაციურ მონაცემებთან ერთად ცხოვრობს.
  • უარყოფითი — ძალიან დიდ მასშტაბსა და ძალიან მაღალ შეკითხვების ნაკადზე სპეციალიზებულმა ძრავმა შეიძლება გაუსწროს.
Pinecone

სრულად მართული

ჰოსტინგზე მდგარი, სერვერლეს ვექტორული სერვისი — ინფრასტრუქტურის მართვა არ გჭირდებათ.

  • დადებითი — სწრაფად იწყებთ, თავად მასშტაბირდება, ოპერაციული ტვირთი მცირეა.
  • უარყოფითი — დახურული და მოხმარებაზე ფასდება; თქვენი ვექტორები სხვის ღრუბელში ცხოვრობს.
Qdrant

ღია კოდი, Rust-ის სისწრაფე

გამოყოფილი ვექტორული ძრავი ძლიერი ფილტრაციით; თვითჰოსტი ან მათი ღრუბელი.

  • დადებითი — შესანიშნავი წარმადობა და მდიდარი, მეტამონაცემებით ფილტრირებული ძებნა; ღია კოდი.
  • უარყოფითი — თვითჰოსტინგის შემთხვევაში კიდევ ერთი სამართავი სერვისი.
Weaviate

ყველაფერი კომპლექტში

ღია კოდის ბაზა ჩაშენებული ჰიბრიდული ძებნითა და ჩასართავი ემბედინგის მოდულებით.

  • დადებითი — ჰიბრიდული ძებნა და სქემის შესაძლებლობები კოლოფიდანვე.
  • უარყოფითი — მეტი ცნების სასწავლი; მინიმალურ კონფიგურაციაზე უფრო მძიმეა.
Chroma

დეველოპერისთვის მოხერხებული

მსუბუქი, ღია კოდის საცავი, რომელიც ლოკალურად თითქმის უპარამეტროდ ეშვება.

  • დადებითი — ყველაზე სწრაფი გზა, RAG-ის პროტოტიპი ლეპტოპზე ააწყოთ.
  • უარყოფითი — დიდი პროდაქშენ-დატვირთვისთვის უფრო მყარ რამეზე გადახვალთ.
Milvus

მილიარდებისთვის აგებული

ღია კოდის, განაწილებული ვექტორული ბაზა ძალიან დიდი დანერგვებისთვის.

  • დადებითი — მასშტაბირდება მილიარდობით ვექტორამდე კლასტერული დონის გამტარუნარიანობით.
  • უარყოფითი — ყველაზე დიდი ოპერაციული ტვირთი; პატარა აპლიკაციებისთვის ზედმეტია.

როგორ ავირჩიო

  • უკვე Postgres-ზე ხართ? დაიწყეთ pgvector-ით. ერთი სისტემით ნაკლები სამართავი და აპლიკაციების უმეტესობას კომფორტულად გაჰყავს პროდაქშენამდე.
  • ოპერაციები საერთოდ არ გინდათ? მართული სერვისი, როგორიცაა Pinecone (ან ჰოსტინგზე მდგარი Qdrant/Weaviate), ღირებულებას ცვლის იმაში, რომ ინფრასტრუქტურას ძიძობა არ სჭირდება.
  • გჭირდებათ მაქსიმალური წარმადობა ან მდიდარი ფილტრაცია, თვითჰოსტინგით? Qdrant ან Weaviate. მხოლოდ პროტოტიპი? Chroma. მილიარდობით ვექტორი? Milvus.
  • ცერის წესი: აირჩიეთ ყველაზე მარტივი ვარიანტი, რომელიც დღევანდელ მასშტაბს აკმაყოფილებს — ემბედინგების მოგვიანებით მიგრაცია ბევრად უფრო ადვილია, ვიდრე კლასტერის მართვა, რომელიც არც გჭირდებოდათ.
07 · სრული პაიპლაინი და შეჯამება 4 წთ

მთელი RAG-პაიპლაინი, თავიდან ბოლომდე.

ორი ფაზა. ინჯესტი ერთხელ ხდება (და ყოველთვის, როცა მონაცემები იცვლება); შეკითხვა — ყოველ კითხვაზე. ამ დეკის ყველაფერი ერთ-ერთ მათგანში ჯდება.

ინჯესტის ფაზა — ეშვება ერთხელ და დოკუმენტის ყოველი ცვლილებისას. ავსებს ვექტორულ საცავს.

შეკითხვის ფაზა — ეშვება ყოველ კითხვაზე. ინჯესტისას აგებული ვექტორული ბაზა ორივე ფაზის საერთო ანჯამაა.

// the query phase, in five lines
const qv     = await embed(question)              // 1 · embed query
const hits   = await db.search(qv, { topK: 50 }) // 2 · vector search
const top    = await rerank(question, hits, 5)    // 3 · rerank
const { text } = await generateText({             // 4 · augment + generate
  model: anthropic("claude-opus-4-8"),
  prompt: `Context:\n${top}\n\nQuestion: ${question}`,
})

ხუთი დასკვნა

  • RAG = მოძიება + გენერაცია. ფაქტები კითხვის მომენტში მოიძიეთ და არა მოდელში ჩააშენეთ.
  • ემბედინგები აზრს მანძილად აქცევს. ახლო ვექტორები = დაკავშირებული ტექსტი.
  • დაჩანკეთ კარგად. სწორი ზომის, გადამფარავი ნაჭრები მოძიების ბედს წყვეტს.
  • ჰიბრიდი + რერანკინგი გადაარჩენს იმ გამორჩენებს, რომლებსაც სუფთა ვექტორული ძებნა ტოვებს.
  • დაიწყეთ pgvector-ით და ყველაზე მარტივი პაიპლაინით; ნაწილები მაშინ დაამატეთ, როცა შეფასებები ამას მოითხოვს.
ცოდნის შემოწმება

დაგამახსოვრდათ?

ხუთი სწრაფი შეკითხვა RAG-ზე, ემბედინგებზე, ჩანკინგზე, მოძიებასა და ინსტრუმენტებზე — მყისიერი უკუკავშირი, ავტორიზაციის გარეშე.

შეაფასეთ ეს დასტა
იყავით პირველი

ნავიგაცია ← → ღილაკებით ან სქროლით · უკან ბიბლიოთეკაში