𧬠Semantic Memory
Persistent knowledge storage and retrieval.
Overview
Semantic Memory is the long-term knowledge store that maintains the enterpriseās semantic understanding across sessions, enabling AI agents to access accumulated knowledge.
| Layer |
Purpose |
| Knowledge Graph |
Structured entity relationships |
| Vector Store |
Semantic similarity search |
| Temporal Store |
Time-aware knowledge |
| Debt Ledger |
Semantic debt tracking |
Knowledge Sources
Explicit Knowledge
Directly defined in DomainForge⢠models:
Entity "Customer.Premium" in sales
@description "High-value recurring customer"
@attributes { tier: "gold", since: 2020 }
Derived Knowledge
Computed through inference and projections:
1
2
3
4
5
6
| # Find implicit relationships
SELECT ?entity ?connects_to
WHERE {
?flow sea:from ?entity ;
sea:to ?connects_to .
}
|
Learned Knowledge
Captured from interactions and feedback:
1
2
3
4
5
6
7
| {
"type": "learned_association",
"source": "user_feedback",
"entities": ["Customer.X", "Product.Y"],
"relationship": "prefers",
"confidence": 0.85
}
|
Memory Operations
Store
1
2
3
4
5
6
7
8
9
10
| async def store_knowledge(
subject: str,
predicate: str,
obj: str | dict,
metadata: dict = None
) -> str:
"""Store a new knowledge triple."""
triple = RDFTriple(subject, predicate, obj)
await kg_service.insert(triple, metadata)
return triple.id
|
Query
1
2
3
4
5
6
| async def query_knowledge(
sparql: str,
snapshot_id: str = None
) -> list[dict]:
"""Query knowledge graph."""
return await kg_service.query(sparql, snapshot_id)
|
Update
1
2
3
4
5
6
7
8
9
10
| async def update_knowledge(
triple_id: str,
new_value: str | dict
) -> None:
"""Update existing knowledge."""
changeset = ChangeSet([
DeleteOp(triple_id),
AddOp(triple_id, new_value)
])
await kg_service.apply_changeset(changeset)
|
Vector Semantic Memory
For similarity-based retrieval:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| from semantic_memory import VectorStore
# Store with embedding
await vector_store.upsert(
id="concept:payment-processing",
content="Payment processing handles financial transactions...",
metadata={"domain": "finance", "type": "concept"}
)
# Semantic search
results = await vector_store.search(
query="How do we handle refunds?",
top_k=5,
filter={"domain": "finance"}
)
|
Temporal Knowledge
Track knowledge changes over time:
Store Temporal Fact
1
2
3
4
5
6
7
| await temporal_store.store(
subject="policy:vendor-limit",
predicate="value",
obj=5000,
valid_from=datetime(2025, 1, 1),
valid_to=datetime(2025, 12, 31)
)
|
Query At Point In Time
1
2
3
4
5
6
| # What was the vendor limit on March 15?
result = await temporal_store.query_at(
subject="policy:vendor-limit",
predicate="value",
at_time=datetime(2025, 3, 15)
)
|
Semantic Debt Integration
Track knowledge quality issues:
1
2
3
4
5
6
7
8
9
10
| # Record semantic debt
await debt_ledger.open(
title="Missing vendor classification",
concept="entity:vendor-x",
severity="warning",
evidence="No tier attribute defined"
)
# Query debt by concept
debts = await debt_ledger.query_by_concept("entity:vendor-x")
|
Memory Consistency
Snapshot Isolation
1
2
3
4
5
6
7
8
9
10
11
| # Create consistent snapshot
snapshot = await memory.create_snapshot(
version="1.2.0",
description="Q1 knowledge base"
)
# Query against snapshot
results = await memory.query(
sparql="SELECT * WHERE { ?s ?p ?o }",
snapshot_id=snapshot.id
)
|
Change Tracking
All changes are tracked as immutable change sets:
1
2
3
| changeset = await memory.get_changeset(changeset_id)
print(f"Operations: {len(changeset.operations)}")
print(f"Applied to: {changeset.source_snapshot_id}")
|
- SDS-003: Knowledge Graph Service
- SDS-016: Semantic Debt Ledger
- PRD-001: Vector Semantic Memory