Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Microsoft Agent Framework fornece suporte interno para gerenciar conversas com vários turnos com agentes de IA. Isso inclui a manutenção do contexto em várias interações. Diferentes tipos de agente e serviços subjacentes que são usados para criar agentes podem dar 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 baseado em um agente da "foundry", o histórico de conversação é armazenado no serviço. Ao usar um ChatClientAgent baseado na conclusão do chat com gpt-4.1, o histórico da conversa é mantido na memória e gerenciado pelo agente.
O tipo AgentThread é uma 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 usada com várias AgentThread instâncias. Todo o estado é, portanto, preservado no AgentThread.
Uma AgentThread pode representar o histórico de chat e qualquer outro estado que o agente precise preservar em várias interações.
O histórico de chat pode ser armazenado no thread em si ou remotamente, com a AgentThread única referência ao histórico de chat remoto.
O AgentThread estado também pode incluir memórias ou referências a memórias armazenadas remotamente.
Dica
Para saber mais sobre o histórico e a memória do chat na Estrutura do Agente, consulte o histórico e a memória do chat do agente.
Criação do AgentThread
AgentThread as instâncias podem ser criadas de duas maneiras:
- Chamando o agente com
GetNewThread. - Ao executar o agente sem fornecer um
AgentThread. Nesse caso, o agente criará um throwawayAgentThreadcom um thread subjacente que será usado apenas durante a execução.
Alguns threads fundamentais podem ser criados de forma persistente em um serviço subjacente, quando o serviço requer isso, por exemplo, Foundry Agents ou Respostas do OpenAI. Qualquer limpeza ou exclusão desses threads é 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 do AgentThread
AgentThread as instâncias podem ser serializadas e armazenadas para uso posterior. Isso permite a preservação do contexto de conversa em diferentes sessões ou chamadas de serviço.
Para casos em que o histórico de conversas é armazenado em um serviço, o serializado AgentThread conterá uma ID do thread no serviço.
Para casos em que o histórico de conversas é gerenciado na memória, o serializado AgentThread conterá as próprias mensagens.
// 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 com vários turnos com agentes de IA. Isso inclui a manutenção do contexto em várias interações. Diferentes tipos de agente e serviços subjacentes que são usados para criar agentes podem dar 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 ChatAgent baseado em um agente do Foundry, o histórico de conversas é mantido no serviço. Ao usar uma ChatAgent conclusão de chat com base no gpt-4, o histórico de conversas é na memória e gerenciado pelo agente.
As diferenças entre os modelos de threading subjacentes são abstraídas por meio do tipo AgentThread.
Relação Agent/AgentThread
AIAgent as instâncias são sem estado e a mesma instância de agente pode ser usada com várias AgentThread instâncias.
No entanto, nem todos os agentes dão suporte a todos os tipos de thread. Por exemplo, se você estiver usando um ChatClientAgent com o serviço de respostas, as instâncias AgentThread criadas por esse agente não funcionarão com um serviço ChatClientAgent que usa o Foundry Agent.
Isso ocorre porque esses serviços oferecem suporte para salvar o histórico de conversas no serviço, e o AgentThread possui apenas uma referência para esse thread gerenciado pelo serviço.
Portanto, é considerado inseguro usar uma instância AgentThread que foi criada por um agente com uma instância de agente diferente, a menos que você esteja ciente do modelo de threads subjacente e suas implicações.
Suporte ao threading por serviço/protocolo
| Service | Suporte ao threading |
|---|---|
| Agentes de fundição | Threads persistentes gerenciados pelo serviço |
| Respostas OpenAI | Threads persistentes gerenciados pelo serviço ou threads na memória |
| OpenAI ChatCompletion | Threads em memória |
| Assistentes do OpenAI | Threads gerenciados pelo serviço |
| A2A | Threads gerenciados pelo serviço |
Criação do AgentThread
AgentThread as instâncias podem ser criadas de duas maneiras:
- Chamando o agente com
get_new_thread(). - Ao executar o agente sem fornecer um
AgentThread. Nesse caso, o agente criará um throwawayAgentThreadcom um thread subjacente que será usado apenas durante a execução.
Alguns threads subjacentes podem ser criados de forma persistente em um serviço subjacente quando o serviço assim requer; por exemplo, nos agentes de IA do Azure ou nas respostas do OpenAI. Qualquer limpeza ou exclusão desses threads é 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 do AgentThread
AgentThread as instâncias podem ser serializadas e armazenadas para uso posterior. Isso permite a preservação do contexto de conversa em diferentes sessões ou chamadas de serviço.
Para casos em que o histórico de conversas é armazenado em um serviço, o serializado AgentThread conterá uma ID do thread no serviço.
Para casos em que o histórico de conversas é gerenciado na memória, o serializado AgentThread conterá as próprias mensagens.
# 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)
Repositórios de Mensagens Personalizados
Para threads na memória, você pode fornecer uma implementação personalizada do repositório de mensagens 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 Agent/AgentThread
Agents são sem estado e a mesma instância de agente pode ser usada com várias AgentThread instâncias.
No entanto, nem todos os agentes dão suporte a todos os tipos de thread. Por exemplo, se você estiver usando um ChatAgent com o serviço OpenAI Responses e as instâncias store=True, AgentThread utilizadas por esse agente, isso não funcionará com um serviço ChatAgent que utiliza o Agente de IA do Azure, pois os thread_ids não são compatíveis.
Portanto, é considerado inseguro usar uma instância AgentThread que foi criada por um agente com uma instância de agente diferente, a menos que você esteja ciente do modelo de threads subjacente e suas implicações.
Exemplo prático de vários turnos
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