Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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())