Nimejenga RAG Kuanzia Mwanzo kwa kutumia Python ili Kuielewa
Nilitumia LangChain katika uzalishaji (production) kwa miezi sita. Sikuweza kuelezea jinsi ilivyofanya kazi. Sikujua kwa nini nilichagua vipimo (metrics) fulani au jinsi maandishi yalivyokuwa vectors. Maktaba hiyo ilificha mantiki (logic).
Ili kurekebisha hili, nilifuta mfumo (framework) huo. Niliandika pipeline ya RAG kuanzia mwanzo kwa kutumia mistari 500 ya Python ya kawaida.
Hapa kuna nilichojifunza kutokana na kujenga mfumo (stack) huu kwa mkono.
Tatizo la Black Boxes
Unapotumia maktaba za kiwango cha juu (high-level libraries), unapoteza udhibiti. Niliona mifano (models) ikibuni ukweli usio halisi (hallucinate facts) au kutoa marejeo (citations) yasiyo sahihi. Sikuweza kujua kama hitilafu ilikuwa kwenye chunker, embedding model, au prompt.
Unapojijengea mwenyewe, kila tabaka (layer) inaweza kuchunguzwa. Unaweza kuchapisha (print) vipande (chunks) halisi vinavyotumwa kwa LLM. Unaweza kuona sawia pale sentensi inapokatika.
Tabaka Tano za RAG
RAG siyo algorithm moja. Ni michakato mitano tofauti iliyounganishwa pamoja:
- Chunking: Kuamua jinsi ya kugawa maandishi.
- Embedding: Kubadilisha maandishi kuwa hisabati.
- Retrieval: Kupata vipande sahihi.
- Prompt Construction: Kuelekeza model jinsi ya kufanya kazi.
- Generation: Kupata jibu la mwisho.
Mafunzo Kutokana na Ujenzi Huu
Chunking ndiyo hatua muhimu zaidi Mafunzo mengi hupuuza hili. Usipotumia overlap, unapoteza muktadha (context) kwenye mipaka. Nilitumia sliding window yenye overlap ya kiwango cha herufi. Hii inahakikisha model inaona uhusiano kati ya vipande (chunks) viwili.
Vipimo vya umbali (distance metrics) ni muhimu Nilitumia saa nyingi kurekebisha (debugging) matokeo mabaya ya utafutaji. Tatizo halikuwa data. Lilikuwa ni kipimo (metric). ChromaDB hutumia L2 distance kama chaguo la kawaida. Kwa utafutaji wa kimaana (semantic search), unahitaji Cosine similarity. Mstari mmoja wa kodi ulibadilisha kila kitu.
Prompt zinahitaji mipaka (constraints) LLM ni kifaa cha kukamilisha maelezo, siyo mtabiri (oracle). Ukouliza swali lisilo wazi, itabuni jibu. Nilijifunza kutumia kiolezo cha kukataa (refusal template) cha ukali. Niliiambia model: "Ikiwa muktadha hauna jibu, sema hujui." Hii ilipunguza uongo (hallucinations) kutoka 40% hadi 5%.
Tuma maombi yako kwa makundi (batch) Kutuma ombi moja la HTTP kwa kila chunk ni polepole. Kutuma kwa makundi (batches) ni haraka zaidi. Inaruhusu model ya ndani kufanya kazi kwa mtiririko (pipeline).
Jaribu kuanzia chini kwenda juu Usiandike majaribio (tests) mwishoni. Jaribu chunker yako kwanza. Kisha jaribu embedder yako. Kisha jaribu hifadhi (store) yako. Ukifanya majaribio mwishoni, unajaribu hitilafu (bugs) badala ya mantiki (logic).
Ikiwa unahisi kuwa huielewi kikamilifu stack yako ya AI, ijenge mwenyewe. KODI siyo lengo. Fikra ndiyo lengo.
Optional learning community: https://t.me/GyaanSetuAi
