# Build a RAG App with pgvector on Databricks Lakebase

Build a retrieval-augmented generation app over real SEC 10-K filings. It has hybrid search, company and year filters, cited answers, and a quality gate that blocks a bad deploy.

- Level: Intermediate
- Duration: About 45 min
- Cost: Free tier
- Technologies: RAG, pgvector, Databricks Lakebase, Databricks Apps, PostgreSQL

## What you will build

- A RAG app on Postgres with pgvector, deployed as a Databricks App
- A pinned snapshot of real 10-K filings, split by section and loaded with embeddings
- Hybrid retrieval that fuses vector search and full-text search
- Company and year filters, suggested questions, and numbered citations with the filing URL
- A retrieval check that must reach a 0.6 hit rate before the app deploys

## Prerequisites

- A Databricks Free Edition account
- The Databricks CLI, logged in with databricks auth login
- Python 3.9 or newer with pip
- Basic comfort with SQL and the terminal

## Run it

```bash
pip install 'labagent[rag]'
databricks auth login
labagent launch rag-sec-filings --name demo
labagent destroy rag-sec-filings --name demo
```

## Steps

1. Preflight: Check your login, the serving endpoints, and the Free Edition project limit.
2. Create the Lakebase project: Start the Postgres project that holds the vectors.
3. Fetch, parse and chunk: Download the filings snapshot, verify its checksum, and split it by section.
4. Enable pgvector and load: Create the table, embed each chunk, and load it.
5. Build the indexes: Add vector, full-text and metadata indexes.
6. Evaluate retrieval: Score retrieval on a question set. A low score stops the deploy.
7. Deploy the app: Publish the Databricks App and open it.

## FAQ

### Does this lab cost money?

It runs on Databricks Free Edition. Free Edition allows one Lakebase project and three apps, and apps stop after 24 hours.

### What if a step fails?

Every step is safe to re-run. Run the launch command again and it resumes where it stopped.

### How do I remove everything?

Run the destroy command. It removes only what this lab created, so you do not pay for leftovers.

### Where does the filings data come from?

A pinned snapshot of 10-K filings. The lab checks it against a SHA-256 checksum and refuses a mismatch.

### Why can the deploy stop before the app goes live?

The evaluate step scores retrieval on a question set. The app deploys only if the hit rate reaches 0.6.

## Next steps

- Lab page: https://becloudready.com/labs/catalog/rag-sec-filings
- Private environments for your team: https://becloudready.com/labs/teams
- Corporate workshops: https://becloudready.com/workshops
