다음을 통해 공유


에이전트와의 다중 턴 대화

이 자습서 단계에서는 에이전트와 다중 턴 대화를 하는 방법을 보여 줍니다. 여기서 에이전트는 Azure OpenAI 채팅 완료 서비스에 빌드됩니다.

중요합니다

에이전트 프레임워크는 다양한 유형의 에이전트를 지원합니다. 이 자습서에서는 채팅 완료 서비스를 기반으로 하는 에이전트를 사용하지만 다른 모든 에이전트 유형은 동일한 방식으로 실행됩니다. 다른 에이전트 유형 및 에이전트를 생성하는 방법에 대한 자세한 내용은 Agent Framework 사용자 가이드를 참조하세요.

필수 조건

필수 구성 요소 및 에이전트 만들기는 이 자습서의 간단한 에이전트 만들기 및 실행을 참조하세요.

다중 턴 대화를 사용하여 에이전트 실행

에이전트는 상태가 없으며 호출 간에 내부적으로 아무런 상태도 유지하지 않습니다. 에이전트와 다중 턴 대화를 하려면 대화 상태를 유지하는 개체를 만들고 이 개체를 실행할 때 에이전트에 전달해야 합니다.

대화 상태 개체를 만들려면 에이전트 인스턴스에서 GetNewThread 메서드를 호출합니다.

AgentThread thread = agent.GetNewThread();

그런 다음, 사용자 입력과 함께 에이전트 인스턴스의 RunAsync 메서드 및 RunStreamingAsync 스레드 개체에 이 스레드 개체를 전달할 수 있습니다.

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

이렇게 하면 호출 간의 대화 상태가 유지되고 에이전트는 새 입력에 응답할 때 대화의 이전 입력 및 응답 메시지를 참조할 수 있습니다.

중요합니다

이 서비스에서 사용하는 AIAgent 서비스 유형에 따라 대화 기록이 저장되는 방식이 결정됩니다. 예를 들어 이 예제와 같이 ChatCompletion 서비스를 사용하는 경우 대화 기록은 AgentThread 개체에 저장되고 각 호출 시 서비스로 전송됩니다. 반면에 Azure AI 에이전트 서비스를 사용하는 경우 대화 기록은 Azure AI 에이전트 서비스에 저장되고 각 호출 시 대화에 대한 참조만 서비스에 전송됩니다.

여러 대화를 처리하는 단일 에이전트

여러 AgentThread 개체를 만들어 동일한 에이전트 인스턴스와 여러 개의 독립적인 대화를 할 수 있습니다. 그런 다음 이러한 스레드를 사용하여 각 대화에 대해 별도의 대화 상태를 유지할 수 있습니다. 에이전트가 내부적으로 상태를 유지하지 않으므로 대화는 서로 완전히 독립적입니다.

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

다중 턴 대화를 사용하여 에이전트 실행

에이전트는 상태가 없으며 호출 간에 내부적으로 아무런 상태도 유지하지 않습니다. 에이전트와 다중 턴 대화를 하려면 대화 상태를 유지하는 개체를 만들고 이 개체를 실행할 때 에이전트에 전달해야 합니다.

대화 상태 개체를 만들려면 에이전트 인스턴스에서 get_new_thread() 메서드를 호출합니다.

thread = agent.get_new_thread()

그런 다음, 사용자 입력과 함께 에이전트 인스턴스의 run 메서드 및 run_stream 스레드 개체에 이 스레드 개체를 전달할 수 있습니다.

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

이렇게 하면 호출 간의 대화 상태가 유지되고 에이전트는 새 입력에 응답할 때 대화의 이전 입력 및 응답 메시지를 참조할 수 있습니다.

중요합니다

에이전트에서 사용하는 서비스 유형에 따라 대화 기록이 저장되는 방법이 결정됩니다. 예를 들어 이 예제와 같이 채팅 완료 서비스를 사용하는 경우 대화 기록은 AgentThread 개체에 저장되고 각 호출 시 서비스로 전송됩니다. 반면에 Azure AI 에이전트 서비스를 사용하는 경우 대화 기록은 Azure AI 에이전트 서비스에 저장되고 각 호출 시 대화에 대한 참조만 서비스에 전송됩니다.

여러 대화를 처리하는 단일 에이전트

여러 AgentThread 개체를 만들어 동일한 에이전트 인스턴스와 여러 개의 독립적인 대화를 할 수 있습니다. 그런 다음 이러한 스레드를 사용하여 각 대화에 대해 별도의 대화 상태를 유지할 수 있습니다. 에이전트가 내부적으로 상태를 유지하지 않으므로 대화는 서로 완전히 독립적입니다.

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

다음 단계