Add persistent memory to AG2 agents (successor to AutoGen).
AG2 Integration
AG2 (the successor to Microsoft AutoGen) uses the same agent model. Wire CortexDB the same way: recall context before the LLM call, capture after.
Install
pip install cortexdbai ag2
LLM provider note. This example uses OpenAI for the agent's chat model, but CortexDB itself is LLM-agnostic. The only model CortexDB invokes internally is the one used by
POST /v1/answerandPOST /v1/understanding/synthesize(Claude Opus 4.6 by default, configurable). Your agent's chat model is independent — swapOpenAIChat/gpt-4ofor Anthropic, Gemini, Mistral, Groq, or any local model. CortexDB does not care.
Pattern
import os
from datetime import datetime, timezone
from uuid import uuid4
from ag2 import ConversableAgent, UserProxyAgent
from cortexdb.v1 import V1Client
client = V1Client(
api_url="https://api-v1.cortexdb.ai",
actor="user:alice",
bearer=os.environ["CORTEX_TOKEN"],
)
SCOPE = "org:acme/user:alice"
def recall(query: str) -> str:
pack = client.recall(scope=SCOPE, view="holistic", query=query,
include=["beliefs", "facts", "episodes"],
budgets={"max_tokens": 3000})
return pack["context_block"]
def capture(text: str, role: str = "user") -> None:
client.experience(scope=SCOPE, text=text, role=role,
observed_at=datetime.now(timezone.utc).isoformat(),
idempotency_key=f"{role}-{uuid4()}")
assistant = ConversableAgent(
name="assistant",
system_message="You are a helpful assistant.",
llm_config={"model": "gpt-4o"},
)
# Register pre/post hooks so every turn is captured
assistant.register_hook(
"process_message_before_send",
lambda agent, messages, sender, config: messages, # custom logic
)
assistant.register_hook(
"process_last_received_message",
lambda agent, msg: (capture(msg["content"], role="user"), msg)[1],
)
# Inject recall context as the agent boots
user = UserProxyAgent("user", human_input_mode="ALWAYS")
user.initiate_chat(
assistant,
message=f"PRIOR CONTEXT:\n{recall('what do we know')}\n\nHi!",
)
Group chat with shared memory
For a multi-agent crew, give every agent the same SCOPE — recall reads the same pack regardless of which agent calls it.
See also
- AutoGen — predecessor
- Python SDK