Knowledge Base

Build a structured knowledge base from agent interactions and external sources.

Architecture


flowchart LR
  S[Sources] -->|remember| M[Mnemosyne]
  M -->|index| SM[Semantic Memory]
  SM -->|recall| A[Agent]
  A -->|remember| M
  
  style SM fill:#f0fdf4,stroke:#16a34a

Storing Knowledge

Use remember() to store knowledge items. Organize via source, importance, and metadata:

from mnemosyne import Mnemosyne

mem = Mnemosyne(session_id="knowledge-base")

# Store documentation knowledge
mem.remember(
  content="API authentication uses OAuth 2.0 with PKCE flow.",
  source="documentation",
  importance=0.9,
)

mem.remember(
  content="Rate limit is 1000 requests per minute per API key.",
  source="documentation",
  importance=0.7,
)

# Store from conversations
mem.remember(
  content="Customer reported timeout on bulk export endpoint.",
  source="conversation",
  importance=0.6,
  metadata={"ticket_id": "T-4521"},
)

Querying Knowledge

Use recall() for natural language retrieval:

from mnemosyne import Mnemosyne

mem = Mnemosyne(session_id="knowledge-base")

# Natural language query
results = mem.recall("How do I authenticate with the API?")

# Adjust number of results
results = mem.recall("API rate limits", top_k=10)

Structured Knowledge with TripleStore

For structured subject-predicate-object relationships, use the TripleStore class:

from mnemosyne import TripleStore

ts = TripleStore()

# Add structured facts
ts.add(subject="API", predicate="auth_method", obj="OAuth 2.0 PKCE")
ts.add(subject="API", predicate="rate_limit", obj="1000 req/min")
ts.add(subject="database", predicate="type", obj="PostgreSQL")

# Query structured knowledge
facts = ts.query(subject="API")
for fact in facts:
  print(f"{fact.subject} -> {fact.predicate} -> {fact.obj}")

Maintaining Knowledge

Replacing Outdated Information

from mnemosyne import Mnemosyne

mem = Mnemosyne(session_id="knowledge-base")

# Store updated information
mem.remember(
  content="API v2 uses OAuth 2.0 with PKCE.",
  source="documentation",
  importance=0.9,
)

# Remove outdated memory
mem.forget(memory_id="mem_old_auth")

Checking Stats

from mnemosyne import Mnemosyne

mem = Mnemosyne(session_id="knowledge-base")

stats = mem.get_stats()
print(f"Total memories: {stats}")

Use Case: Customer Support

from mnemosyne import Mnemosyne

mem = Mnemosyne(session_id="support-kb")

# Pre-load product knowledge
mem.remember(
  content="Product supports CSV and JSON export formats.",
  source="product-docs",
  importance=0.8,
)

# Agent handles support ticket
def handle_ticket(ticket):
  # Recall relevant knowledge
  docs = mem.recall(ticket.description, top_k=5)
  
  # Generate response using recalled context
  response = generate_response(docs, ticket)
  
  # Store interaction for future reference
  mem.remember(
      content=f"Ticket {ticket.id}: {response.summary}",
      source="support",
      importance=0.5,
      metadata={"ticket_id": ticket.id},
  )
  
  return response
Knowledge Freshness

Use forget() to remove outdated memories and remember() with high importance for critical facts. Periodically review get_stats() to monitor knowledge volume.