Skip to content
ეს გვერდი შეიქმნა და ითარგმნა ხელოვნური ინტელექტის დახმარებით. თუ შეამჩნევთ უზუსტობას, გთხოვთ, დაგვეხმარეთ გაუმჯობესებაში. GitHub-ზე რედაქტირება

მოძიებით გაძლიერებული გენერაცია (RAG)

PRX მოძიებით გაძლიერებულ გენერაციას (RAG) ახორციელებს LLM პასუხების გასაძლიერებლად აგენტის მეხსიერებისა და ცოდნის საცავებიდან რელევანტური კონტექსტით. მხოლოდ LLM-ის პარამეტრულ ცოდნაზე დაყრდნობის ნაცვლად, RAG შესაბამის დოკუმენტებს მოიძიებს და პრომპტში ჩაშვებს -- რაც ჰალუცინაციებს ამცირებს და პასუხებს ფაქტობრივ, განახლებულ ინფორმაციაზე აფუძნებს.

მიმოხილვა

RAG პაიპლაინი აგენტის ციკლში ყოველ LLM გამოძახებამდე შესრულდება:

მომხმარებლის შეტყობინება


┌──────────────────────────┐
│  1. მოთხოვნის ფორმულირება │  საძიებო ტერმინების ამოღება
│                           │  მომხმარებლის შეტყობინებიდან
│                           │  + საუბრის კონტექსტიდან
└──────────┬───────────────┘


┌──────────────────────────┐
│  2. ჩაშენების გენერაცია  │  მოთხოვნის ვექტორად გარდაქმნა
│                           │  კონფიგურირებული ჩაშენების
│                           │  პროვაიდერის გამოყენებით
└──────────┬───────────────┘


┌──────────────────────────┐
│  3. მეხსიერების ძიება    │  ძიება მეხსიერების ბექენდებში:
│                           │  ვექტორული მსგავსება + სრული
│                           │  ტექსტური ძიება
└──────────┬───────────────┘


┌──────────────────────────┐
│  4. რელევანტურობის       │  შედეგების შეფასება და
│     ფილტრაცია            │  რელევანტურობის ზღურბლს ზემოთ
│                           │  მყოფების გაფილტვრა
└──────────┬───────────────┘


┌──────────────────────────┐
│  5. კონტექსტის ინექცია   │  შედეგების ფორმატირება და
│                           │  სისტემურ პრომპტში / კონტექსტის
│                           │  ფანჯარაში ჩაშვება
└──────────┬───────────────┘


┌──────────────────────────┐
│  6. LLM გენერაცია        │  მოდელი პასუხს სრული
│                           │  კონტექსტით ხელმისაწვდომი
│                           │  გენერირებს
└──────────────────────────┘

კონფიგურაცია

RAG-ის ჩართვა config.toml-ში:

toml
[memory]
backend = "embeddings"  # RAG-ს ჩაშენებების ბექენდი სჭირდება

[memory.embeddings]
# ჩაშენების პროვაიდერი: "openai" | "ollama" | "local"
provider = "openai"
model = "text-embedding-3-small"
dimensions = 1536

# ვექტორული საცავის ბექენდი
vector_store = "sqlite"  # "sqlite" | "postgres" | "qdrant"

[rag]
enabled = true

# კონტექსტში ჩაშვებისთვის მოძიებული ფრაგმენტების მაქსიმალური რაოდენობა.
max_results = 10

# მინიმალური რელევანტურობის ქულა (0.0-დან 1.0-მდე) ფრაგმენტის ჩასართავად.
relevance_threshold = 0.3

# RAG კონტექსტისთვის გამოყოფილი ტოკენების მაქსიმალური რაოდენობა.
# კონტექსტის ფანჯრის გადავსებას თავიდან იცილებს.
max_context_tokens = 4000

# ფრაგმენტების შერჩევის სტრატეგია, როდესაც max_context_tokens
# გადამეტებული იქნებოდა.
# "top_k" -- ყველაზე მაღალი რელევანტურობის ქულები პირველი
# "mmr" -- მაქსიმალური ზღვრული რელევანტურობა (მრავალფეროვნება + რელევანტურობა)
selection_strategy = "top_k"

