Technical support blueprint
A complete sample workspace for a customer-support knowledge graph. Drawn from the curiosity-ai/technical-support repository, which you can clone and run as-is.
For the page-by-page walkthrough, see the Technical Support tutorial. This page is the at-a-glance blueprint: schema, retrieval, AI, deployment.
The graph
| Node | Key | Indexed |
|---|---|---|
Customer |
Id |
Name text |
Device |
Name |
text |
Part |
Name |
text |
Manufacturer |
Name |
text |
Status |
Code |
label text |
Ticket |
Id |
Subject text (high boost), Body text + vector |
Message |
Id |
Text vector |
Entity |
Name |
name |
Retrieval
Search experience — text-heavy for identifiers (ticket IDs, device names, part numbers) and hybrid for paraphrased symptom searches. Facets on Status, Device, Manufacturer, and Customer.Tier.
Similar-cases endpoint — combines StartAtSimilarText over Ticket.Body with an optional ForDevice graph constraint, returning scored matches.
class SimilarRequest { public string Query { get; set; } public string Device { get; set; } public int Limit { get; set; } = 10; }
var req = Body.FromJson<SimilarRequest>();
var search = SearchRequest.For(req.Query);
search.BeforeTypesFacet = new([] { "Ticket" });
if (!string.IsNullOrWhiteSpace(req.Device))
search.TargetUIDs = Q().StartAt("Device", req.Device).In("ForDevice").AsUIDEnumerable().ToArray();
var q = await Graph.CreateSearchAsUserAsync(search, CurrentUser, CancellationToken);
return q.Take(Math.Min(req.Limit, 50)).Emit("N");
AI
Support chat with three tools:
SearchTickets(query, productSku?, limit?)— returns similar tickets with snippet IDs for citations.GetTicketDetails(ticketId)— fetches a ticket and its messages.FindRelatedKBArticles(query)— searches the connected knowledge base (if present).
The agent shape is: search → pick the top snippets → synthesize an answer with citations → never invent ticket IDs.
Permissions
Ticket nodes are restricted to teams that correspond to the customer's tier — Enterprise tickets are visible only to the Enterprise support team, and to the Customer's own users via the HasTicket ownership edge. Every search runs through CreateSearchAsUserAsync, so users see only what they're allowed to.
Deployment
- Single-container deployment is enough for ≤ 500 users.
- The connector runs as a scheduled task every 15 minutes against the ticketing system's webhook log.
- Embeddings:
text-embedding-3-smallhosted, or a local MiniLM for air-gapped deployments. - Chat:
gpt-4o-minifor low-latency,claude-haiku-4-5as fallback.
Where to clone
git clone https://github.com/curiosity-ai/technical-support
The repo contains:
Connector/— the C# data connector with sample data.Endpoints/— the custom endpoints used by the support UI.Tools/— the AI tools for the support chat.FrontEnd/— a Tesserae-based UI tailored for the support workflow.README.md— setup instructions.
Related
- Tutorial walkthrough — page-by-page.
- Build your first enterprise AI app — a smaller, framework-only version of the same patterns.
- Customer 360 — when you need broader cross-system context, not just support.