Building an AI Agent for Real Estate with Systematic Evaluation Framework

rechat · Other · 2023 · source Agentic: yes · promotional bias: low · source-backed · extracted with prompt 0.5.4 (schema v2)

Generated from extraction.json — do not edit by hand. Every claim cites verbatim source evidence; stated means the quote directly asserts the claim, implied means it supports it indirectly.

Problem

Domain: Real estate AI assistant evaluation

Rechat needed to move Lucy, an AI assistant for real estate professionals, from prototype demos to production without relying on subjective vibe checks.

Constraints:

Architecture

Rechat wrapped Lucy with an evaluation system rather than treating prompting alone as the production path. The system combines unit tests and assertions over observed failure modes, trace logging, a Rechat-specific human review interface, synthetic real-estate-agent inputs, Metabase dashboards, and later LLM-as-judge/fine-tuning workflows that are calibrated against human labels.

Diagram confidence: reconstructed (reconstructed from prose).

flowchart LR
  real-estate-user[Real Estate User] --> lucy-assistant[Lucy Assistant]
  lucy-assistant --> rechat-tools[Rechat Tools]
  lucy-assistant --> trace-logging[Trace Logging]
  trace-logging --> human-review-app[Human Review App]
  human-review-app --> evaluation-dataset[Evaluation Dataset]
  evaluation-dataset --> assertions[Assertions]
  evaluation-dataset --> llm-judge[LLM Judge]
  trace-logging --> metabase-dashboard[Metabase Dashboard]
  assertions --> metabase-dashboard[Metabase Dashboard]
Drag to pan · scroll or use +/− to zoom · reconstructed from the source's described component topology

Components

Component Role Interacts with
Real Estate User Agent or broker asking Lucy to create contacts, send email, find listings, or create websites. Lucy Assistant
Lucy Assistant Rechat's AI assistant that executes real estate tasks through prompts, RAG, agents, and tools. Real Estate User, Rechat Tools, Trace Logging
Rechat Tools Application tools and APIs for contact management, email, listings, and website creation. Lucy Assistant
Trace Logging Logs assistant traces and test results so failures can be inspected and evaluated. Lucy Assistant, Human Review App, Metabase Dashboard
Human Review App Custom low-friction viewing and annotation tool for Rechat-specific trace metadata. Trace Logging, Evaluation Dataset
Evaluation Dataset Curated cases from synthetic inputs, trace review, and failed examples used for tests, judging, and fine-tuning. Human Review App, Assertions, LLM Judge
Assertions Unit tests and deterministic checks for known failure modes observed in Lucy's data. Evaluation Dataset, Metabase Dashboard
LLM Judge Model-based evaluator introduced after deterministic assertions and aligned against human labels. Evaluation Dataset, Human Review App
Metabase Dashboard Existing analytics surface for visualizing assertion results and progress over failure modes. Trace Logging, Assertions

Data flow

A synthetic or real real-estate task is sent to Lucy, Lucy calls Rechat tools, assertions and unit tests check known failure modes, traces are logged and reviewed in a custom annotation interface, results are visualized in Metabase, and high-quality reviewed cases feed later fine-tuning or judge alignment.

“running these assertions give you immediate feedback and are almost free to run and it's really critical to your overall evaluation system”transcript, stated
“viewing app this is also a data labeling app where it it's like facilitates human review um which I'll talk about in a second so this is the most important part if you remember anything from this talk it is you need to look at your data and you need to fight as hard as you can”transcript, stated

Why this architecture

The architecture moves Rechat from ad hoc prompt iteration to measurable development: cheap assertions catch known regressions, traces expose failures for humans, synthetic inputs bootstrap coverage before many users exist, and only then does the team add LLM judging or fine-tuning.

“we didn't really know what the success rate or failure rate was is it going to work 50% of times or 80% of times”transcript, stated
“you don't want to jump straight to LM as a judge or generic evals you want to try to write down as many assertions and unit tests as you can”transcript, stated

Models used: GPT-3.5 · LLM-as-judge

Scale

Alternatives considered (roads not taken)

Continue with vibe checks and a few manual invocations.

Rejected because: The team could not quantify success rates or know whether prompt changes caused regressions.

“we would invoke it a couple of times uh we would get a feeling that yeah it worked a couple of times but we don't we didn't really know”transcript, stated

Jump straight to generic LLM judges.

Rejected because: Known failure modes are better captured first with cheap unit tests and assertions.

