AI-powered podcast intelligence platform

Demo
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.