ჩაშენების პროვაიდერები

PRX მრავალ ჩაშენების პროვაიდერს უჭერს მხარს:

პროვაიდერიმოდელიგანზომილებებიშენიშვნები
OpenAItext-embedding-3-small1536საუკეთესო ხარისხი/ფასის თანაფარდობა
OpenAItext-embedding-3-large3072უმაღლესი ხარისხი
Ollamanomic-embed-text768ლოკალური, API ხარჯის გარეშე
Ollamamxbai-embed-large1024ლოკალური, უფრო მაღალი ხარისხი
Localfastembed384ჩაშენებული, ქსელის გარეშე

ჩაშენების პროვაიდერის კონფიგურაცია:

toml
# OpenAI ჩაშენებები
[memory.embeddings]
provider = "openai"
model = "text-embedding-3-small"
api_key = "${OPENAI_API_KEY}"

# Ollama ჩაშენებები (ლოკალური)
[memory.embeddings]
provider = "ollama"
model = "nomic-embed-text"
endpoint = "http://localhost:11434"

# ჩაშენებული ლოკალური ჩაშენებები (გარე სერვისის გარეშე)
[memory.embeddings]
provider = "local"
model = "fastembed"

ფრაგმენტაციის სტრატეგიები

დოკუმენტების ჩაშენებისა და ძიების წინ ისინი ფრაგმენტებად უნდა დაიყოს. PRX რამდენიმე ფრაგმენტაციის სტრატეგიას უჭერს მხარს:

სტრატეგიააღწერასაუკეთესო
fixed_sizeდაყოფა ფიქსირებულ ტოკენთა რაოდენობაზე გადაფარვითერთგვაროვანი დოკუმენტები
sentenceდაყოფა წინადადებების საზღვრებზეპროზა და ბუნებრივი ტექსტი
paragraphდაყოფა აბზაცების საზღვრებზესტრუქტურირებული დოკუმენტები
semanticდაყოფა თემატურ საზღვრებზე ჩაშენებების გამოყენებითგრძელი, მრავალფეროვანი დოკუმენტები
recursiveიერარქიული დაყოფა (სათაური > აბზაცი > წინადადება)Markdown/კოდი
toml
[rag.chunking]
strategy = "recursive"

# სამიზნე ფრაგმენტის ზომა ტოკენებში.
chunk_size = 512

# მეზობელ ფრაგმენტებს შორის გადაფარვა (საზღვრებზე კონტექსტის დაკარგვის თავიდან აცილება).
chunk_overlap = 64

# რეკურსიული სტრატეგიისთვის: გამყოფები პრიორიტეტის მიხედვით.
separators = ["\n## ", "\n### ", "\n\n", "\n", ". "]

მოძიების პაიპლაინი

ნაბიჯები 1-3: მოთხოვნა, ჩაშენება, ძიება

RAG მოდული მომხმარებლის უახლესი შეტყობინებიდან საძიებო მოთხოვნას ამოიღებს (არჩევითად LLM-ით გადაფორმულირებული query_reformulation = true შემთხვევაში), მას ჩაშენების პროვაიდერის გამოყენებით ვექტორად გარდაქმნის და ყველა მეხსიერების ბექენდში ერთდროულად ეძებს -- ვექტორული მსგავსება (კოსინუსი) და სრული ტექსტური ძიება (FTS5/pg_trgm). შედეგები გაერთიანდება და დედუბლიკატებს მოშორდება.

ნაბიჯი 4: რელევანტურობის ფილტრაცია

თითოეული შედეგი 0.0-დან 1.0-მდე რელევანტურობის ქულას იღებს. relevance_threshold-ს ქვემოთ მყოფი შედეგები უარყოფილია. ქულის გამოთვლა ითვალისწინებს:

  • ვექტორული კოსინუსის მსგავსებას (პირველადი სიგნალი)
  • სრული ტექსტური შედარების ქულას (გაძლიერების ფაქტორი)
  • სიახლეს (ახალი მეხსიერებები მცირე გაძლიერებას იღებს)
  • წყაროს პრიორიტეტს (ბირთვული მეხსიერებები საუბრის მეხსიერებაზე მაღლა რანჟირდება)

