Från RAG till filsystem
Jag snubblade över ett inlägg på LinkedIn med den där klassiska, överdrivna rubriken som blivit standard på plattformen: "I just burned my entire RAG pipeline 🔥".
(En annan favorit är “RAG is dead 💀”.)
Det lät som typiskt clickbait, men jag läste ändå. Det som fångade min uppmärksamhet var idén: ge språkmodellen en terminal och ett filsystem. Skippa RAG helt och hållet.
Konceptet är fortfarande nytt och materialet är begränsat, men det dyker upp på allt fler ställen. LangChain skriver om en liknande idé i sin "Deep Research"-utbildning, och LlamaIndex utforskar det med sina "SemTools".
Så, vad innebär det här i praktiken? Och kan man verkligen kasta ut hela sin RAG-pipeline?
Vad är RAG?
För att förstå alternativet behöver vi snabbt definiera RAG. Det står för Retrieval-Augmented Generation och innebär att vi hjälper en språkmodell (LLM) genom att först hämta relevant information från en extern källa (som en PDF-samling eller en databas). Informationen skickas sedan med till modellen som en del av kontexten när den ska generera ett svar.
Den vanligaste metoden är att använda en vektordatabas för att göra en semantisk sökning. Systemet letar efter textstycken som semantiskt matchar användarens fråga. Antagandet är att svaret på frågan finns i dessa textstycken.
Sedan dess har mer avancerade varianter utvecklats, som hybridsökning (både nyckelord och semantik) och "re-rankers" som sorterar sökresultaten efter relevans. Men kärnan har nästan alltid varit densamma: en vektordatabas och en semantisk sökning.
Ett filsystem istället för en vektordatabas
När branchen nu viskar om att använda ett filsystem menar de något helt annat. Istället för att söka efter ett specifikt svar, låter man modellen utforska hela landskapet av information, ungefär som en människa skulle göra.
Metoden bygger på de enorma kontextfönster som moderna modeller har, vilket gör den token heavy. Men den erbjuder en mer grundlig process som inte tar några genvägar.
Så här fungerar det:
Modellen får tillgång till ett virtuellt filsystem och en uppsättning enkla kommandon, inspirerade av hur en terminal fungerar:
ls(path): Lista alla filer och mappar i en viss path.
search(query): Sök efter filer eller mappar baserat på ett namn, alternativt efter begrepp i dokumenten.
read(file): Läs innehållet i en specifik fil.
write(content): Skriv eller lägg till innehåll i en fil.
När modellen får en uppgift (t.ex. "sammanfatta alla dokument av författare X från 2023") börjar den inte med en semantisk sökning. Istället resonerar den sig fram till vilka kommandon den ska använda. Den kanske börjar med ls('author/') för att se vilka författare som finns, sedan ls('författare/X/') för att se alla dokument, och därefter läser den varje relevant fil med read().
I takt med att modellen läser filer använder den write() för att spara ner intressanta slutsatser och citat i en ny "anteckningsfil". Denna fil byggs på stegvis och kan innehålla information från flera olika källor. Till slut använder modellen innehållet i sin anteckningsfil för att formulera det slutgiltiga svaret.
Idén känns logisk och efterliknar en process människan utför: vi letar efter filer, öppnar och läser dem, och för anteckningar.
Ovan är givetvis en förenkling av processen. Det finns variationer och fler komplexa delar i upplägget.
För- och nackdelar
Så, hur bra fungerar det? Det finns några saker att tänka på:
Metoden kräver flera anrop till en LLM för en enda fråga, vilket drar många tokens. Den passar bäst för scenarion där djupgående research är ett måste. En vanlig RAG-process är i jämförelse väldigt "lätt".
Stora kontextfönster är en förutsättning. Just nu är det främst de stora kommersiella modellerna som är bäst lämpade för detta. LlamaIndex har en smart lösning där modellen själv kan välja hur stor del av en fil den vill ladda in i kontexten.
Processen är långsammare än en vanlig RAG-sökning och lämpar sig därför bäst för uppgifter som inte kräver omedelbara svar, som att skapa en rapport eller en djupgående analys.
Manus AI är ett exempel från verkligheten
Ett av de bästa exemplen på detta i praktiken är Manus AI. I ett blogginlägg beskriver de hur de byggt ett multi-agentsystem som använder en liknande metod. De använder sub-agenter för att utföra specialiserade research-uppgifter och för att isolera kontext – något som minskar risken att förvirra modellen med irrelevant information.
Kontexten skrivs ner i en fil och skickas sedan vidare till nästa agent i kedjan.
En insikt att hämta här är att stora kontextfönster (som i Gemini 1.5 Pro) är fantastiska, men inte en magisk lösning på allt. En precis och genomtänkt hantering av kontext genom hela systemet är just nu avgörande för att bygga riktigt kapabla agentsystem.
Är RAG verkligen dött?
Så, för att återgå till den ursprungliga frågan: ska man bränna sin RAG-pipeline?
Självklart inte. Traditionell RAG är fortfarande en utmärkt och kostnadseffektiv metod för många användningsfall, särskilt för snabba frågor och svar.
Däremot visar det filsystemsbaserade tillvägagångssättet på en intressant utveckling. Fokus flyttas från enbart smartare hämtning av information till smartare bearbetning och hantering av kontext.
När priserna för tokens sjunker, mindre modeller blir bättre (och konsumerera mindre), och open-modeller kanske blir ännu mer kapabla, kan vi förvänta oss att se fler system som låter AI-agenter "tänka" och arbeta på det här mer metodiska sättet.