Implementera RAG i ett promptflöde

Slutförd

När du har laddat upp data till Azure AI Foundry och skapat ett index för dina data med hjälp av integreringen med Azure AI Search kan du implementera RAG-mönstret med Prompt Flow för att skapa ett generativt AI-program.

Prompt Flow är ett utvecklingsramverk för att definiera flöden som samordnar interaktioner med en LLM.

Diagram över ett promptflöde.

Ett flöde börjar med en eller flera indata, vanligtvis en fråga eller uppmaning som anges av en användare, och vid iterativa konversationer chatthistoriken fram till denna punkt.

Flödet definieras sedan som en serie anslutna verktyg, som var och en utför en specifik åtgärd på indata och andra miljövariabler. Det finns flera typer av verktyg som du kan inkludera i ett promptflöde för att utföra uppgifter, till exempel:

  • Köra anpassad Python-kod
  • Söka efter datavärden i ett index
  • Skapa promptvarianter – så att du kan definiera flera versioner av en fråga om en stor språkmodell (LLM), varierande systemmeddelanden eller fråga formuleringar och jämföra och utvärdera resultaten från varje variant.
  • Skicka en uppmaning till en LLM för att generera resultat.

Slutligen har flödet en eller flera utdata, vanligtvis för att returnera de genererade resultaten från en LLM.

Använda RAG-mönstret i ett promptflöde

Nyckeln till att använda RAG-mönstret i ett promptflöde är att använda ett indexsökningsverktyg för att hämta data från ett index så att efterföljande verktyg i flödet kan använda resultaten för att utöka uppmaningen som används för att generera utdata från en LLM.

Diagram över ett promptflöde med ett indexsökningsverktyg.

Använda ett exempel för att skapa ett chattflöde

Prompt flow innehåller olika exempel som du kan använda som utgångspunkt för att skapa ett program. När du vill kombinera RAG och en språkmodell i ditt program kan du klona exemplet Multirundors frågesvar på din data.

Exemplet innehåller de element som krävs för att inkludera RAG och en språkmodell:

Skärmbild av chattflödet som skapats med Q&A-exemplet.

  1. Lägg till historiken i chattindata för att definiera en fråga i form av en kontextualiserad form av en fråga.
  2. Leta upp relevant information från dina data med hjälp av ditt sökindex.
  3. Generera promptkontexten med hjälp av hämtade data från indexet för att utöka frågan.
  4. Skapa promptvarianter genom att lägga till ett systemmeddelande och strukturera chatthistoriken.
  5. Skicka uppmaningen till en språkmodell som genererar ett svar på naturligt språk.

Nu ska vi utforska vart och ett av dessa element i detalj.

Ändra fråga med historik

Det första steget i flödet är en LLM-nod (Large Language Model) som tar chatthistoriken och användarens sista fråga och genererar en ny fråga som innehåller all nödvändig information. På så sätt genererar du mer kortfattade indata som bearbetas av resten av flödet.

Leta upp relevant information

Sedan använder du verktyget Indexsökning för att fråga det sökindex som du skapade med den integrerade Azure AI Search-funktionen och hitta relevant information från datakällan.

Dricks

Läs mer om indexsökningsverktyget.

Generera promptkontext

Utdata från indexsökningsverktyget är den hämtade kontext som du vill använda när du genererar ett svar till användaren. Du vill använda utdata i en fråga som skickas till en språkmodell, vilket innebär att du vill parsa utdata till ett mer lämpligt format.

Utdata från indexsökningsverktyget kan innehålla de främsta n resultaten (beroende på vilka parametrar du anger). När du genererar snabbkontexten kan du använda en Python-nod för att iterera över de hämtade dokumenten från datakällan och kombinera deras innehåll och källor till en dokumentsträng. Strängen används i uppmaningen som du skickar till språkmodellen i nästa steg i flödet.

Definiera promptvarianter

När du skapar den fråga som du vill skicka till din språkmodell kan du använda varianter för att representera olika promptinnehåll.

När du inkluderar RAG i chattflödet är målet att grunda chattrobotens svar. Förutom att hämta relevant kontext från din datakälla kan du också påverka grunderna i chattrobotens svar genom att instruera den att använda kontexten och sträva efter att vara faktisk.

Med promptvarianterna kan du ange varierande systemmeddelanden i prompten för att utforska vilket innehåll som ger mest grund.

Chatta med kontext

Slutligen använder du en LLM-nod för att skicka uppmaningen till en språkmodell för att generera ett svar med relevant kontext som hämtats från datakällan. Svaret från den här noden är också utdata från hela flödet.

När du har konfigurerat exempelchattflödet för att använda dina indexerade data och valfri språkmodell kan du distribuera flödet och integrera det med ett program för att erbjuda användarna en agentisk upplevelse.