Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este paso del tutorial se muestra cómo tener una conversación multiturno con un agente, donde el agente se basa en el servicio de finalización de chat de Azure OpenAI.
Importante
Agent Framework admite muchos tipos diferentes de agentes. En este tutorial se usa un agente basado en un servicio de finalización de chat, pero todos los demás tipos de agente se ejecutan de la misma manera. Para obtener más información sobre otros tipos de agente y cómo construirlos, consulte la guía de usuario de Agent Framework.
Prerrequisitos
Para conocer los requisitos previos y crear el agente, consulte el paso Crear y ejecutar un agente sencillo en este tutorial.
Ejecución del agente con una conversación de varios turnos
Los agentes no tienen estado y no mantienen ningún estado internamente entre las llamadas. Para tener una conversación multiturno con un agente, debe crear un objeto para contener el estado de la conversación y pasar este objeto al agente al ejecutarlo.
Para crear el objeto de estado de conversación, llame al GetNewThread método en la instancia del agente.
AgentThread thread = agent.GetNewThread();
A continuación, puede pasar este objeto de subproceso a los métodos RunAsync y RunStreamingAsync de la instancia del agente, junto con la entrada del usuario.
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));
Esto mantendrá el estado de conversación entre las llamadas y el agente podrá hacer referencia a los mensajes de entrada y respuesta anteriores de la conversación al responder a la nueva entrada.
Importante
El tipo de servicio utilizado por el AIAgent determinará la manera en que se almacena el historial de conversaciones. Por ejemplo, cuando se usa un servicio ChatCompletion, como en este ejemplo, el historial de conversaciones se almacena en el objeto AgentThread y se envía al servicio en cada llamada. Por otro lado, cuando se usa el servicio Agente de Azure AI, el historial de conversaciones se almacena en el servicio Agente de Azure AI y solo se envía una referencia a la conversación al servicio en cada llamada.
Agente único con varias conversaciones
Es posible tener varias conversaciones independientes con la misma instancia del agente mediante la creación de varios AgentThread objetos.
Estos subprocesos se pueden usar para gestionar estados de conversación separados para cada conversación.
Las conversaciones serán totalmente independientes entre sí, ya que el agente no mantiene ningún estado internamente.
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));
Ejecución del agente con una conversación de varios turnos
Los agentes no tienen estado y no mantienen ningún estado internamente entre las llamadas. Para tener una conversación multiturno con un agente, debe crear un objeto para contener el estado de la conversación y pasar este objeto al agente al ejecutarlo.
Para crear el objeto de estado de conversación, llame al get_new_thread() método en la instancia del agente.
thread = agent.get_new_thread()
A continuación, puede pasar este objeto de subproceso a los métodos run y run_stream de la instancia del agente, junto con la entrada del usuario.
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())
Esto mantendrá el estado de conversación entre las llamadas y el agente podrá hacer referencia a los mensajes de entrada y respuesta anteriores de la conversación al responder a la nueva entrada.
Importante
El tipo de servicio que usa el agente determinará cómo se almacena el historial de conversaciones. Por ejemplo, cuando se usa un servicio de finalización de chat, como en este ejemplo, el historial de conversaciones se almacena en el objeto AgentThread y se envía al servicio en cada llamada. Por otro lado, cuando se usa el servicio Agente de Azure AI, el historial de conversaciones se almacena en el servicio Agente de Azure AI y solo se envía una referencia a la conversación al servicio en cada llamada.
Agente único con varias conversaciones
Es posible tener varias conversaciones independientes con la misma instancia del agente mediante la creación de varios AgentThread objetos.
Estos subprocesos se pueden usar para gestionar estados de conversación separados para cada conversación.
Las conversaciones serán totalmente independientes entre sí, ya que el agente no mantiene ningún estado internamente.
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())