Skip to content
AGNT
All guides

Semantic venue search explained: how Andy matches your vague request to the right place using intent patterns, vector similarity, and area filtering.

workflowsintermediate

How AGNT search works — 35 intent patterns

Semantic venue search explained: how Andy matches your vague request to the right place using intent patterns, vector similarity, and area filtering.

When you ask Andy for 'a sunset spot with good cocktails near Echo Beach', the search engine does not run a keyword match. It classifies your intent, filters by area, scores candidates with vector similarity, and ranks the results. This guide explains each layer so you understand why Andy suggests what it does — and how to get better results.

AGNT Product7 min5 sections
searchdiscoveryintentvenues

Prerequisites

  • No technical background required, but familiarity with how AGNT bookings work helps.
  • Read /guides/book-restaurant-with-agnt for the consumer flow context.

Intent classification — what you actually want

Every search message is classified into one or more of 35 intent patterns before any venue matching begins. Intent patterns are semantic categories that capture what a user actually wants, not just the words they used. Examples:

  • date-night — romantic, quieter, good lighting, shareable plates
  • quick-lunch — fast service, solo-friendly, close to the user's area
  • sunset-drinks — west-facing, outdoor, cocktail-forward
  • coworking-cafe — WiFi, power outlets, laptop-friendly, decent coffee
  • group-dinner — large table capacity, sharing menus, can handle 6+
  • healthy-breakfast — smoothie bowls, acai, fresh juice, vegan options
  • late-night — open past 11pm, bar food, cocktails

The classifier runs before the vector search. A message like 'somewhere nice for my anniversary' maps to date-night, which adjusts the ranking weights: ambiance scores higher, speed-of-service scores lower. The user never sees the pattern label — it is an internal routing signal.

Area filtering — narrowing the geography

If your message mentions an area — Canggu, Seminyak, Ubud, Uluwatu, Berawa, Batu Bolong, Echo Beach, Pererenan — the search restricts to venues tagged in that area. If no area is mentioned, Andy checks your structural memory for a preferred_area or falls back to the full venue graph.

Area matching is fuzzy. 'Near Echo Beach' includes Echo Beach proper plus Batu Bolong and Berawa. 'Canggu area' covers the full Canggu district. 'South Bali' expands to Seminyak, Kuta, Legian, and Jimbaran. The expansion rules are hand-tuned based on how people in Bali actually talk about neighbourhoods.

Vector similarity — ranking by relevance

After intent classification and area filtering, the remaining candidates are scored using pgvector cosine similarity. Each venue has a pre-computed embedding built from its knowledge pack — menu, vibe description, policies, and tags. The user's query is embedded at search time using the same model (OpenAI text-embedding-3-small, 1536 dimensions).

The cosine similarity score ranges from 0 to 1. A score above 0.82 is a strong match. Between 0.65 and 0.82 is a reasonable suggestion. Below 0.65 the venue is dropped from results. These thresholds are calibrated against real user feedback — bookings that led to positive ratings versus bookings that led to negative ones.

Confidence scoring and the final rank

The final score combines three signals: intent-pattern match strength (40%), vector similarity (40%), and a recency/popularity boost (20%). The recency boost favours venues that have been booked recently and rated well — it prevents stale venues from dominating results purely on description quality.

Andy returns the top three to four results, ordered by this composite score. Each result includes the venue name, area, a one-sentence match reason, and available time slots if a time was specified in the query.

How to get better results from Andy

The search engine rewards specificity. These patterns consistently produce better matches:

  • Include party size: 'dinner for 6' activates the group-dinner intent and filters for capacity.
  • Mention a vibe: 'chill', 'romantic', 'lively' directly influence the intent classification.
  • Name an area: even a rough area like 'Canggu' cuts the candidate set significantly.
  • State a constraint: 'vegetarian options', 'outdoor seating', 'open past 10' are directly matchable against knowledge pack chunks.

Vague queries like 'somewhere good' return broad results. That is by design — Andy will ask a follow-up question ('what area?' or 'what kind of food?') rather than guess wrong.

Key terms

Next steps

FAQ

Guide FAQ.

Common questions about this workflows guide.

Semantic venue search explained: how Andy matches your vague request to the right place using intent patterns, vector similarity, and area filtering.

People also ask.