Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dodaj kontekst do agenta, aby zapamiętać preferencje użytkownika, wcześniejsze interakcje lub wiedzę zewnętrzną.
Skonfiguruj pamięć przy użyciu niestandardowego ChatHistoryProviderelementu :
using System;
using Azure.AI.OpenAI;
using Azure.Identity;
using Microsoft.Agents.AI;
var endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT")
?? throw new InvalidOperationException("Set AZURE_OPENAI_ENDPOINT");
var deploymentName = Environment.GetEnvironmentVariable("AZURE_OPENAI_DEPLOYMENT_NAME") ?? "gpt-4o-mini";
AIAgent agent = new AzureOpenAIClient(new Uri(endpoint), new AzureCliCredential())
.GetChatClient(deploymentName)
.AsAIAgent(instructions: "You are a friendly assistant. Keep your answers brief.", name: "MemoryAgent");
Użyj sesji, aby zachować kontekst między uruchomieniami.
AgentSession session = await agent.CreateSessionAsync();
Console.WriteLine(await agent.RunAsync("Hello! What's the square root of 9?", session));
Console.WriteLine(await agent.RunAsync("My name is Alice", session));
Console.WriteLine(await agent.RunAsync("What is my name?", session));
Tip
Zapoznaj się z pełnym przykładem kompletnego pliku możliwego do uruchomienia.
Zdefiniuj dostawcę kontekstu, który wprowadza dodatkowy kontekst do każdego wywołania agenta:
class UserNameProvider(BaseContextProvider):
"""A simple context provider that remembers the user's name."""
def __init__(self) -> None:
super().__init__(source_id="user-name-provider")
self.user_name: str | None = None
async def before_run(
self,
*,
agent: Any,
session: AgentSession,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Called before each agent invocation — add extra instructions."""
if self.user_name:
context.instructions.append(f"The user's name is {self.user_name}. Always address them by name.")
else:
context.instructions.append("You don't know the user's name yet. Ask for it politely.")
async def after_run(
self,
*,
agent: Any,
session: AgentSession,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Called after each agent invocation — extract information."""
for msg in context.input_messages:
text = msg.text if hasattr(msg, "text") else ""
if isinstance(text, str) and "my name is" in text.lower():
# Simple extraction — production code should use structured extraction
self.user_name = text.lower().split("my name is")[-1].strip().split()[0].capitalize()
Utwórz agenta z dostawcą kontekstu:
credential = AzureCliCredential()
client = AzureOpenAIResponsesClient(
project_endpoint=os.environ["AZURE_AI_PROJECT_ENDPOINT"],
deployment_name=os.environ["AZURE_OPENAI_RESPONSES_DEPLOYMENT_NAME"],
credential=credential,
)
memory = UserNameProvider()
agent = client.as_agent(
name="MemoryAgent",
instructions="You are a friendly assistant.",
context_providers=[memory],
)
Uwaga / Notatka
W języku Python trwałość/pamięć jest obsługiwana przez dostawców historii. Element BaseHistoryProvider jest również BaseContextProvider, a InMemoryHistoryProvider to wbudowana lokalna implementacja.
RawAgent może automatycznie dodawać InMemoryHistoryProvider("memory") w określonych przypadkach (na przykład w przypadku korzystania z sesji bez skonfigurowanych dostawców kontekstu i żadnych wskaźników magazynowania po stronie usługi), ale nie jest to gwarantowane we wszystkich scenariuszach.
Jeśli zawsze chcesz mieć lokalną trwałość, dodaj jawnie InMemoryHistoryProvider . Upewnij się również, że tylko jeden dostawca historii ma load_messages=True, aby nie odtwarzać wielu magazynów do tego samego wywołania.
Sklep audytowy można również dodać, dołączając kolejnego dostawcę historii na końcu elementu context_providers przy użyciu store_context_messages=True:
from agent_framework import InMemoryHistoryProvider
memory_store = InMemoryHistoryProvider("memory", load_messages=True)
audit_store = InMemoryHistoryProvider(
"audit",
load_messages=False,
store_context_messages=True, # include context added by other providers
)
agent = client.as_agent(
name="MemoryAgent",
instructions="You are a friendly assistant.",
context_providers=[memory, memory_store, audit_store], # audit store last
)
Uruchom go — agent ma teraz dostęp do kontekstu:
session = agent.create_session()
# The provider doesn't know the user yet — it will ask for a name
result = await agent.run("Hello! What's the square root of 9?", session=session)
print(f"Agent: {result}\n")
# Now provide the name — the provider extracts and stores it
result = await agent.run("My name is Alice", session=session)
print(f"Agent: {result}\n")
# Subsequent calls are personalized
result = await agent.run("What is 2 + 2?", session=session)
print(f"Agent: {result}\n")
print(f"[Memory] Stored user name: {memory.user_name}")
Tip
Zapoznaj się z pełnym przykładem kompletnego pliku możliwego do uruchomienia.
Dalsze kroki
Głębiej:
- Pamięć trwała — przechowywanie konwersacji w bazach danych
- Historia czatów — zarządzanie historią czatu i pamięcią