ნაბიჯი 5: კონტექსტის ინექცია

გაფილტრული შედეგები სტრუქტურირებული XML ტეგებით (<context><memory source="..." relevance="...">) ფორმატირდება და LLM პრომპტში ჩაშვდება. ჩაშვებული კონტექსტის მთლიანი რაოდენობა max_context_tokens-ით იზღუდება კონტექსტის ფანჯრის გადავსების თავიდან ასაცილებლად.

შერჩევის სტრატეგიები

Top-K

ნაგულისხმევი სტრატეგია. max_context_tokens-ში ჯდომადი K ყველაზე მაღალქულიანი ფრაგმენტის შერჩევა. მარტივი და პროგნოზირებადი, მაგრამ შეიძლება ზედმეტი შედეგები დააბრუნოს, როდესაც მრავალი ფრაგმენტი ერთსა და იმავე თემას ფარავს.

მაქსიმალური ზღვრული რელევანტურობა (MMR)

MMR რელევანტურობასა და მრავალფეროვნებას აბალანსებს. იტერაციულად ირჩევს ფრაგმენტებს, რომლებიც ერთდროულად მოთხოვნისთვის რელევანტურია და უკვე შერჩეული ფრაგმენტებისგან განსხვავდება:

toml
[rag]
selection_strategy = "mmr"

# Lambda აკონტროლებს რელევანტურობა-მრავალფეროვნების თანაფარდობას.
# 1.0 = სრული რელევანტურობა (იგივეა, რაც top_k)
# 0.0 = სრული მრავალფეროვნება
mmr_lambda = 0.7

MMR რეკომენდებულია, როდესაც ცოდნის ბაზა გადაფარვად ან ზედმეტ ინფორმაციას შეიცავს.

დოკუმენტების ინდექსირება

ავტომატური ინდექსირება

memory_store ინსტრუმენტით შენახული მეხსიერებები ავტომატურად იჩაშენება და ინდექსირდება. დამატებითი კონფიგურაცია არ არის საჭირო.

დოკუმენტების ხელით შეტანა

დოკუმენტების მასობრივი შეტანისთვის გამოიყენეთ CLI:

bash
# ერთი ფაილის ან დირექტორიის ინდექსირება
prx rag index /path/to/document.md
prx rag index /path/to/docs/ --recursive

# ყველა დოკუმენტის ხელახალი ინდექსირება (ჩაშენებების ხელახალი აშენება)
prx rag reindex

მხარდაჭერილი ფორმატები: Markdown (.md), უბრალო ტექსტი (.txt), PDF (.pdf), HTML (.html) და წყაროს კოდი (.rs, .py, .js).

წარმადობის ოპტიმიზაცია

პარამეტრირეკომენდაცია
chunk_size256-512 ტოკენი კითხვა-პასუხისთვის, 512-1024 შეჯამებისთვის
chunk_overlapchunk_size-ის 10-20%
max_results5-15 უმეტესი სცენარებისთვის
relevance_threshold0.3-0.5 (ხარისხის მიხედვით დარეგულირება)

უსაფრთხოების შენიშვნები

  • RAG კონტექსტი LLM პრომპტში ჩაშვდება. დარწმუნდით, რომ შენახული დოკუმენტები არ შეიცავს სენსიტიურ მონაცემებს, თუ აგენტი არ არის ავტორიზებული მათზე წვდომისთვის.
  • memory.acl_enabled = true შემთხვევაში RAG წვდომის კონტროლის სიებს პატივს სცემს. მხოლოდ მიმდინარე პრინციპალისთვის ხელმისაწვდომი მეხსიერებები მოიძიება.
  • ჩაშენების API გამოძახებები დოკუმენტის კონტენტს ჩაშენების პროვაიდერზე გადაცემს. სენსიტიური მონაცემებისთვის გამოიყენეთ ლოკალური ჩაშენების პროვაიდერი (ollama ან local).

დაკავშირებული გვერდები

Released under the Apache-2.0 License.