---
title: "Tim Ferriss AI"
description: "Ask AI questions about Tim Ferriss or any of his guests and get human-like answers based on what was said in any episode."
date: 2023-02-12
tags: [ai, ai-and-productivity]
url: https://nem035.com/projects/tim-ferriss-ai
---


[Tim Ferriss AI - Click to try it out](https://tim.nem.ai)

---

As a way to examine what's possible with OpenAI's [latest embeddings model](https://openai.com/blog/new-and-improved-embedding-model/) called `text-embedding-ada-002`, I spent the weekend building a Tim Ferriss AI to answer questions addressed to him or any of his past guests. 

We can use it to get human-like answers based on what was said in any episode. 

## TLDR;

The site uses a semantic search to find the chunks of text across all episodes that talk about what the question asks. Then it uses a GPT-3 model to generate a coherent answer.

## Examples

See a few examples below on how it works:


<hr />


<hr />


<hr />


<hr />


<hr />


<hr />

## Setup

I crawled 451 episode transcripts, chunked them up into smaller segments of text roughly paragraph-size, and then used the embeddings model to embed each chunk into a 1536-dimensional vector.

## Run loop

When you pose a question, the following things happen:

1. question text gets embedded 
2. that embedding gets matched to N closest embeddings across all transcript chunks
3. the matched chunks get combined into a context string
4. the context string and the question get combined into a prompt
5. prompt is sent to another AI model to formulate into a coherent answer
5. include a sorted-by-similarity list of episode links from all chunks (since all those episodes talk about what the question asked)

## Code

The loop above translates to the following code:

```js
// question text gets embedded 
const embedding = await getEmbedding(question);

// embedding gets matched to N closest embeddings across all transcript chunks
const trascriptChunks = await matchTranscriptChunks(question, embedding);

// matched chunks get combined into a context string
const context = combineChunksIntoContext(trascriptChunks);

// context string and the question get combined into a prompt
const prompt = buildPrompt(context, question);

// prompt is sent to another AI model to formulate into a coherent answer
const answer = await getAnswer(prompt);

// include a sorted-by-similarity list of episode links from all chunks
const sortedEpisodes = await getMatchedEpisodesSortedByRelevance(trascriptChunks);
```

---

Here's a [link try it out](https://tim.nem.ai).

[Reach out](/) if you'd like to chat.