Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Adjon hozzá kontextust az ügynökhöz, hogy megjegyezhesse a felhasználói beállításokat, a múltbeli interakciókat vagy a külső ismereteket.
Alapértelmezés szerint az ügynökök InMemoryChatHistoryProvider-ben vagy a mögöttes AI-szolgáltatásban tárolják a csevegési előzményeket attól függően, hogy az alapul szolgáló szolgáltatás milyen igényeket támaszt.
A következő ügynök OpenAI-csevegés-befejezést használ, amely nem támogatja és nem is igényel szolgáltatáson belüli csevegési előzményeket, ezért automatikusan létrehoz és használ egy InMemoryChatHistoryProvider.
using System;
using Azure.AI.Projects;
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 AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(
model: deploymentName,
instructions: "You are a friendly assistant. Keep your answers brief.",
name: "MemoryAgent");
Figyelmeztetés
DefaultAzureCredential a fejlesztéshez kényelmes, de a termelési környezetben gondos megfontolást igényel. Éles környezetben fontolja meg egy adott hitelesítő adat (pl. ManagedIdentityCredential) használatát a késési problémák elkerülése, a hitelesítő adatok nem szándékos próbálgatásának és a tartalék mechanizmusokból eredő esetleges biztonsági kockázatok elkerülése érdekében.
Egyéni ChatHistoryProvider beállítások használatához az ügynök beállításainak adhatja át az egyiket:
using System;
using Azure.AI.Projects;
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 AIProjectClient(new Uri(endpoint), new DefaultAzureCredential())
.AsAIAgent(model: deploymentName, options: new ChatClientAgentOptions()
{
ChatOptions = new() { Instructions = "You are a helpful assistant." },
ChatHistoryProvider = new CustomChatHistoryProvider()
});
Használjon egy munkamenetet a kontextusok megosztásához a futtatások között.
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));
Jótanács
Itt talál egy teljes futtatható mintaalkalmazást.
Definiáljon egy környezetszolgáltatót, amely munkamenet-állapotban tárolja a felhasználói adatokat, és személyre szabási utasításokat ad meg:
class UserMemoryProvider(ContextProvider):
"""A context provider that remembers user info in session state."""
DEFAULT_SOURCE_ID = "user_memory"
def __init__(self):
super().__init__(self.DEFAULT_SOURCE_ID)
async def before_run(
self,
*,
agent: Any,
session: AgentSession | None,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Inject personalization instructions based on stored user info."""
user_name = state.get("user_name")
if user_name:
context.extend_instructions(
self.source_id,
f"The user's name is {user_name}. Always address them by name.",
)
else:
context.extend_instructions(
self.source_id,
"You don't know the user's name yet. Ask for it politely.",
)
async def after_run(
self,
*,
agent: Any,
session: AgentSession | None,
context: SessionContext,
state: dict[str, Any],
) -> None:
"""Extract and store user info in session state after each call."""
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():
state["user_name"] = text.lower().split("my name is")[-1].strip().split()[0].capitalize()
Hozzon létre egy ügynököt a kontextus biztosítójával:
client = FoundryChatClient(
project_endpoint="https://your-project.services.ai.azure.com",
model="gpt-4o",
credential=AzureCliCredential(),
)
agent = Agent(
client=client,
name="MemoryAgent",
instructions="You are a friendly assistant.",
context_providers=[UserMemoryProvider()],
)
futtassa, az ügynök mostantól hozzáfér a kontextushoz:
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 stores it in session state
result = await agent.run("My name is Alice", session=session)
print(f"Agent: {result}\n")
# Subsequent calls are personalized — name persists via session state
result = await agent.run("What is 2 + 2?", session=session)
print(f"Agent: {result}\n")
# Inspect session state to see what the provider stored
provider_state = session.state.get("user_memory", {})
print(f"[Session State] Stored user name: {provider_state.get('user_name')}")
Jótanács
Tekintse meg a teljes futtatható fájl teljes mintáját .
Megjegyzés:
A Pythonban a megőrzést/memóriát ContextProvider az HistoryProvider implementációk kezelik.
BaseContextProvider és BaseHistoryProvider elavult aliasként marad, és InMemoryHistoryProvider a beépített helyi, memóriabeli előzményszolgáltató.
RawAgent bizonyos esetekben automatikusan hozzáadható InMemoryHistoryProvider() (például ha konfigurált környezetszolgáltatók nélküli munkamenetet használ, és nincs szolgáltatásoldali tárolási mutató), de ez nem minden esetben garantált.
Ha mindig helyi adatmegőrzést szeretne, adjon meg egy InMemoryHistoryProvider elemet kifejezetten. Győződjön meg arról is, hogy csak egy előzménytár szolgáltatót használ load_messages=True, hogy ne játsszon vissza több tárolót ugyanazon hívás során.
Egy ellenőrzési tárolót is hozzáadhat úgy, hogy egy másik előzményszolgáltatót a lista végére csatol context_providersstore_context_messages=True.
from agent_framework import InMemoryHistoryProvider
from agent_framework.mem0 import Mem0ContextProvider
memory_store = InMemoryHistoryProvider(load_messages=True) # add a history provider for persistence across sessions
agent_memory = Mem0ContextProvider("user-memory", api_key=..., agent_id="my-agent") # add Mem0 provider for agent memory
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_store, agent_memory, audit_store], # audit store last
)
Következő lépések
Mélyedjen el:
- Állandó tárterület – beszélgetések tárolása adatbázisokban
- Csevegési előzmények – csevegési előzmények és memória kezelése