Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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())