Promptstroom ontwikkelen
Promptstroom is een ontwikkelhulpprogramma dat de ontwikkelingscyclus stroomlijnt van AI-toepassingen die worden aangedreven door LLM's (Large Language Models). In dit artikel leert u hoe u een promptstroom en een chatstroom maakt en ontwikkelt in Azure Machine Learning-studio.
Naarmate het momentum voor OP LLM gebaseerde AI-toepassingen groeit, biedt promptstroom een uitgebreide oplossing die het proces van prototypen, experimenteren, herhalen en implementeren van AI-toepassingen vereenvoudigt. Met behulp van promptstroom kunt u het volgende doen:
- Beheer uitvoerbare stromen met LLM's, prompts en Python-hulpprogramma's via een gevisualiseerde grafiek.
- Eenvoudig uw stromen testen, fouten opsporen en herhalen.
- Maak promptvarianten en vergelijk hun prestaties.
Uw promptstroom maken en ontwikkelen
Als u een promptstroom wilt maken, selecteert u de promptstroom in de Azure Machine Learning-studio linkernavigatiebalk en selecteert u Maken op de pagina Promptstroom.
In het scherm Een nieuwe stroom maken kunt u een stroom maken door:
- Een standaardstroom, chat of evaluatie maken op basis van een sjabloon.
- Een beschikbaar voorbeeld klonen vanuit de galerie Verkennen.
- Een bestaande stroom importeren uit lokale bestanden of een bestandsshare.
Als u een stroom wilt maken, selecteert u Maken of Klonen op de gewenste stroomkaart. In het volgende schermvenster kunt u desgewenst de naam van de nieuwe stroom wijzigen en vervolgens Maken of Klonen selecteren. De nieuwe stroom wordt geopend in de ontwerpgebruikersinterface.
Compute-sessie
Voordat u begint met ontwerpen, start u de rekensessie door de rekensessie starten boven aan de pagina stroomcreatie te selecteren. Een rekensessie is nodig voor stroomuitvoering. De rekensessie beheert de rekenresources die nodig zijn om de toepassing uit te voeren, inclusief een Docker-installatiekopieën die alle benodigde afhankelijkheidspakketten bevat.
Ontwerppagina
Het kan enkele minuten duren voordat de rekensessie wordt gestart. Terwijl de rekensessie wordt gestart, inspecteert u de onderdelen van de pagina voor het ontwerpen van stromen.
De weergave Stroom of afgevlakt aan de linkerkant van de pagina is het belangrijkste werkgebied waar u de stroom maakt. In de platte weergave kunt u knooppunten, hulpprogramma's, prompts en invoer bewerken; knooppunten of de hele stroom uitvoeren; en definieert en bekijkt uitvoer.
In bestanden rechtsboven ziet u de map en de bestandsstructuur van de stroom. Elke stroom heeft een map die een flow.dag.yaml-bestand , broncodebestanden en systeemmappen bevat. U kunt bestanden toevoegen, bewerken, verwijderen, uploaden of downloaden voor testen, implementatie of samenwerking.
In de grafiekweergave rechtsonder wordt de stroomstructuur gevisualiseerd. U kunt in- of uitzoomen of automatische indeling gebruiken. U kunt deze weergave niet rechtstreeks bewerken, maar u kunt een knooppunt selecteren dat u wilt zoeken en bewerken in de afgevlakte weergave.
Stroominvoer en -uitvoer
In de secties Invoer en uitvoer kunt u invoer en uitvoer weergeven, toevoegen of verwijderen en bewerken.
Stroominvoer zijn de gegevens die als geheel in de stroom worden doorgegeven. U definieert het invoerschema door de naam en het type op te geven en u stelt de waarde van elke invoer in om de stroom te testen. U kunt verwijzen naar de stroominvoer in de stroomknooppunten met behulp van
${input.<input name>}
.Stroomuitvoer is de gegevens die door de stroom als geheel worden geproduceerd, waarin de resultaten van de stroomuitvoering worden samengevat. U kunt de uitvoerwaarde van de stroom definiëren door te verwijzen naar één knooppuntuitvoer met behulp van de syntaxis
${<node name>.output}
of${<node name>.output.<field name>}
. U kunt de uitvoerresultatentabel weergeven en exporteren nadat een stroomuitvoering of batchuitvoering is voltooid.
Stroomhulpprogramma's
In een stroom kunt u verschillende soorten hulpprogramma's gebruiken, zoals LLM, Python, Prompt, Serp-API en Content Safety. Als u een hulpprogramma selecteert, wordt een nieuw knooppunt voor dat hulpprogramma toegevoegd aan het einde van de stroom. U moet de naam van het knooppunt opgeven en de benodigde configuraties instellen. U kunt de besturingselementen voor knooppunten gebruiken om de positie van het knooppunt in de stroom te wijzigen.
Knooppuntinvoer en -uitvoer
De hulpprogramma's LLM en Prompt gebruiken Jinja als temping-taal om de prompt dynamisch te genereren. U kunt bijvoorbeeld uw {{}}
invoernaam gebruiken in plaats van vaste tekst te gebruiken, zodat deze direct kan worden vervangen.
U kunt knooppuntinvoer en -uitvoer op de volgende manieren instellen:
- Stel de invoerwaarde rechtstreeks in.
- Verwijs naar de stroominvoer met behulp van
${input.<input name>}
. - Verwijzen naar de uitvoer van het knooppunt met behulp van
${<node name>.output}
of${<node name>.output.<field name>}
.
Nadat u klaar bent met het opstellen van een prompt of Python-script, selecteert u Invoer valideren en parseren voor het systeem om de knooppuntinvoer automatisch te parseren op basis van de promptsjabloon en python-functie-invoer.
U kunt knooppunten koppelen door te verwijzen naar knooppuntuitvoer. U kunt bijvoorbeeld verwijzen naar de uitvoer van het LLM-knooppunt in de Python-knooppuntinvoer, zodat het Python-knooppunt de uitvoer van het LLM-knooppunt verbruikt. In de grafiekweergave ziet u de twee knooppunten die aan elkaar zijn gekoppeld.
LLM-knooppunten
Voor een Azure OpenAI LLM-knooppunt moet u Verbinding, API en deployment_name selecteren en de prompt instellen. U gebruikt de verbinding om geheime sleutels of andere gevoelige referenties die vereist zijn voor interactie met Azure OpenAI veilig op te slaan en te beheren.
Als u nog geen verbinding hebt, maakt u deze voordat u het LLM-knooppunt toevoegt en controleert u of de Azure OpenAI-resource een chat - of voltooiingsimplementatie heeft. Zie Een verbinding instellen en een resource maken en een model implementeren met behulp van Azure OpenAI voor meer informatie.
Python-knooppunten
Als u het Python-hulpprogramma wilt gebruiken, moet u het Python-script, de invoerwaarde en andere configuraties instellen. Een nieuw Python-knooppunt biedt de volgende standaard Python-functie waarmee invoer en uitvoer worden gedefinieerd.
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
Voorwaardelijk besturingselement
Promptstroom biedt voorwaardelijk beheer, waarmee u voorwaarden kunt instellen voor de uitvoering van een knooppunt in een stroom.
Voorwaardelijk beheer biedt de mogelijkheid om elk knooppunt in een stroom te koppelen aan een activeringsconfiguratie. Deze configuratie is een when
instructie die bepaalt wanneer een knooppunt moet worden uitgevoerd. De kracht van deze functie wordt gerealiseerd in complexe stromen waarbij de uitvoering van bepaalde taken afhankelijk is van het resultaat van eerdere taken. Met behulp van voorwaardelijk beheer kunt u uw specifieke knooppunten zo configureren dat deze alleen worden uitgevoerd wanneer aan de opgegeven voorwaarden wordt voldaan.
Stel de activeringsconfiguratie voor een knooppunt in door de knop Configuratie activeren in de knooppuntkaart te selecteren. Voeg een When-instructie toe en stel de voorwaarde in. U kunt de voorwaarden instellen door te verwijzen naar de stroominvoer of een knooppuntuitvoer. U kunt bijvoorbeeld de voorwaarde ${input.<input name>}
of ${<node name>.output}
als specifieke waarden instellen. Als niet aan de voorwaarde wordt voldaan, wordt het knooppunt overgeslagen en wordt de status van het knooppunt weergegeven als Overgeslagen.
Een stroom testen
U kunt een stroom testen door één knooppunt uit te voeren of de hele stroom uit te voeren.
- Als u één knooppunt wilt uitvoeren, selecteert u het pictogram Uitvoeren op de knooppuntkaart. Wanneer de uitvoering van het knooppunt is voltooid, kunt u snel de resultaten controleren in de sectie Uitvoer van knooppunten.
- Als u de hele stroom wilt uitvoeren, selecteert u Uitvoeren boven aan de pagina.
Stroomuitvoer
Nadat u Uitvoeren hebt geselecteerd om de stroom uit te voeren, ziet u de uitvoeringsstatus in de banner boven aan de pagina. Selecteer Uitvoer weergeven in de bovenste banner of de bovenste menubalk om gedetailleerde invoer-, uitvoer-, stroomuitvoerings- en indelingsgegevens weer te geven.
Nadat de stroomuitvoering is voltooid, kunt u Uitvoer weergeven selecteren om alle historische uitvoer op het scherm Uitvoer te controleren.
Selecteer het tabblad Traceren op het scherm Uitvoer om een grafiek weer te geven die informatie bevat over de duur en de bijbehorende tokenkosten van de stroom. Selecteer stroom onder de naam van het knooppunt om gedetailleerde informatie over stroomoverzicht weer te geven in het rechterdeelvenster.
Vouw de stroom uit en selecteer een stap om gedetailleerde informatie voor die stap weer te geven. U kunt de duur zien van elke uitvoering van knooppunten in de spanstructuur. Zie Trace Span Specification voor meer informatie.
Een chatstroom ontwikkelen
Een chatstroom is een specifiek type promptstroom dat is ontworpen voor de ontwikkeling van gesprekstoepassingen. De chatstroom bouwt voort op de standaardstroommogelijkheden om verbeterde ondersteuning te bieden voor chatinvoer/-uitvoer en chatgeschiedenis. Met behulp van de chatstroom kunt u eenvoudig een chatbot maken die chatinvoer en -uitvoer verwerkt.
Als u een chatstroom wilt maken, selecteert u in het scherm Een nieuwe stroom maken de optie Maken op de chatstroomkaart of selecteert u Chat in de galerie Verkennen en kloont u een van de beschikbare stromen.
Op een ontwerppagina van een chatstroom wordt de chatstroom gelabeld met een chatlabel om deze te onderscheiden van standaard- en evaluatiestromen. Als u een chatstroom wilt testen, selecteert u Chat boven aan de pagina om een chatvak voor een gesprek te openen.
Chatinvoer, chatuitvoer en chatgeschiedenis
De belangrijkste elementen die een chatstroom onderscheiden van een standaardstroom zijn de chatinvoer, chatgeschiedenis en chatuitvoer. Chatgeschiedenis en chatinvoer zijn vereist in chatstromen.
Chatinvoer verwijst naar de berichten of query's die gebruikers naar de chatbot hebben verzonden. Het effectief verwerken van chatinvoer is van cruciaal belang voor een geslaagd gesprek, omdat het gaat om het begrijpen van gebruikersintenties, het extraheren van relevante informatie en het activeren van de juiste antwoorden.
Chatgeschiedenis is de record van alle interacties tussen de gebruiker en de chatbot, inclusief gebruikersinvoer en door AI gegenereerde uitvoer. Het onderhouden van de chatgeschiedenis is essentieel voor het bijhouden van de gesprekscontext en ervoor zorgen dat de AI contextuele relevante antwoorden kan genereren.
Chat-uitvoer verwijst naar de door AI gegenereerde berichten die naar gebruikers worden verzonden als reactie op hun invoer. Het genereren van contextueel geschikte en aantrekkelijke chatuitvoer is essentieel voor een positieve gebruikerservaring.
Een chatstroom kan meerdere invoer hebben. In de sectie Invoer van chatstroom markeert u een van de invoerwaarden als chatinvoer en vult u de chatinvoerwaarde in door een vraag in te voeren in het chatvak.
Chatgeschiedenis beheren
Om u te helpen de chatgeschiedenis te beheren, chat_history
is de sectie Invoer gereserveerd voor het weergeven van de chatgeschiedenis. U kunt niet handmatig bewerken chat_history
.
Chatgeschiedenis is gestructureerd als een lijst met invoer en uitvoer. Alle interacties in het chatvak, inclusief invoer van gebruikerschats, gegenereerde chatuitvoer en andere stroominvoer en uitvoer, worden automatisch opgeslagen in de chatgeschiedenis. De volgende code toont de structuur van de chatgeschiedenis.
[
{
"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"
}
}
]
Notitie
Wanneer u tests uitvoert in het chatvak, slaat u automatisch de chatgeschiedenis op. Voor batchuitvoeringen moet u de chatgeschiedenis opnemen in de gegevensset voor batchuitvoering. Als er geen chatgeschiedenis beschikbaar is, stelt u de chat_history
lijst in op een lege lijst []
in de gegevensset voor batchuitvoering.
Als u eerdere interacties wilt ophalen, raadpleegt chat_history
u deze in uw prompts. U kunt vervolgens verwijzen naar eerdere invoer en uitvoer om contextafhankelijk relevante antwoorden te maken. Het opnemen van chatgeschiedenis in uw prompts is essentieel voor het maken van contextbewuste en aantrekkelijke chatbotreacties.
U kunt de Jinja-taal voor lus grammatica gebruiken om een lijst met invoer en uitvoer weer te geven van chat_history
.
{% for item in chat_history %}
user:
{{item.inputs.question}}
assistant:
{{item.outputs.answer}}
{% endfor %}
Testen met het chatvak
Het chatvak biedt een interactieve manier om uw chatstroom te testen door een gesprek met uw chatbot te simuleren. Ga als volgt te werk om uw chatstroom te testen met behulp van het chatvak:
- Selecteer Chat om de zijbalk chat te openen.
- Voer testvragen in het chatvak onder aan het scherm in om deze naar de chatbot te verzenden.
- Controleer de reacties van de chatbot om ervoor te zorgen dat ze contextueel geschikt en nauwkeurig zijn.
- Selecteer Uitvoer weergeven bovenaan de ontwerppagina om snel chatinvoer, uitvoer en geschiedenis weer te geven en fouten op te sporen.
- Selecteer in het scherm Uitvoer het tabblad Tracering en selecteer vervolgens stroom om gedetailleerde informatie over stroomoverzicht weer te geven in het rechterdeelvenster. Vouw de stroom uit en selecteer een stap om gedetailleerde informatie voor die stap weer te geven.