Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Cette étape du didacticiel vous montre comment avoir une conversation à plusieurs tours avec un agent, où l’agent est basé sur le service Azure OpenAI Chat Completion.
Important
Agent Framework prend en charge de nombreux types d’agents différents. Ce tutoriel utilise un agent basé sur un service d’achèvement de conversation, mais tous les autres types d’agents sont exécutés de la même façon. Pour plus d’informations sur d’autres types d’agents et sur la façon de les construire, consultez le guide de l’utilisateur agent Framework.
Prerequisites
Pour connaître les prérequis et la création de l’agent, consultez l’étape Créer et exécuter un agent simple dans ce didacticiel.
Exécution de l’agent avec une conversation à plusieurs tours
Les agents sont sans état et ne conservent aucun état interne entre les appels. Pour avoir une conversation multitour avec un agent, vous devez créer un objet pour contenir l’état de la conversation et transmettre cet objet à l’agent lors de son exécution.
Pour créer l’objet d’état de conversation, appelez la GetNewThread méthode sur l’instance de l’agent.
AgentThread thread = agent.GetNewThread();
Vous pouvez ensuite transmettre cet objet thread aux méthodes RunAsync et RunStreamingAsync de l’instance de l’agent, ainsi qu’à l’entrée utilisateur.
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));
Cela maintient l’état de la conversation entre les appels et l’agent pourra faire référence aux messages d’entrée et de réponse précédents dans la conversation lors de la réponse à une nouvelle entrée.
Important
Le type de service utilisé par l’utilisateur détermine la façon dont l’historique AIAgent des conversations est stocké. Par exemple, lors de l’utilisation d’un service ChatCompletion, comme dans cet exemple, l’historique des conversations est stocké dans l’objet AgentThread et envoyé au service sur chaque appel. Lorsque vous utilisez le service Azure AI Agent d’autre part, l’historique des conversations est stocké dans le service Azure AI Agent et seule une référence à la conversation est envoyée au service sur chaque appel.
Agent individuel avec plusieurs conversations
Il est possible d’avoir plusieurs conversations indépendantes avec la même instance d’agent, en créant plusieurs AgentThread objets.
Ces threads peuvent ensuite être utilisés pour conserver des états de conversation distincts pour chaque conversation.
Les conversations seront entièrement indépendantes les unes des autres, car l’agent ne conserve aucun état en interne.
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));
Exécution de l’agent avec une conversation à plusieurs tours
Les agents sont sans état et ne conservent aucun état interne entre les appels. Pour avoir une conversation multitour avec un agent, vous devez créer un objet pour contenir l’état de la conversation et transmettre cet objet à l’agent lors de son exécution.
Pour créer l’objet d’état de conversation, appelez la get_new_thread() méthode sur l’instance de l’agent.
thread = agent.get_new_thread()
Vous pouvez ensuite transmettre cet objet thread aux méthodes run et run_stream de l’instance de l’agent, ainsi qu’à l’entrée utilisateur.
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())
Cela maintient l’état de la conversation entre les appels et l’agent pourra faire référence aux messages d’entrée et de réponse précédents dans la conversation lors de la réponse à une nouvelle entrée.
Important
Le type de service utilisé par l’agent détermine la façon dont l’historique des conversations est stocké. Par exemple, lors de l’utilisation d’un service d’achèvement de conversation, comme dans cet exemple, l’historique des conversations est stocké dans l’objet AgentThread et envoyé au service sur chaque appel. Lorsque vous utilisez le service Azure AI Agent d’autre part, l’historique des conversations est stocké dans le service Azure AI Agent et seule une référence à la conversation est envoyée au service sur chaque appel.
Agent individuel avec plusieurs conversations
Il est possible d’avoir plusieurs conversations indépendantes avec la même instance d’agent, en créant plusieurs AgentThread objets.
Ces threads peuvent ensuite être utilisés pour conserver des états de conversation distincts pour chaque conversation.
Les conversations seront entièrement indépendantes les unes des autres, car l’agent ne conserve aucun état en interne.
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())