Blog

Technical guides on building with AI

Practical explanations of RAG, agents, orchestration and LLM features, focused on trade-offs and design decisions.

What RAG is and when to use it

How retrieval-augmented generation lets a language model answer from your content, and how to tell whether your project needs it.

How to evaluate a RAG system

A practical method for measuring a RAG system: building a test set, scoring retrieval and answers separately, and turning failures into specific fixes.

Hybrid search and reranking for RAG

How to combine keyword and vector search, merge their rankings with reciprocal rank fusion, and decide whether a reranker is worth its extra latency.

Streaming LLM responses to a web UI

A practical path from model to browser: choosing a transport, designing events, rendering partial Markdown safely, and handling cancellation, errors and proxies.

LLM guardrails and prompt injection defence

What prompt injection is, why filters alone cannot stop it, and how to layer permissions, output handling, approval and testing so that a manipulated model can do little harm.

Embeddings and choosing a vector database

What embeddings are, how to compare embedding models on your own data and the criteria that matter when choosing a vector store, including when your existing database is enough.

Text-to-SQL agents: risks and safeguards

The risks of letting an LLM write SQL and the layered safeguards that reduce them: database permissions, tenant isolation, query validation, resource limits and accuracy testing.

Controlling LLM cost and latency

Techniques for reducing what an LLM application spends and how long it takes: measuring by step, trimming context, model routing, caching, output limits, streaming and agent loop controls.