Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Kontextanbieter werden um jeden Aufruf herum ausgeführt, um den Kontext vor der Ausführung hinzuzufügen und die Daten nach der Ausführung zu verarbeiten.
Integriertes Muster
Die übliche Vorgehensweise besteht darin, Anbieter über context_providers=[...] beim Erstellen eines Agents zu konfigurieren.
ChatHistoryProvider und AIContextProvider sind die integrierten Erweiterungspunkte für die kurzfristige Historie und langfristige kontextuelle Anreicherung.
Für Python ist der integrierte Verlaufsanbieter InMemoryHistoryProvider für den lokalen Konversationsspeicher zuständig.
from agent_framework import InMemoryHistoryProvider
from agent_framework.openai import OpenAIChatClient
agent = OpenAIChatClient().as_agent(
name="MemoryBot",
instructions="You are a helpful assistant.",
context_providers=[InMemoryHistoryProvider("memory", load_messages=True)],
)
session = agent.create_session()
await agent.run("Remember that I prefer vegetarian food.", session=session)
RawAgent kann InMemoryHistoryProvider("memory") in bestimmten Fällen automatisch hinzufügen, aber fügen Sie es jedoch explizit hinzu, wenn Sie ein deterministisches lokales Speicherverhalten wünschen.
Benutzerdefinierter Kontextanbieter
Verwenden Sie benutzerdefinierte Kontextanbieter, wenn Sie dynamische Anweisungen/Nachrichten einfügen oder den Zustand nach ausführung extrahieren müssen.
from typing import Any
from agent_framework import AgentSession, BaseContextProvider, SessionContext
class UserPreferenceProvider(BaseContextProvider):
def __init__(self) -> None:
super().__init__("user-preferences")
async def before_run(
self,
*,
agent: Any,
session: AgentSession,
context: SessionContext,
state: dict[str, Any],
) -> None:
if favorite := state.get("favorite_food"):
context.extend_instructions(self.source_id, f"User's favorite food is {favorite}.")
async def after_run(
self,
*,
agent: Any,
session: AgentSession,
context: SessionContext,
state: dict[str, Any],
) -> None:
for message in context.input_messages:
text = (message.text or "") if hasattr(message, "text") else ""
if isinstance(text, str) and "favorite food is" in text.lower():
state["favorite_food"] = text.split("favorite food is", 1)[1].strip().rstrip(".")
Benutzerdefinierter Verlaufsanbieter
Verlaufsanbieter sind Kontextanbieter, die auf das Laden/Speichern von Nachrichten spezialisiert sind.
from collections.abc import Sequence
from typing import Any
from agent_framework import BaseHistoryProvider, Message
class DatabaseHistoryProvider(BaseHistoryProvider):
def __init__(self, db: Any) -> None:
super().__init__("db-history", load_messages=True)
self._db = db
async def get_messages(
self,
session_id: str | None,
*,
state: dict[str, Any] | None = None,
**kwargs: Any,
) -> list[Message]:
key = (state or {}).get(self.source_id, {}).get("history_key", session_id or "default")
rows = await self._db.load_messages(key)
return [Message.from_dict(row) for row in rows]
async def save_messages(
self,
session_id: str | None,
messages: Sequence[Message],
*,
state: dict[str, Any] | None = None,
**kwargs: Any,
) -> None:
if not messages:
return
if state is not None:
key = state.setdefault(self.source_id, {}).setdefault("history_key", session_id or "default")
else:
key = session_id or "default"
await self._db.save_messages(key, [m.to_dict() for m in messages])
Von Bedeutung
In Python können Sie mehrere Verlaufsanbieter konfigurieren, aber nur einer sollte verwendet werden load_messages=True.
Verwenden Sie zusätzliche Anbieter für Diagnosen/Evaluierungen mit load_messages=False und store_context_messages=True, damit sie den Kontext von anderen Anbietern zusammen mit Eingaben/Ausgaben erfassen.
Beispielmuster:
primary = DatabaseHistoryProvider(db)
audit = InMemoryHistoryProvider("audit", load_messages=False, store_context_messages=True)
agent = OpenAIChatClient().as_agent(context_providers=[primary, audit])