Back to work

AI-powered podcast intelligence platform

Role

AI / Data Engineer

Year

2025

PodcastIQ — AI podcast intelligence platform

Demo

LangGraphSnowflake CortexNeo4jdbtRAGEmbeddingsStreamlitPython

286

Episodes indexed

13.8K

Searchable chunks

9

LangGraph agents

27.8K

Graph relationships

System Architecture

The Problem

Podcasts hold thousands of hours of expert insight, but almost none of it is searchable. You can't ask a question across episodes, compare what different guests said, or verify a claim — the knowledge is locked inside audio. PodcastIQ makes that content queryable, comparable, and verifiable.

What I Built

An end-to-end pipeline that turns raw transcripts into an intelligent, queryable knowledge base:

  • Four-layer Snowflake warehouse (RAW → STAGING → CURATED → SEMANTIC), transformed and tested with dbt
  • Embeddings and summaries via Snowflake Cortex, powering semantic search over 13,807 chunks
  • A Neo4j knowledge graph modeling claims and their relationships (10,610 nodes, 27,807 edges)
  • A 9-agent LangGraph system routing each query to search, comparison, insights, and fact-checking agents
  • A Streamlit app that links every answer back to the exact timestamp in the source episode

Key Decisions

The interesting trade-offs — and why I made them:

  • Kept embeddings and search inside Snowflake with Cortex to avoid moving data across systems and keep the stack simple
  • Chose Neo4j over a relational schema because the real value is in how claims relate and evolve — a graph problem, not a table problem
  • Used LangGraph's multi-agent routing so each query type follows a specialized path instead of one overloaded prompt
  • Added hybrid fact-checking (LLM reasoning + live web search) so claims are grounded in evidence, not just model output

Challenges

Three hard problems — all solved:

  • Cypher generation failures: LLaMA 70b produced valid-looking but broken Cypher ~30% of the time, so graph queries failed at Neo4j. I built a retry loop that feeds Neo4j's exact error back to the model to self-correct — the 2nd attempt succeeds ~95% of the time.
  • Speaker attribution without audio: the pipeline never downloads audio (by design), which ruled out acoustic diarization. I built a two-tier text approach that infers guests from episode titles — which also names the guest, something diarization can't do.
  • Temporal skew: extraction over-sampled 2024–25, so trend analysis found almost nothing. I redesigned the extraction layer with year-based API filtering (publishedAfter / publishedBefore) to force balanced 2022–2024 coverage.

Results

The platform answers natural-language questions across 286 episodes with timestamp-precise citations. Temporal claim tracking surfaces how expert opinions shift over time, and hybrid fact-checking pairs LLM reasoning with live web evidence to flag and support claims.

What's Next

Extending the corpus beyond a single podcast, adding near-real-time ingestion for new episodes, and building an evaluation harness to measure and improve agent answer quality over time.