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 GetNewThread método na instância do agente.

AgentThread thread = agent.GetNewThread();

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

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 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 AIAgent determinará como o histórico de conversas será armazenado. Por exemplo, ao usar um serviço ChatComplete, 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.

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