Utveckla promptflöde
Prompt flow är ett utvecklingsverktyg som effektiviserar utvecklingscykeln för AI-program som drivs av stora språkmodeller (LLM). I den här artikeln får du lära dig hur du skapar och utvecklar ett snabbflöde och ett chattflöde i Azure Machine Learning-studio.
I takt med att drivkraften för LLM-baserade AI-program växer ger prompt flow en omfattande lösning som förenklar processen med prototyper, experimentering, iterering och distribution av AI-program. Genom att använda promptflöde kan du:
- Dirigera körbara flöden med LLM:er, prompter och Python-verktyg via ett visualiserat diagram.
- Testa, felsök och iterera enkelt dina flöden.
- Skapa promptvarianter och jämför deras prestanda.
Skapa och utveckla ditt promptflöde
Om du vill skapa ett promptflöde väljer du Fråga flöde i det Azure Machine Learning-studio vänstra navigeringsfältet och väljer sedan Skapa på sidan Fråga flöde.
På skärmen Skapa ett nytt flöde kan du skapa ett flöde genom att:
- Skapa ett standard-, chatt- eller utvärderingsflöde från en mall.
- Klona ett tillgängligt exempel från galleriet Utforska.
- Importera ett befintligt flöde från lokala filer eller en filresurs.
Om du vill skapa ett flöde väljer du Skapa eller Klona på det flödeskort som du vill använda. I nästa skärmfönster kan du ändra det nya flödesnamnet om du vill och sedan välja Skapa eller Klona. Det nya flödet öppnas i redigeringsgränssnittet.
Beräkningssession
Innan du börjar redigera startar du beräkningssessionen genom att välja Starta beräkningssession överst på flödesredigeringssidan. En beräkningssession krävs för flödeskörning. Beräkningssessionen hanterar de beräkningsresurser som krävs för att programmet ska kunna köras, inklusive en Docker-avbildning som innehåller alla nödvändiga beroendepaket.
Redigeringssida
Det kan ta några minuter att starta beräkningssessionen. När beräkningssessionen startas kontrollerar du delarna på flödesredigeringssidan.
Vyn Flöde eller platta ut till vänster på sidan är det huvudsakliga arbetsområde där du skapar flödet. I vyn platta ut kan du redigera noder, verktyg, uppmaningar och indata. kör noder eller hela flödet. och definiera och visa utdata.
Filer längst upp till höger visar flödets mapp och filstruktur. Varje flöde har en mapp som innehåller en flow.dag.yaml-fil , källkodsfiler och systemmappar. Du kan lägga till, redigera, ta bort, ladda upp eller ladda ned filer för testning, distribution eller samarbete.
Diagramvyn längst ned till höger visualiserar flödesstrukturen. Du kan zooma in eller ut eller använda automatisk layout. Du kan inte redigera den här vyn direkt, men du kan välja en nod för att hitta och redigera den i vyn platta ut.
Flödesindata och utdata
I avsnitten Indata och utdata kan du visa, lägga till eller ta bort och redigera indata och utdata.
Flödesindata är de data som skickas till flödet som helhet. Du definierar indataschemat genom att ange namn och typ, och du anger värdet för varje indata för att testa flödet. Du kan referera till flödesindata i flödesnoderna med hjälp
${input.<input name>}
av .Flödesutdata är de data som genereras av flödet som helhet, vilket sammanfattar resultatet av flödeskörningen. Du kan definiera flödets utdatavärde genom att referera till en enskild nodutdata med hjälp av syntaxen
${<node name>.output}
eller${<node name>.output.<field name>}
. Du kan visa och exportera resultattabellen när en flödeskörning eller batchkörning har slutförts.
Flödesverktyg
I ett flöde kan du använda olika typer av verktyg, till exempel LLM, Python, Prompt, Serp API och Content Safety. När du väljer ett verktyg läggs en ny nod för verktyget till i slutet av flödet. Du måste ange nodnamnet och ange nödvändiga konfigurationer. Du kan använda nodkontrollerna för att ändra nodens position i flödet.
Nodindata och utdata
Verktygen LLM och Prompt använder Jinja som ett mallspråk för att dynamiskt generera prompten. Du kan till exempel använda {{}}
för att omsluta indatanamnet i stället för att använda fast text, så att det kan ersättas i farten.
Du kan ange nodindata och utdata på följande sätt:
- Ange indatavärdet direkt.
- Referera till flödesindata med hjälp av
${input.<input name>}
. - Referera till nodutdata med eller
${<node name>.output}
${<node name>.output.<field name>}
.
När du har skrivit ett prompt- eller Python-skript väljer du Verifiera och parsa indata för systemet för att automatiskt parsa nodindata baserat på promptmallen och Python-funktionsindata.
Du kan länka noder genom att referera till nodutdata. Du kan till exempel referera till LLM-nodens utdata i Python-nodens indata så att Python-noden använder LLM-nodens utdata. I graph-vyn kan du se de två noderna länkade tillsammans.
LLM-noder
För en Azure OpenAI LLM-nod måste du välja Anslutning, Api och deployment_name och ange prompten. Du använder anslutningen för att lagra och hantera hemliga nycklar på ett säkert sätt eller andra känsliga autentiseringsuppgifter som krävs för att interagera med Azure OpenAI.
Om du inte redan har en anslutning skapar du den innan du lägger till LLM-noden och kontrollerar att Azure OpenAI-resursen har en chatt - eller slutförandedistribution . Mer information finns i Konfigurera en anslutning och Skapa en resurs och distribuera en modell med Azure OpenAI.
Python-noder
Om du vill använda Python-verktyget måste du ange Python-skriptet, indatavärdet och andra konfigurationer. En ny Python-nod innehåller följande Python-funktion som definierar indata och utdata.
from promptflow import tool
# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
@tool
def my_python_tool(input1: str) -> str:
return 'hello ' + input1
Villkorsstyrd kontroll
Prompt flow erbjuder villkorsstyrd kontroll, vilket gör att du kan ange villkor för körning av alla noder i ett flöde.
Villkorsstyrd kontroll ger möjlighet att associera varje nod i ett flöde med en aktiverad konfiguration. Den här konfigurationen är en when
instruktion som avgör när en nod ska köras. Kraften i den här funktionen realiseras i komplexa flöden där körningen av vissa uppgifter beror på resultatet av tidigare uppgifter. Genom att använda villkorsstyrd kontroll kan du konfigurera dina specifika noder så att de endast körs när de angivna villkoren uppfylls.
Ange den aktiverade konfigurationen för en nod genom att välja knappen Aktivera konfiguration på nodkortet. Lägg till en When-instruktion och ange villkoret. Du kan ange villkoren genom att referera till flödesindata eller nodutdata. Du kan till exempel ange villkoret ${input.<input name>}
eller ${<node name>.output}
som specifika värden. Om villkoret inte uppfylls hoppas noden över och nodstatusen visas som Kringgåd.
Testa ett flöde
Du kan testa ett flöde genom att köra en enskild nod eller köra hela flödet.
- Om du vill köra en enskild nod väljer du ikonen Kör på nodkortet. När noden körs kan du snabbt kontrollera resultatet i avsnittet Utdata för noden.
- Om du vill köra hela flödet väljer du Kör överst på sidan.
Flödesutdata
När du har valt Kör för att köra flödet kan du se körningsstatusen i banderollen överst på sidan. Välj Visa utdata i den övre banderollen eller den översta menyraden för att visa detaljerad information om indata, utdata, flödeskörning och orkestrering.
När flödeskörningen är klar kan du välja Visa utdata för att kontrollera alla historiska utdata på skärmen Utdata .
Välj fliken Spårning på skärmen Utdata för att se ett diagram som innehåller information om varaktigheten och den associerade tokenkostnaden för flödet. Välj flöde under nodnamn för att se detaljerad flödesöversiktsinformation i den högra rutan.
Expandera flödet och välj alla steg för att se detaljerad information för det steget. Du kan se varaktigheten för varje nodkörning i span-trädet. Mer information finns i Specifikation för spårningsintervall.
Utveckla ett chattflöde
Ett chattflöde är en specifik typ av promptflöde som är utformat för utveckling av konversationsprogram. Chattflödet bygger på standardflödesfunktionerna för att ge förbättrat stöd för chattindata/utdata och chatthistorik. Genom att använda chattflöde kan du enkelt skapa en chattrobot som hanterar indata och utdata från chatten.
Om du vill skapa ett chattflöde går du till skärmen Skapa ett nytt flöde , väljer Skapa på chattflödeskortet eller väljer Chatta i galleriet Utforska och klonar ett av de tillgängliga flödena.
På en redigeringssida för chattflöden taggas chattflödet med en chattetikett för att skilja det från standard- och utvärderingsflöden. Om du vill testa ett chattflöde väljer du Chatt överst på sidan för att öppna en chattruta för konversation.
Chattindata, chattutdata och chatthistorik
De viktigaste elementen som skiljer ett chattflöde från ett standardflöde är chattindata, chatthistorik och chattutdata. Chatthistorik och chattindata krävs i chattflöden.
Chattindata refererar till de meddelanden eller frågor som skickas av användare till chattroboten. Att effektivt hantera chattindata är avgörande för en lyckad konversation, eftersom det handlar om att förstå användarnas avsikter, extrahera relevant information och utlösa lämpliga svar.
Chatthistorik är en post för alla interaktioner mellan användaren och chattroboten, inklusive både användarindata och AI-genererade utdata. Det är viktigt att upprätthålla chatthistoriken för att hålla reda på konversationskontexten och se till att AI:n kan generera kontextuellt relevanta svar.
Chattutdata refererar till de AI-genererade meddelanden som skickas till användare som svar på deras indata. Att generera kontextuellt lämpliga och engagerande chattutdata är viktigt för en positiv användarupplevelse.
Ett chattflöde kan ha flera indata. I avsnittet Indata för chattflöde markerar du en av indata som chattindata och fyller i värdet för chattindata genom att ange en fråga i rutan Chatt.
Hantera chatthistorik
För att hjälpa dig att hantera chatthistoriken chat_history
är avsnittet Indata reserverat för att representera chatthistorik. Du kan inte redigera chat_history
manuellt .
Chatthistoriken är strukturerad som en lista över indata och utdata. Alla interaktioner i chattrutan, inklusive användarindata, genererade chattutdata och andra flödesindata och utdata, lagras automatiskt i chatthistoriken. Följande kod visar strukturen för chatthistoriken.
[
{
"inputs": {
"<flow input 1>": "xxxxxxxxxxxxxxx",
"<flow input 2>": "xxxxxxxxxxxxxxx",
"<flow input N>""xxxxxxxxxxxxxxx"
},
"outputs": {
"<flow output 1>": "xxxxxxxxxxxx",
"<flow output 2>": "xxxxxxxxxxxxx",
"<flow output M>": "xxxxxxxxxxxxx"
}
},
{
"inputs": {
"<flow input 1>": "xxxxxxxxxxxxxxx",
"<flow input 2>": "xxxxxxxxxxxxxxx",
"<flow input N>""xxxxxxxxxxxxxxx"
},
"outputs": {
"<flow output 1>": "xxxxxxxxxxxx",
"<flow output 2>": "xxxxxxxxxxxxx",
"<flow output M>": "xxxxxxxxxxxxx"
}
}
]
Kommentar
När du utför tester i chattrutan sparar du automatiskt chatthistoriken. För batchkörningar måste du inkludera chatthistorik i batchkörningsdatauppsättningen. Om det inte finns någon tillgänglig chatthistorik anger du chat_history
till en tom lista []
i batchkörningsdatauppsättningen.
Om du vill hämta tidigare interaktioner refererar chat_history
du till i dina frågor. Du kan sedan referera till tidigare indata och utdata för att skapa kontextuellt relevanta svar. Att införliva chatthistorik i dina frågor är viktigt för att skapa sammanhangsmedvetna och engagerande chattrobotsvar.
Du kan använda jinjaspråket för loop grammatik för att visa en lista över indata och utdata från chat_history
.
{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}
Testa med chattrutan
Chattrutan ger ett interaktivt sätt att testa ditt chattflöde genom att simulera en konversation med din chattrobot. Så här testar du chattflödet med hjälp av chattrutan:
- Välj Chatt för att öppna sidofältet Chatt .
- Ange testfrågor i chattrutan längst ned på skärmen för att skicka dem till chattroboten.
- Granska chattrobotens svar för att säkerställa att de är sammanhangsberoende lämpliga och korrekta.
- Välj Visa utdata överst på redigeringssidan för att snabbt visa och felsöka chattindata, utdata och historik.
- På skärmen Utdata väljer du fliken Spårning och väljer sedan flöde för att se detaljerad flödesöversiktsinformation i den högra rutan. Expandera flödet och välj alla steg för att se detaljerad information för det steget.