Partilhar via


Conversas em vários turnos com um agente

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

Importante

O Agent Framework suporta muitos tipos diferentes de agentes. Este tutorial usa um agente baseado 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 de IA com uma conversa em múltiplas fases

Os agentes são apátridas e não mantêm nenhum estado internamente entre as chamadas. Para ter uma conversa de várias voltas 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ção, chame o GetNewSessionAsync método na instância do agente.

AgentSession session = await agent.GetNewSessionAsync();

Pode então passar o objeto de sessão 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.", session));
Console.WriteLine(await agent.RunAsync("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", session));

Isso manterá o estado de conversação entre as chamadas, e o agente poderá fazer referência a mensagens de entrada e resposta anteriores na conversa ao responder a novas entradas.

Importante

O tipo de serviço AIAgent utilizado determinará como o histórico de chat é armazenado. Por exemplo, ao usar um serviço ChatCompletion, como neste exemplo, o histórico de chat é armazenado no objeto AgentSession e enviado ao serviço em cada chamada. Ao usar o serviço Azure AI Agent, por outro lado, o histórico de chat é armazenado no serviço Azure AI Agent e apenas uma referência ao histórico de chat é enviada ao serviço em cada chamada.

Agente único com várias conversas

É possível ter várias conversas independentes com a mesma instância do agente, criando vários AgentSession objetos. Estas sessões podem então ser usadas para manter estados de conversa separados para cada conversa. As conversas serão totalmente independentes umas das outras, já que o agente não mantém qualquer tipo de estado internamente.

AgentSession session1 = await agent.GetNewSessionAsync();
AgentSession session2 = await agent.GetNewSessionAsync();
Console.WriteLine(await agent.RunAsync("Tell me a joke about a pirate.", session1));
Console.WriteLine(await agent.RunAsync("Tell me a joke about a robot.", session2));
Console.WriteLine(await agent.RunAsync("Now add some emojis to the joke and tell it in the voice of a pirate's parrot.", session1));
Console.WriteLine(await agent.RunAsync("Now add some emojis to the joke and tell it in the voice of a robot.", session2));

Executando o agente de IA com uma conversa em múltiplas fases

Os agentes são apátridas e não mantêm nenhum estado internamente entre as chamadas. Para ter uma conversa de várias voltas 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ção, chame o get_new_thread() método na instância do agente.

thread = agent.get_new_thread()

Em seguida, poderá passar este objeto de thread para os métodos run e run_stream na instância do agente, juntamente com a entrada do utilizador.

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 de conversação entre as chamadas, e o agente poderá fazer referência 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 será 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 Azure AI Agent, por outro lado, o histórico de conversas é armazenado no serviço Azure AI Agent e apenas uma referência à conversa é enviada ao serviço em cada chamada.

Agente único com várias conversas

É possível ter várias conversas independentes com a mesma instância do agente, criando vários AgentThread objetos. Esses tópicos podem ser usados para manter estados de conversa separados para cada conversa. As conversas serão totalmente independentes umas das outras, já que o agente não mantém qualquer tipo de 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óximos passos