En enkel teknik gör RAG ~32x minne effektivt! - Perplexity använder det i sitt sökindex - Azure använder det i sin sökpipeline - HubSpot använder det i sin AI-assistent Låt oss förstå hur man använder den i RAG-system (med kod):
Idag ska vi bygga ett RAG-system som frågar 36M+ vektorer i <30 ms med hjälp av binär kvantisering. Teknisk stack: - @llama_index för orkestrering - @milvusio som vektorn DB - @beam_cloud för serverlös distribution - @Kimi_Moonshot Kimi-K2 som LLM värd på Groq Låt oss bygga det!
Här är arbetsflödet: - Mata in dokument och generera binära inbäddningar. - Skapa ett binärt vektorindex och lagra inbäddningar i vektordatabasen. - Hämta top-k liknande dokument som användarens fråga. - LLM genererar ett svar baserat på ytterligare sammanhang. Låt oss genomföra detta!
0️⃣ Inställning Groq Innan vi börjar, lagra din Groq API-nyckel i en .env-fil och ladda den i din miljö för att utnyttja världens snabbaste AI-inferens. Kolla in det här 👇
1️⃣ Ladda data Vi matar in våra dokument med hjälp av LlamaIndex's katalogläsarverktyg. Den kan läsa olika dataformat inklusive Markdown, PDF-filer, Word-dokument, PowerPoint-kortlekar, bilder, ljud och video. Kolla in det här 👇
2️⃣ Generera binära inbäddningar Därefter genererar vi textinbäddningar (i float32) och konverterar dem till binära vektorer, vilket resulterar i en 32x minskning av minne och lagring. Detta kallas binär kvantisering. Kontrollera den här implementeringen 👇
3️⃣ Indexering av vektorer Efter att vår binära kvantisering är klar lagrar och indexerar vi vektorerna i en Milvus-vektordatabas för effektiv hämtning. Index är specialiserade datastrukturer som hjälper till att optimera prestanda för datahämtningsåtgärder. Kolla in det här 👇
4️⃣ Hämtning I hämtningsfasen gör vi följande: - Bädda in användarfrågan och tillämpa binär kvantisering på den. - Använd Hamming-avstånd som sökmått för att jämföra binära vektorer. - Hämta de 5 mest liknande bitarna. - Lägg till de hämtade segmenten i kontexten. Kolla in det här👇
5️⃣ Generering Slutligen bygger vi en genereringspipeline med hjälp av Kimi-K2-instruktionsmodellen, som betjänas på den snabbaste AI-inferensen av Groq. Vi anger både frågan och den hämtade kontexten i en promptmall och skickar den till LLM. Kolla in det här 👇
6️⃣ Distribution med Beam Beam möjliggör ultrasnabb serverlös distribution av alla typer av AI-arbetsflöden. Därför lindar vi in vår app i ett Streamlit-gränssnitt, anger Python-biblioteken och beräkningsspecifikationerna för containern. Slutligen distribuerar vi appen i några rader kod👇
7️⃣ Kör appen Beam startar containern och distribuerar vår streamlit-app som en HTTPS-server som enkelt kan nås från en webbläsare. Kolla in den här demon 👇
För att verkligen bedöma skalan och inferenshastigheten testar vi den distribuerade konfigurationen över PubMed-datasetet (36M+ vektorer). Vår app: - frågade 36M+ vektorer i <30ms. - genererade ett svar i <1s. Kolla in den här demon👇
Färdig! Vi har precis byggt den snabbaste RAG-stacken som utnyttjar BQ för effektiv hämtning och med hjälp av ultrasnabb serverlös distribution av vårt AI-arbetsflöde. Här är arbetsflödet igen för din referens 👇
Det är en wrap! Om du tyckte att det var insiktsfullt, dela det igen med ditt nätverk. Hitta mig → @_avichawla Varje dag delar jag med mig av handledningar och insikter om DS, ML, LLM och RAGs.
Avi Chawla
Avi Chawla4 aug. 14:33
En enkel teknik gör RAG ~32x minne effektivt! - Perplexity använder det i sitt sökindex - Azure använder det i sin sökpipeline - HubSpot använder det i sin AI-assistent Låt oss förstå hur man använder den i RAG-system (med kod):
695,78K