Sdílet prostřednictvím


Konverzace s vícenásobným otáčením s agentem

V tomto tutoriálovém kroku se dozvíte, jak vést vícefázovou konverzaci s agentem, který je postaven na službě Chat Completion Azure OpenAI.

Důležité

Agent Framework podporuje mnoho různých typů agentů. V tomto kurzu se používá agent založený na službě dokončení chatu, ale všechny ostatní typy agentů se spouštějí stejným způsobem. Další informace o jiných typech agentů a o tom, jak je sestavit, naleznete v uživatelské příručce k rozhraní Agent Framework.

Požadavky

Informace o požadavcích a vytvoření agenta najdete v části Vytvoření a spuštění jednoduchého agenta v tomto kurzu.

Spuštění agenta s vícekrokovou konverzací

Agenti jsou bezstavoví a neudržují žádný stav interně mezi voláními. Pokud chcete mít vícenásobnou konverzaci s agentem, musíte vytvořit objekt pro uchování stavu konverzace a předat tento objekt agentu při jeho spuštění.

Chcete-li vytvořit objekt stavu konverzace, zavolejte GetNewThread metodu v instanci agenta.

AgentThread thread = agent.GetNewThread();

Objekt vlákna RunAsync pak můžete předat metodě RunStreamingAsync na instanci agenta spolu se vstupem uživatele.

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

Tím se zachová stav konverzace mezi voláními a agent bude moct při reakci na nový vstup odkazovat na předchozí vstupní a odpovědní zprávy v konverzaci.

Důležité

Typ služby, kterou používá, AIAgent určuje způsob ukládání historie konverzací. Pokud například používáte službu ChatCompletion, například v tomto příkladu, historie konverzací je uložena v objektu AgentThread a odesílá se do služby při každém volání. Pokud používáte službu Agent Azure AI na druhé straně, historie konverzací je uložená ve službě Agent Azure AI a při každém volání se do služby odešle jenom odkaz na konverzaci.

Jeden agent s více konverzacemi

Vytvořením více AgentThread objektů je možné mít více nezávislých konverzací se stejnou instancí agenta. Tato vlákna se pak dají použít k udržování samostatných stavů konverzací pro každou konverzaci. Konverzace budou zcela nezávislé na sobě, protože agent neuchovává žádný stav uvnitř sebe.

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

Spuštění agenta s vícekrokovou konverzací

Agenti jsou bezstavoví a neudržují žádný stav interně mezi voláními. Pokud chcete mít vícenásobnou konverzaci s agentem, musíte vytvořit objekt pro uchování stavu konverzace a předat tento objekt agentu při jeho spuštění.

Chcete-li vytvořit objekt stavu konverzace, zavolejte get_new_thread() metodu v instanci agenta.

thread = agent.get_new_thread()

Objekt vlákna run pak můžete předat metodě run_stream na instanci agenta spolu se vstupem uživatele.

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

Tím se zachová stav konverzace mezi voláními a agent bude moct při reakci na nový vstup odkazovat na předchozí vstupní a odpovědní zprávy v konverzaci.

Důležité

Typ služby, kterou agent používá, určí způsob ukládání historie konverzací. Například při použití služby pro dokončování chatu, jako je v tomto příkladu, je historie konverzací uložena v objektu AgentThread a odeslána službě při každém volání. Pokud používáte službu Agent Azure AI na druhé straně, historie konverzací je uložená ve službě Agent Azure AI a při každém volání se do služby odešle jenom odkaz na konverzaci.

Jeden agent s více konverzacemi

Vytvořením více AgentThread objektů je možné mít více nezávislých konverzací se stejnou instancí agenta. Tato vlákna se pak dají použít k udržování samostatných stavů konverzací pro každou konverzaci. Konverzace budou zcela nezávislé na sobě, protože agent neuchovává žádný stav uvnitř sebe.

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

Další kroky