Siku hizi RAG wakati mwingine hupewa sifa mbaya, ama kwa sababu watu wanaiona kuwa rahisi kabisa (ni rahisi kuanzisha, lakini si sana inapopanuliwa) au wanafikiri imepitwa na ‘mifumo ya kiwakala’ (ambayo mara nyingi, ukiichunguza kwa kina kidogo, huanza kufanana sana na RAG haraka mno...)
Makala haya yana mifano kadhaa ya vitendo inayoonyesha jinsi tunavyoshughulikia changamoto hizi za kawaida:
Kushughulikia data iliyochanganya maandishi na nambari na kwa nini huvuruga RAG ya kawaida: maneno muhimu hugongana na nambari hazina maana ya kisemantiki.
Kwa nini kubuni vipachikaji vinavyotanguliza muhtasari husaidia: tengeneza muhtasari mfupi unaofafanua kila kipande, kisha pachika na utafute kwa kutumia muhtasari huo.
Jinsi ya kutengeneza mihtasari yenye muktadha: jumuisha muktadha wa hati kuu ili kutofautisha takwimu zinazofanana.
Wakati wa kutegemea msimbo na modeli za Pydantic: panapohitajika maudhui halisi, unganisha msimbo maalum na/au modeli ya Pydantic na miito ya LLM ili kupata matokeo ya kuaminika.
Misingi
Mifumo ya RAG huendesha kila kitu kuanzia roboti za usaidizi hadi wasaidizi wa maarifa wa ndani.
Kwa kawaida, mfumo hufanya yafuatayo:
Gawanya hati zako chanzo katika vipande
Pachika kila kipande katika nafasi ya vekta
Rejesha vipande bora vya K wakati wa hoja
Tengeneza jibu kwa kutegemea vipande hivyo
Zana maarufu—LangChain, LlamaIndex na Filestore ya OpenAI—hurahisisha sana hatua hizo. Lakini katika michakato halisi utakumbana na data ambayo si maandishi mazito pekee, na RAG ya msingi inaweza kutatizika. Katika sehemu zinazofuata, tutaonyesha mifano mahususi ya changamoto za data na kujenga suluhisho hatua kwa hatua kadiri ugumu unavyoongezeka.
Data yako inapokuwa si maandishi pekee (jambo ambalo ni la kawaida)
Fikiria kipande hiki cha data katika muktadha wa mchezo:
JSON
Vipachikaji hufanya kazi kutokana na uhusiano uliojifunzwa kati ya maneno kupitia maana za kisemantiki na sarufi. Katika data iliyo hapo juu, maandishi yamechanganywa na nambari ambazo, nje ya muktadha huu mahususi, hazina uhusiano na maneno. Kwa hiyo, tunaweza kusema kipande hiki cha data ni mchanganyiko wa maneno yenye maelezo kiasi na nambari fulani za nasibu.
Hili lisingekuwa tatizo kama hii ndiyo aina pekee ya data tuliyokuwa nayo, kwa sababu bado tungeweza kurejesha kwa kutumia vipachikaji vya maneno machache yenye maelezo yaliyopo (au kutumia tu text-to-SQL). Lakini itakuwaje ikiwa kipande hiki kimefichika miongoni mwa vipande vingi vyenye maandishi mazito ambamo maneno haya pia yanatokea? Kwa mfano:
JSON
Sasa fikiria tunataka kurejesha “What is the attack range with Draconic Ascension?” Kuna uwezekano mkubwa kwamba hatutaweza kurejesha kipande husika tunachotaka, kwa sababu kimefichwa na kelele za vipande vingine vyenye maneno muhimu yaleyale.
Tatizo la msingi ni kwamba hatuwezi kutofautisha vipande hivi vya data vizuri, ingawa vina aina tofauti za taarifa kuhusu mada ileile. Je, tunaweza kuiboresha kwa namna fulani? Bila shaka tunaweza:smile:
Boresha data yako kwa kuifupisha—ndiyo, umesoma sawa
Badala ya kupachika kipande chenyewe moja kwa moja, tunaweza kwanza kutengeneza muhtasari unaofafanua data hiyo, kisha kupachika na kurejesha kwa kutumia muhtasari huo. Katika hatua ya utengenezaji, bado tungetumia data asili iliyounganishwa na muhtasari.
Kwa hiyo, kwa mifano miwili ya vipande iliyoonyeshwa hapo juu, tungetengeneza mihtasari kama hii:
Attack statistics of range, speed, and damage (default and with Draconic Ascension).
Description and details of the Draconic Ascension, including activation conditions, visual effects, and lore.
Kisha tunaimarisha pia hoja ili “ilingane” na muhtasari. Kwa mfano, tungebadilisha “What is the attack range with Draconic Ascension?” kuwa “What is the statistics of attack range with Draconic Ascension?” Hili ni muhimu hasa wakati hoja ya urejeshaji inatoka kwa watumiaji wasio wa nyanja za kiufundi, wanaouliza kwa lugha ~~“huru”~~ ya kawaida ya binadamu, kwa sababu si lazima wajue au kujali jinsi RAG inavyofanya kazi ili kuongeza usahihi na ukamilifu wa urejeshaji.


