I built ASPERA after deploying an LLM-based fraud detection system that was too slow and expensive for production use. The core insight: you don't need LLMs for 95% of cases if you have deterministic business logic.
The architecture combines symbolic reasoning (rule-based, instant, free) with LLM inference (only for novel/uncertain situations). A confidence threshold determines which path to take.
Technical approach: - Custom DSL for defining concepts, inferences, and intentions - Symbolic reasoner evaluates deterministic rules (O(n), ~40-50ms) - LLM adapter handles edge cases via Groq/OpenAI/Anthropic - Three-tier memory system (episodic, semantic, working) - Full decision trace for explainability (critical for regulatory compliance)
Production deployment results (60 days, 500K user fintech, 3M transactions): - Latency: 45ms avg (vs 1.2s with pure LLM approach) - Cost: €0 for 95% of decisions (vs €0.003/req) - Accuracy: 94.2% (vs 78% baseline) - False positives: 5% (vs 15%) - Fraud prevented: €1.2M
Benchmarks vs LangChain on classification tasks: - 28× faster (42ms vs 1,200ms) - 100% cost reduction - Full explainability vs black box
I'm publishing the full paper on Zenodo with methodology, raw data, and statistical analysis (p < 0.001, Cohen's d = 2.4).
The interesting trade-off: you sacrifice some adaptability for massive gains in speed, cost, and explainability. For production systems with known business rules, this is the right trade.
Open questions I'm wrestling with: 1. Optimal symbolic/LLM ratio - does 95/5 generalize or is it domain-specific? 2. How to auto-learn symbolic rules from LLM interactions over time? 3. Offline LLM fallback for cases where internet isn't available?
Code/paper: [if public, otherwise say "available upon request for validation"]
Happy to answer technical questions or discuss hybrid architectures.
christianrth•2h ago
*Why symbolic reasoning?*
Most production AI doesn't need the full flexibility of LLMs. Fraud detection, compliance checking, rule validation - these have well-defined logic. Using an LLM for "if amount > €5000 AND velocity > 0.8 then flag" is overkill.
*The DSL:* ```aspera concept fraud_risk { signals: ["amount", "velocity", "location"]; weight: 1.0; }
inference detect_high_velocity { when (signals.velocity > 0.8 AND signals.amount > 5000) { then increase concept: "fraud_risk" by 1.0; } }
intention block_transaction { trigger: "fraud_detected"; strategy: [ if (concepts.fraud_risk > 0.7) then "block"; if (concepts.fraud_risk > 0.4) then "review"; else "approve"; ]; }