Compartilhar via


Conversas com vários turnos com um agente

Esta etapa do tutorial mostra como ter uma conversa de múltiplas etapas com um agente, em que o agente é construído com o serviço Chat Completion do Azure OpenAI.

Importante

O Agent Framework dá suporte a muitos tipos diferentes de agentes. Este tutorial usa um agente com base em um serviço de Conclusão de Chat, mas todos os outros tipos de agente são executados da mesma maneira. Para obter mais informações sobre outros tipos de agente e como construí-los, consulte o guia do usuário do Agent Framework.

Pré-requisitos

Para pré-requisitos e criação do agente, consulte a etapa Criar e executar um agente simples neste tutorial.

Executando o agente com uma conversa de vários turnos

Os agentes são sem estado e não mantêm nenhum estado internamente entre chamadas. Para ter uma conversa de vários turnos com um agente, você precisa criar um objeto para manter o estado da conversa e passar esse objeto para o agente ao executá-lo.

Para criar o objeto de estado de conversa, chame o GetNewThread método na instância do agente.

AgentThread thread = agent.GetNewThread();

Em seguida, você pode passar esse objeto de thread para os métodos RunAsync e RunStreamingAsync na instância do agente, juntamente com a entrada do usuário.

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

Isso manterá o estado da conversa entre as chamadas e o agente poderá se referir a mensagens de entrada e resposta anteriores na conversa ao responder a novas entradas.

Importante

O tipo de serviço que é utilizado pelo AIAgent determinará como o histórico de conversas é armazenado. Por exemplo, ao usar um serviço ChatCompletion, como neste exemplo, o histórico de conversas é armazenado no objeto AgentThread e enviado para o serviço em cada chamada. Ao usar o serviço agente de IA do Azure por outro lado, o histórico de conversas é armazenado no serviço do Agente de IA do Azure e apenas uma referência à conversa é enviada ao serviço em cada chamada.

Um único agente com múltiplas conversas

É possível ter várias conversas independentes com a mesma instância do agente, criando vários AgentThread objetos. Esses threads podem ser usados para manter estados de conversa separados para cada conversa. As conversas serão totalmente independentes umas das outras, pois o agente não mantém nenhum 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));

Executando o agente com uma conversa de vários turnos

Os agentes são sem estado e não mantêm nenhum estado internamente entre chamadas. Para ter uma conversa de vários turnos com um agente, você precisa criar um objeto para manter o estado da conversa e passar esse objeto para o agente ao executá-lo.

Para criar o objeto de estado de conversa, chame o get_new_thread() método na instância do agente.

thread = agent.get_new_thread()

Em seguida, você pode passar esse objeto de thread para os métodos run e run_stream na instância do agente, juntamente com a entrada do usuário.

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

Isso manterá o estado da conversa entre as chamadas e o agente poderá se referir a mensagens de entrada e resposta anteriores na conversa ao responder a novas entradas.

Importante

O tipo de serviço usado pelo agente determinará como o histórico de conversas é armazenado. Por exemplo, ao usar um serviço de Conclusão de Chat, como neste exemplo, o histórico de conversas é armazenado no objeto AgentThread e enviado para o serviço em cada chamada. Ao usar o serviço agente de IA do Azure por outro lado, o histórico de conversas é armazenado no serviço do Agente de IA do Azure e apenas uma referência à conversa é enviada ao serviço em cada chamada.

Um único agente com múltiplas conversas

É possível ter várias conversas independentes com a mesma instância do agente, criando vários AgentThread objetos. Esses threads podem ser usados para manter estados de conversa separados para cada conversa. As conversas serão totalmente independentes umas das outras, pois o agente não mantém nenhum 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())

Próximas etapas