Udostępnij przez


Konwersacje wieloturnowe z agentem

W tym kroku samouczka pokazano, jak przeprowadzić wieloturnową rozmowę z agentem, który jest oparty na usłudze Azure OpenAI Chat Completion.

Ważne

Struktura agentów obsługuje wiele różnych typów agentów. W tym samouczku używany jest agent oparty na usłudze uzupełniania rozmów, ale wszystkie inne typy agentów działają w taki sam sposób. Aby uzyskać więcej informacji na temat innych typów agentów i sposobu ich konstruowania, zobacz Podręcznik użytkownika platformy Agent Framework.

Wymagania wstępne

Aby uzyskać wymagania wstępne i utworzyć agenta, zobacz krok Tworzenie i uruchamianie prostego agenta w tym samouczku.

Uruchamianie agenta z konwersacją wieloturnową

Agenci są bezstanowi, czyli nie zachowują żadnego stanu pomiędzy wywołaniami. Aby przeprowadzić wielosesyjną konwersację z agentem, należy utworzyć obiekt do przechowywania stanu konwersacji i przekazać ten obiekt do agenta podczas jego uruchamiania.

Aby utworzyć obiekt stanu konwersacji, wywołaj metodę GetNewThread w wystąpieniu agenta.

AgentThread thread = agent.GetNewThread();

Następnie można przekazać ten obiekt wątku do metod RunAsync i RunStreamingAsync w instancji agenta, razem z danymi wejściowymi użytkownika.

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));

Spowoduje to zachowanie stanu konwersacji między wywołaniami, a agent będzie mógł odwoływać się do poprzednich komunikatów wejściowych i odpowiedzi w konwersacji podczas odpowiadania na nowe dane wejściowe.

Ważne

Typ usługi używanej AIAgent przez program określa sposób przechowywania historii konwersacji. Na przykład w przypadku korzystania z usługi ChatCompletion, podobnie jak w tym przykładzie, historia konwersacji jest przechowywana w obiekcie AgentThread i wysyłana do usługi przy każdym wywołaniu. Z drugiej strony w przypadku korzystania z usługi Azure AI Agent historia konwersacji jest przechowywana w usłudze Azure AI Agent, a do usługi jest wysyłane tylko odwołanie do konwersacji przy każdym wywołaniu.

Agent jednoosobowy obsługujący wiele jednoczesnych rozmów

Istnieje możliwość posiadania wielu niezależnych konwersacji z tym samym wystąpieniem agenta, tworząc wiele AgentThread obiektów. Te wątki mogą być następnie używane do obsługi oddzielnych stanów konwersacji dla każdej konwersacji. Rozmowy będą w pełni niezależne od siebie, ponieważ agent nie przechowuje żadnego stanu wewnętrznie.

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));

Uruchamianie agenta z konwersacją wieloturnową

Agenci są bezstanowi, czyli nie zachowują żadnego stanu pomiędzy wywołaniami. Aby przeprowadzić wielosesyjną konwersację z agentem, należy utworzyć obiekt do przechowywania stanu konwersacji i przekazać ten obiekt do agenta podczas jego uruchamiania.

Aby utworzyć obiekt stanu konwersacji, wywołaj metodę get_new_thread() w wystąpieniu agenta.

thread = agent.get_new_thread()

Następnie można przekazać ten obiekt wątku do metod run i run_stream w instancji agenta, razem z danymi wejściowymi użytkownika.

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())

Spowoduje to zachowanie stanu konwersacji między wywołaniami, a agent będzie mógł odwoływać się do poprzednich komunikatów wejściowych i odpowiedzi w konwersacji podczas odpowiadania na nowe dane wejściowe.

Ważne

Typ usługi używanej przez agenta określa sposób przechowywania historii konwersacji. Na przykład w przypadku korzystania z usługi uzupełniania czatów, podobnie jak w tym przykładzie, historia konwersacji jest przechowywana w obiekcie AgentThread i wysyłana do usługi przy każdym wywołaniu. Z drugiej strony w przypadku korzystania z usługi Azure AI Agent historia konwersacji jest przechowywana w usłudze Azure AI Agent, a do usługi jest wysyłane tylko odwołanie do konwersacji przy każdym wywołaniu.

Agent jednoosobowy obsługujący wiele jednoczesnych rozmów

Istnieje możliwość posiadania wielu niezależnych konwersacji z tym samym wystąpieniem agenta, tworząc wiele AgentThread obiektów. Te wątki mogą być następnie używane do obsługi oddzielnych stanów konwersacji dla każdej konwersacji. Rozmowy będą w pełni niezależne od siebie, ponieważ agent nie przechowuje żadnego stanu wewnętrznie.

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())

Dalsze kroki