Curiosity
Three rounded use-case cards on a light background with blue accents, showing different recommendation patterns.

Recommendation patterns

A map from the recommendation you want to the signals that build it.


More like thistext One embedding signal over the item's description; drop the seed; cut off below ~0.65. The single-signal Similar lookup is enough.


People also boughtgraph A PageSpace (graph-embeddings) signal: items bought by behaviourally-similar customers. Text is irrelevant — topology carries the recommendation.


Personalised feedgraph + history Content-similarity signals fused, then a BoostByRank rule on the user's own interactions, and a TransformFusedScore recency decay. Always FilterAsUser(CurrentUser).


Duplicate detectiontext Before creating a new ticket, check for a near-duplicate. Seed by query text → embedding similarity → return results above 0.85, surfaced before the user submits.


Similar accountsgraph + graph Two graph signals — shared product mix and shared segment — fused with RRF, scoped with FilterAsUser. The engine behind "accounts like this one" in a CRM:

var result = await scope.Graph.Query()
    .StartAt(seed)
    .ToSimilarity(o => o.MaxCandidates(count))
    .AddSignal("by-product-mix", s => s.Weight(2.0f).From(ctx => ctx.Graph.Query()
        .StartAt(seed).Out(N.Product.Type, E.Purchased).In(N.Account.Type, E.Purchased)
        .Except(ctx.Graph.Query().StartAt(seed)).AsUIDEnumerable()))
    .AddSignal("by-segment", s => s.Weight(1.0f).From(ctx => ctx.Graph.Query()
        .StartAt(seed).Out(N.Segment.Type, E.InSegment).In(N.Account.Type, E.InSegment)
        .Except(ctx.Graph.Query().StartAt(seed)).AsUIDEnumerable()))
    .Fuse(f => f.UsingReciprocalRankFusion())
    .FilterAsUser(scope.CurrentUser)
    .ExecuteAsync(scope.CancellationToken);

RAG candidate generationtext Before sending context to an LLM, retrieve the most relevant chunks. StartAtSimilarTextAsync with the user's query as seed; top-k = 8 is a common starting point.


Going further: feed many similarity results into a WeightedGraph, extract clusters, and render them with ForceGraphView to visualise the recommendation neighbourhood. And once a recommendation tool exists, an agent can call it mid-conversation.

Clustering & visualization