Usiondoe mambo katika muktadha wake (kanuni inayofaa pia maishani)
Sasa fikiria hali nyingine ambapo tunashughulikia vipande vingi sana vya data vinavyofanana, kama hivi:
Plain Text
Tukidumisha mbinu ileile, fikiria kuuliza “what is character X’s attack range?” Tungekuwa tunabahatisha tu kwa kutumia mihtasari tuliyotengeneza, kwa sababu nayo ingefanana sana. Basi tunawezaje kuitofautisha?
Jibu rahisi ni kutoa muktadha. Tungeweza tu kujumuisha katika kipande cha data rejeleo la hati yake kuu, kwa mfano {”character”: “X”} katika hali hii. Hivyo sasa tungeweza kurejesha kwa usahihi data inayofaa ya Mhusika X, hata ikiwa pia tuna data ileile ya Wahusika Y na Z.
Hata hivyo, mbinu bora na inayoweza kutumika kwa upana zaidi ni kutengeneza muhtasari wa kipande wenye muktadha. Yaani, badala ya kutengeneza muhtasari wa kipande cha data pekee, tunaweza kuwasilisha hati kuu pamoja na kipande hicho ili kutengeneza muhtasari wa jumla wenye muktadha, unaoeleza jinsi kipande hiki kinavyohusiana na hati yake kuu, kwa mfano:
This chunk provides detailed statistics of … for character X. The chunk fits into the full document by showing X’s strength in attack speed…
This chunk provides detailed statistics of … for character Y. The chunk fits into the full document by showing Y’s boosted stats with her special ability…
This chunk provides detailed statistics of … for character Z. The chunk fits into the full document by showing Z’s stats that’s well suited as a tank in team matches…
Mbinu hii (iliyochochewa kwa kiasi na Anthropic) inaweza kuonekana kuwa kubwa kupita kiasi kwa mfano ulio hapo juu. Hata hivyo, inafaa sana kwa vipande vinavyoweza kufasiriwa vibaya “nje ya muktadha,” na pia hutoa mbinu moja inayofaa vipande vyote, huku ikidumisha mchakato nadhifu wa uhandisi.


Unapohitaji kuwa ~~mtu wa kudhibiti kila kitu~~ makini kabisa
Kwa kawaida tunapokea data ikiwa kamili, kisha tunaigawanya katika vipande kwa ajili ya mfumo wa RAG. Katika mfano huu tunaonyesha hali tofauti kidogo—data iliyogawanywa katika vipande vibaya. Hizi ni sehemu za nasibu kutoka katika kipande kimoja cha kimantiki ambazo zinahitaji kuunganishwa tena. Kipande cha kimantiki ni maudhui ambayo kwa kawaida yanapaswa kuwa pamoja, kama vile kijisehemu cha hati au aya yenye mtiririko mmoja wa mawazo.


Jaribio letu la kwanza ni kuingiza data yote katika mwito wa LLM, kuiomba ipange vipande inavyoona vinafaa kuwa pamoja, kisha irejeshe maudhui yaliyopangwa. LLM inapaswa kufanya kazi hii vizuri, sivyo? Naam, ndiyo na hapana.
Tumegundua katika matukio mengine kadhaa pia kwamba LLM huwa na tabia ya kufanya kazi kivivu na haziaminiki unapohitaji maudhui yote kwa usahihi, hasa muktadha unapokuwa mrefu. Na hilo linaeleweka kabisa. Lakini hilo lilifanya mbinu hii isifae kabisa kwa matumizi haya, kwa sababu tunahitaji maudhui sahihi neno kwa neno—bila mihtasari wala kuruka sehemu yoyote ya maudhui asili. Hatuwezi kukosa maelezo yoyote.
Bila shaka, upande wa “ndiyo” ni kwamba ilifanya kazi nzuri sana kuelewa maana na miundo ya vipande vilivyovunjika. Ila tu isikatae kunukuu maudhui halisi. Lo, jamani:/
Basi tunawezaje kutumia uwezo mzuri wa LLM huku tukiepuka maeneo ambayo haiaminiki? Tukamgeukia rafiki yetu wa tangu zamani: msimbo (yaani, kitendakazi maalum cha Python). Pamoja na modeli ya Pydantic “rahisi kupindukia.” Hili ndilo suluhisho:
Pitia sehemu moja baada ya nyingine huku ukidumisha kipande cha sasa cha kimantiki
Katika kila sehemu, uliza LLM: je, sehemu hii ni ya kipande cha sasa cha kimantiki? Ijibu ndiyo au hapana (kwa kufuata modeli ya Pydantic).
Ikiwa ndiyo, ambatisha sehemu hiyo kwenye kipande; ikiwa hapana, toa kipande cha sasa cha kimantiki kwa kuwa kimekamilika, kisha anza kipya kwa sehemu hiyo.


Bila shaka, tunatumia tokeni zaidi kidogo kuliko kuchakata maudhui yote mara moja. Lakini kwa matumizi haya, ambapo kuhifadhi maudhui halisi ndilo jambo muhimu zaidi, gharama hiyo ndogo ya ziada ilistahili.
Hili ni suluhisho rahisi sana, lakini linafuata kanuni muhimu: usahihi mkali unapohitajika, hatutaki kutegemea LLM pekee kwa sababu, hatimaye, hufanya kazi kwa uwezekano.
Msimbo au vitendakazi maalum pamoja na modeli za Pydantic vinaweza kutumiwa kupata matokeo yanayotabirika na kuaminika huku tukiendelea kutumia uwezo wa LLM kikamilifu.
Kuunda suluhisho la AI zalishi ni changamoto ya uhandisi sawa na ilivyo changamoto ya AI. Tunatumaini mifano hii imekupa msukumo wa kushughulikia changamoto zako za kipekee. Ili kusoma zaidi kuhusu suluhisho za AI zalishi zinazotanguliza uhandisi, soma makala yetu kuhusu ubunifu wa mifumo ya kiwakala inayotumia kipanga-njia.