“don't want to jump straight to LM as a judge or generic evals you want to try to write down as many assertions and unit tests as you can”transcript, stated

Buy or force generic trace tools for all review.

Rejected because: The team found too much friction and needed Rechat-specific trace metadata and filters.

“stuff in your traces so in rat's case we found that tools had too much friction for us so we built our own kind of little application and you can do this very easily in something like gradio streamlet I use shiny for python it really doesn't matter but we have a lot”transcript, stated

Patterns

eval-driven-development (operations)

Rechat made unit tests, assertions, trace review, and judge alignment the mechanism for deciding whether Lucy was improving.

“try to improve your AI with prompt engineering and see if your test coverage is good are you logging your uh are you logging your traces correctly”transcript, stated

observability-tracing (operations)

The team logged assistant traces and built low-friction viewing/annotation so humans could inspect failures.

“it's not enough to just log your traces you have to look at them otherwise there's no point in logging them”transcript, stated

synthetic-data-generation (evaluation)

LLMs generated real-estate-agent inputs to bootstrap test cases and improve coverage before production usage supplied enough examples.

“we basically use an llm to cplay as a real estate agent and ask questions as inputs into this uh into Lucy”transcript, stated

llm-as-judge (evaluation)

After deterministic assertions, Rechat could add an LLM judge calibrated against domain-expert labels.

“have a domain expert label data uh you know label the critique and in critique data and keep iterating on that until my LM as a judge is in alignment”transcript, stated

fine-tuning-adaptation (model-adaptation)

Reviewed and failed cases from the eval workflow became a data-curation path for later fine-tuning.

“you can start to curate data for fine tuning and also for the failed cases you have this workflow that you can use to work through those”transcript, stated

Tradeoffs

Evaluation starting point

Chose Unit tests and assertions for known failures over Generic LLM judges first.

Rationale: Assertions are cheap, immediate, and fit the failure modes already observed in data.

“this is a very simple thing that people skip but it's absolutely essential because running these assertions give you immediate feedback”transcript, stated

Tooling maturity

Chose Existing CI and Metabase at the beginning over Buying specialized evaluation tooling immediately.

Rationale: The team could start measuring progress with tools it already had and upgrade later as needs matured.

“use your existing tools so in rat's case they were already using metabase so we log these results to metabase”transcript, stated

Review interface

Chose A Rechat-specific annotation app over Generic trace viewers with high review friction.

Rationale: Domain-specific metadata and filters made human evaluation feasible enough to sustain.

“we have a lot of domain specific stuff in this like web page things that allows us to filter data in ways that are very specific to rehat”transcript, stated

Gotchas (what bit them)

Vibe checks hide regressions.

Root cause: Manual spot checks produced a feeling of improvement but no measured success rate across use cases.

Resolution: Add assertions, traces, dashboards, and human review so changes can be measured against known failure modes.

“the moment we changed the proms it was likely that it's going to break other use cases uh and we were essentially in the dark”transcript, stated

Trace logging alone does not create learning.

Root cause: People will avoid reviewing traces if the tool makes it hard to find Rechat-specific context.

Resolution: Build a custom viewing and labeling app to remove friction from looking at data.

“if you have any friction in looking at data people are not going to do it and it will destroy the whole process”transcript, stated

LLM judges need calibration before trust.

Root cause: A model judge can disagree with human domain experts unless its critiques are aligned and checked.

Resolution: Have domain experts label critique data and iterate until the LLM judge aligns with human judgment.

“it's very very important to align the llm judge to a human because you need to know whether you can trust the LM as a judge”transcript, stated

Evaluation

Rechat evaluates Lucy through deterministic unit tests/assertions, trace logging, Metabase tracking, human review, synthetic test cases, and later LLM-judge alignment against human labels.

Metrics: Success rate · Failure rate · Assertion pass/fail results · Known failure-mode progress · Human-review cost · LLM judge alignment with human labels

“we log these results to metabase and then use metabase to like visualize and track the results so that we could see if we're making progress”transcript, stated
“did you remove as much friction as possible from looking at your data and it this will help you debug that”transcript, stated

Outcomes

The transcript gives percentage examples for unknown success rates, multiple product tool families, and a claim that human review cost falls as the evaluation framework becomes more comprehensive.

“once you have kind of this setup now you're in a position that to know whether or not you're making progress or not”transcript, stated
“the more comprehensive your eval framework is the the cost of human review goes down because you're automating more and more”transcript, stated