Dela via


Konversationer med flera omgångar med en agent

Det här handledningssteget visar hur du för en flerstegs konversation med en agent, där agenten bygger på Azure OpenAI Chat Completion-tjänsten.

Viktigt!

Agent Framework stöder många olika typer av agenter. I den här handledningen används en agent baserad på en tjänst för chattavslutning, men alla andra agenttyper körs på samma sätt. Mer information om andra agenttyper och hur du skapar dem finns i användarhandboken för Agent Framework.

Förutsättningar

Förutsättningar och att skapa agenten finns i steget Skapa och kör en enkel agent i den här självstudien.

Köra agenten med en konversation med flera omgångar

Agenter är tillståndslösa och underhåller inte något tillstånd internt mellan anrop. Om du vill ha en konversation med flera turer med en agent måste du skapa ett objekt för att lagra konversationstillståndet och skicka det här objektet till agenten när du kör det.

Om du vill skapa konversationstillståndsobjektet anropar du GetNewThread metoden på agentinstansen.

AgentThread thread = agent.GetNewThread();

Du kan sedan skicka det här trådobjektet till metoderna RunAsync och RunStreamingAsync på agentinstansen, tillsammans med användarindata.

Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", thread));
Console.WriteLine(await agent.RunAsync("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", thread));

Detta behåller konversationstillståndet mellan anropen och agenten kan referera till tidigare indata- och svarsmeddelanden i konversationen när de svarar på nya indata.

Viktigt!

Vilken typ av tjänst som används av AIAgent avgör hur konversationshistorik lagras. När du till exempel använder en ChatCompletion-tjänst, som i det här exemplet, lagras konversationshistoriken i AgentThread-objektet och skickas till tjänsten vid varje anrop. När du använder Azure AI Agent-tjänsten lagras däremot konversationshistoriken i Azure AI Agent-tjänsten och endast en referens till konversationen skickas till tjänsten vid varje anrop.

Enskild agent med flera konversationer

Det går att ha flera oberoende konversationer med samma agentinstans genom att skapa flera AgentThread objekt. Dessa trådar kan sedan användas för att upprätthålla separata konversationstillstånd för varje konversation. Konversationerna är helt oberoende av varandra, eftersom agenten inte upprätthåller något tillstånd internt.

AgentThread thread1 = agent.GetNewThread();
AgentThread thread2 = agent.GetNewThread();
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", thread1));
Console.WriteLine(await agent.RunAsync("Tell me a joke about a robot.", thread2));
Console.WriteLine(await agent.RunAsync("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", thread1));
Console.WriteLine(await agent.RunAsync("Now add some emojis to the joke and tell it in the voice of a robot.", thread2));

Köra agenten med en konversation med flera omgångar

Agenter är tillståndslösa och underhåller inte något tillstånd internt mellan anrop. Om du vill ha en konversation med flera turer med en agent måste du skapa ett objekt för att lagra konversationstillståndet och skicka det här objektet till agenten när du kör det.

Om du vill skapa konversationstillståndsobjektet anropar du get_new_thread() metoden på agentinstansen.

thread = agent.get_new_thread()

Du kan sedan skicka det här trådobjektet till metoderna run och run_stream på agentinstansen, tillsammans med användarindata.

async def main():
    result1 = await agent.run("Tell me a joke about a pirate.", thread=thread)
    print(result1.text)

    result2 = await agent.run("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", thread=thread)
    print(result2.text)

asyncio.run(main())

Detta behåller konversationstillståndet mellan anropen och agenten kan referera till tidigare indata- och svarsmeddelanden i konversationen när de svarar på nya indata.

Viktigt!

Vilken typ av tjänst som används av agenten avgör hur konversationshistorik lagras. När du till exempel använder en tjänst för att slutföra chatten, som i det här exemplet, lagras konversationshistoriken i AgentThread-objektet och skickas till tjänsten vid varje anrop. När du använder Azure AI Agent-tjänsten lagras däremot konversationshistoriken i Azure AI Agent-tjänsten och endast en referens till konversationen skickas till tjänsten vid varje anrop.

Enskild agent med flera konversationer

Det går att ha flera oberoende konversationer med samma agentinstans genom att skapa flera AgentThread objekt. Dessa trådar kan sedan användas för att upprätthålla separata konversationstillstånd för varje konversation. Konversationerna är helt oberoende av varandra, eftersom agenten inte upprätthåller något tillstånd internt.

async def main():
    thread1 = agent.get_new_thread()
    thread2 = agent.get_new_thread()

    result1 = await agent.run("Tell me a joke about a pirate.", thread=thread1)
    print(result1.text)

    result2 = await agent.run("Tell me a joke about a robot.", thread=thread2)
    print(result2.text)

    result3 = await agent.run("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", thread=thread1)
    print(result3.text)

    result4 = await agent.run("Now add some emojis to the joke and tell it in the voice of a robot.", thread=thread2)
    print(result4.text)

asyncio.run(main())

Nästa steg