Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O Microsoft Agent Framework fornece suporte interno para gerenciar conversas de vários turnos com agentes de IA. Isso inclui manter o contexto em várias interações. Diferentes tipos de agente e serviços subjacentes que são usados para criar agentes podem oferecer suporte a diferentes tipos de threading, e a estrutura do agente abstrai essas diferenças, fornecendo uma interface consistente para os desenvolvedores.
Por exemplo, ao usar um ChatClientAgent com base em um agente de fundição, o histórico de conversas é mantido no serviço. Ao usar um ChatClientAgent baseado na conclusão de bate-papo com o gpt-4.1, o histórico de conversas é mantido na memória e gerido pelo agente.
O tipo AgentThread é a abstração que representa um tópico de conversa com um agente.
AIAgent As instâncias são sem estado e a mesma instância de agente pode ser utilizada com várias instâncias de AgentThread. Todo o estado é, portanto, preservado no AgentThread.
Pode representar tanto o histórico de chat AgentThread como qualquer outro estado que o agente precise de preservar em múltiplas interações.
O histórico da conversa pode ser armazenado na própria thread ou remotamente, com o AgentThread contendo apenas uma referência ao histórico de chat remoto.
O AgentThread estado pode também incluir memórias ou referências a memórias armazenadas remotamente.
Sugestão
Para saber mais sobre o Histórico e a Memória do Chat no Quadro do Agente, consulte Histórico e Memória do Chat do Agente.
Criação do AgentThread
AgentThread As instâncias podem ser criadas de duas maneiras:
- Ao chamar
GetNewThreadao agente. - Executando o agente e não fornecendo um
AgentThreadarquivo. Neste caso, o agente criará um descartávelAgentThreadcom um thread subjacente que só será usado durante a execução.
Alguns threads subjacentes podem ser criados persistentemente em um serviço subjacente, onde o serviço requer isso, por exemplo, Foundry Agents ou OpenAI Responses. Qualquer limpeza ou exclusão desses tópicos é de responsabilidade do usuário.
// Create a new thread.
AgentThread thread = agent.GetNewThread();
// Run the agent with the thread.
var response = await agent.RunAsync("Hello, how are you?", thread);
// Run an agent with a temporary thread.
response = await agent.RunAsync("Hello, how are you?");
Armazenamento de AgentThread
AgentThread As instâncias podem ser serializadas e armazenadas para uso posterior. Isso permite a preservação do contexto da conversa em diferentes sessões ou chamadas de serviço.
Para casos em que o histórico de conversas é armazenado num serviço, o serializado AgentThread conterá um ID do tópico no serviço.
Em casos em que o histórico de conversas é gerido em memória, o objeto serializado AgentThread conterá as mensagens propriamente ditas.
// Create a new thread.
AgentThread thread = agent.GetNewThread();
// Run the agent with the thread.
var response = await agent.RunAsync("Hello, how are you?", thread);
// Serialize the thread for storage.
JsonElement serializedThread = await thread.SerializeAsync();
// Deserialize the thread state after loading from storage.
AgentThread resumedThread = await agent.DeserializeThreadAsync(serializedThread);
// Run the agent with the resumed thread.
var response = await agent.RunAsync("Hello, how are you?", resumedThread);
O Microsoft Agent Framework fornece suporte interno para gerenciar conversas de vários turnos com agentes de IA. Isso inclui manter o contexto em várias interações. Diferentes tipos de agente e serviços subjacentes que são usados para criar agentes podem oferecer suporte a diferentes tipos de threading, e o Agent Framework abstrai essas diferenças, fornecendo uma interface consistente para desenvolvedores.
Por exemplo, ao usar um ChatAgent baseado num agente Foundry, o histórico de comunicação é persistido no serviço. Ao utilizar um ChatAgent baseado na conclusão do bate-papo com gpt-4, o histórico de conversas é mantido na memória e gerenciado pelo agente.
As diferenças entre os modelos de threading subjacentes são abstraídas por meio do AgentThread tipo.
Relação Agente/AgentThread
AIAgent As instâncias são sem estado e a mesma instância de agente pode ser utilizada com várias instâncias de AgentThread.
No entanto, nem todos os agentes suportam todos os tipos de thread. Por exemplo, se estiveres a usar um ChatClientAgent com o serviço de respostas, as instâncias AgentThread criadas por esse agente não funcionarão com um ChatClientAgent usando o serviço Foundry Agent.
Isso ocorre porque esses serviços suportam salvar o histórico de conversas no serviço, e o AgentThread tem apenas uma referência a este thread gerido pelo serviço.
Portanto, é considerado inseguro usar uma AgentThread instância que foi criada por um agente com uma instância de agente diferente, a menos que você esteja ciente do modelo de threading subjacente e suas implicações.
Suporte de threading por serviço/protocolo
| Serviço | Suporte a multithreading |
|---|---|
| Agentes de Fundição | Threads persistentes gerenciados pelo serviço |
| Respostas OpenAI | Threads persistentes geridas pelo serviço OU threads em memória |
| OpenAI Conclusão de Chat | Threads em memória |
| Assistentes OpenAI | Threads gerenciados por serviço |
| A2A | Threads gerenciados por serviço |
Criação do AgentThread
AgentThread As instâncias podem ser criadas de duas maneiras:
- Ao chamar
get_new_thread()ao agente. - Executando o agente e não fornecendo um
AgentThreadarquivo. Neste caso, o agente criará um descartávelAgentThreadcom um thread subjacente que só será usado durante a execução.
Alguns threads subjacentes podem ser criados persistentemente em serviço subjacente, quando o serviço o requer, por exemplo, Agentes de IA do Azure ou Respostas OpenAI. Qualquer limpeza ou exclusão desses tópicos é de responsabilidade do usuário.
# Create a new thread.
thread = agent.get_new_thread()
# Run the agent with the thread.
response = await agent.run("Hello, how are you?", thread=thread)
# Run an agent with a temporary thread.
response = await agent.run("Hello, how are you?")
Armazenamento de AgentThread
AgentThread As instâncias podem ser serializadas e armazenadas para uso posterior. Isso permite a preservação do contexto da conversa em diferentes sessões ou chamadas de serviço.
Para casos em que o histórico de conversas é armazenado num serviço, o serializado AgentThread conterá um ID do tópico no serviço.
Em casos em que o histórico de conversas é gerido em memória, o objeto serializado AgentThread conterá as mensagens propriamente ditas.
# Create a new thread.
thread = agent.get_new_thread()
# Run the agent with the thread.
response = await agent.run("Hello, how are you?", thread=thread)
# Serialize the thread for storage.
serialized_thread = await thread.serialize()
# Deserialize the thread state after loading from storage.
resumed_thread = await agent.deserialize_thread(serialized_thread)
# Run the agent with the resumed thread.
response = await agent.run("Hello, how are you?", thread=resumed_thread)
Armazenamentos de mensagens personalizadas
Para threads na memória, você pode fornecer uma implementação de armazenamento de mensagens personalizada para controlar como as mensagens são armazenadas e recuperadas:
from agent_framework import AgentThread, ChatMessageStore, ChatAgent
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential
class CustomStore(ChatMessageStore):
# Implement custom storage logic here
pass
# You can also provide a custom message store factory when creating the agent
def custom_message_store_factory():
return CustomStore() # or your custom implementation
async with AzureCliCredential() as credential:
agent = ChatAgent(
chat_client=AzureAIAgentClient(async_credential=credential),
instructions="You are a helpful assistant",
chat_message_store_factory=custom_message_store_factory
)
# Or let the agent create one automatically
thread = agent.get_new_thread()
# thread.message_store is not a instance of CustomStore
Relação Agente/AgentThread
Agents são sem estado e a mesma instância do agente pode ser utilizada com várias instâncias de AgentThread.
No entanto, nem todos os agentes suportam todos os tipos de thread. Por exemplo, se tu estiveres a usar um ChatAgent com o serviço OpenAI Responses e as instâncias store=True e AgentThread usadas por este agente, não funcionarão com um ChatAgent usando o serviço Azure AI Agent, porque os thread_ids não são compatíveis.
Portanto, é considerado inseguro usar uma AgentThread instância que foi criada por um agente com uma instância de agente diferente, a menos que você esteja ciente do modelo de threading subjacente e suas implicações.
Exemplo prático de várias voltas
Aqui está um exemplo completo mostrando como manter o contexto em várias interações:
from agent_framework import ChatAgent
from agent_framework.azure import AzureAIAgentClient
from azure.identity.aio import AzureCliCredential
async def multi_turn_example():
async with (
AzureCliCredential() as credential,
ChatAgent(
chat_client=AzureAIAgentClient(async_credential=credential),
instructions="You are a helpful assistant"
) as agent
):
# Create a thread for persistent conversation
thread = agent.get_new_thread()
# First interaction
response1 = await agent.run("My name is Alice", thread=thread)
print(f"Agent: {response1.text}")
# Second interaction - agent remembers the name
response2 = await agent.run("What's my name?", thread=thread)
print(f"Agent: {response2.text}") # Should mention "Alice"
# Serialize thread for storage
serialized = await thread.serialize()
# Later, deserialize and continue conversation
new_thread = await agent.deserialize_thread(serialized)
response3 = await agent.run("What did we talk about?", thread=new_thread)
print(f"Agent: {response3.text}") # Should remember previous context