SlideShare a Scribd company logo
∏
What I learned making Bill
The helpful robot platypus that reads our docs for fun
Plaid
Account Veri
fi
cation & Payments
Fraud & Compliance
Personal Finance Insights
Credit Underwriting
Open Finance
All your Fintech solutions on a single platform
How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Todd Kerpelman at Plaid
The original hackathon project
How does it work?
Step 1: Chop up your content
Step 2: Figure out the "meaning" of each
Mowing the
lawn
Weeding
Making
dinner
Shoveling
snow
Chains on
tires
Sledding
Skiing
Pool
Beach Hot weather
Cold weather
Fun
Chore
Cross-
country skiing "Embeddings Model"
Step 3: Store all that in a database
-0.0172341652,0.0231553614,0.0176660642,-0.0137998713,,0.0070
0442726,-0.0216646139,-0.00155431416,0.0154508408,-0.0206196
96,0.0172063019,0.00771148782,-0.00135577994,0.0161195882,-0.
1500-dimensional vector
URL
https://plaid.com/docs/signal/add-to-app/
Text
for each institution that Plaid supports. Link makes it secure and easy
for users to connect their bank accounts to Plaid. Note that these
instructions cover Link on the web. For instructions on using Link
within mobile apps, see the Link documentation.Using Link, we will
Title
Signal - Add Signal to your app | Plaid Docs
So, when a user asks a question...
👩💻
Hey, Bill, how do I get
started with Plaid
Transactions?
Ooh! Lemme convert
that question into a
vector!
These documents are
closest to the vector
you just sent me.
User's
question
Vector
Embeddings
API
Vector
database
Vector
database
Now... we can ask our question
Hey, large language
model! Can you answer
this user's question...
...with the help of these
documents?
Sure can!
User's
question
Surprisingly
accurate
answer
GPT-4
A simplified version of the prompt
You are a helpful friendly chatbot that wants developers to be successful when using
the Plaid API. You are given a question and you should answer it if you can.
It's okay to say you don't know if you don't know the answer.
Feel free to include detail when relevant, and include code snippets if appropriate.
Here is some context that might prove useful in answering the user's question:
=========
{all those documents}
=========
The user's question is: "{question}"
Please format your answer in Markdown.
My favorite analogy
"Retrieval Augmented Generation"
(or RAG)
Build vs Buy
Reasons to build Reasons to buy
Less expensive in the long run Faster time to market
Fine control over everything Dedicated engineering teams
Vendor lock-in Less manual maintenance
More integrated experience
You get to learn about LLMs
Build vs Buy
I could build Twitter in a
weekend!
Setting Expectations
Will this replace your docs team?
Hooray! I still
have a job!
...but it can make your docs experience
better
Synthesizing information across different pages
Better search than search
Rephrasing generic docs for a speci
fi
c use case
Will this replace your support team?
Hooray! I still
have a job!
But you can make their lives easier
Help! Our main
account owner left the
company!
This call
failed – can you look
through your logs and
tell us why?
Can you enroll me in
this beta feature?
Something isn’t working as
described in the docs. Help us
locate the problem.
Here's a question
that's already answered
in the documentation
GPT4? You guys rich or something?
Evaluating performance
What about user feedback?
Grade your own homework
Grade your own homework
Here's a typical question
from a user!
👩💻
Got it!
User's
question
Typical
Answer
Grade your own homework
GPT-4
How did this chatbot do,
based on this criteria? Let's say 85
outta 100
👩💻
Typical
Answer
Evaluating performance
But mostly...
70% correct
25% "mostly correct"
5% plain ol' wrong
So... what happens if Bill makes a mistake?
Fix the docs!
So... what happens if Bill makes a mistake?
Maybe hard-code an answer?
How can we make it smarter?
More isn't always better
How can we make it smarter?
Can we change the way we read code?
app.post("/server/create_new_user", async (req, res, next) => {
try {
const username = escape(req.body.username);
const email = escape(req.body.email);
const userId = uuidv4();
const result = await db.run(
`INSERT INTO users(id, username, email) VALUES("${userId}", "${username}", "${email}")`
);
console.log(`User creation result is ${JSON.stringify(result)}`);
if (result["lastID"] != null) {
res.cookie("signedInUser", userId, {
maxAge: 900000,
httpOnly: true,
sameSite: "none",
secure: "false",
});
}
res.json(result);
} catch (error) {
next(error);
}
});
This code is part of a server-side application written in Node.js that interacts with
the Plaid API. It defines three functions: `getLoggedInUserId`, `getUserObject`,
and an anonymous function that handles POST requests to the "/server/
create_new_user" endpoint.
The `getLoggedInUserId` function takes a request object as an argument and
returns the value of the "signedInUser" cookie. This function is used to identify
the user who is currently logged in based on the cookies sent with the HTTP
request.
The `getUserObject` function is an asynchronous function that takes a user ID as
an argument. It queries a database for a user with the given ID and returns the
result. This function is used to retrieve the details of a user from the database.
The anonymous function is a route handler for the "/server/create_new_user"
endpoint. It is an asynchronous function that takes a request and response object,
and a next function for error handling.
When a POST request is made to this endpoint, the function first sanitizes the
How can we make it smarter?
Can we change the way we parse reference docs?
Our normal reference docs...
The way we show them to Bill...
How can we make it smarter?
Probably the bigger problem...
MORTGAGES
ANNUAL
PERCENTAGE
RATES
PAYMENT
DUE DATES
OVERDUE
PAYMENTS
How can we make it smarter?
Probably the bigger problem...
SOME
REFERENCE
DOCS ABOUT A
REST API
Other things to try, maybe...
Change the way we break up text
Try more, smaller chunks
Try fewer, larger chunks
Re
fi
ne how we import text
Try different matching models
What if we try "Three answers from the docs,
3 answers from the reference API?"
Updated embeddings API
What's made the biggest impact?
Using newer models
Having good source material
Security Concerns
Assume that any information you've fed to your chatbot
could be seen verbatim by your customer.
What about jail-breaking?
Oh no! I'm out of time
Go to kerp.blog for topics I didn't have time to discuss
And thank you!

More Related Content

PPTX
Behaviour Driven Development (BDD) - Closing the Loop on a Great Fiori UX
PDF
IRJET-Web Portal for Selling and Purchasing Old Books
DOCX
Synopsis of yashbazaar.com
 
PPTX
User Story Splitting.pptx
PPTX
Managing Content Chaos
PDF
Novel Consumer Retail Behavior Analysis From InfoScout Relies on Big Data Cho...
PPTX
Bdd with Cucumber and Mocha
PPTX
Transforming IT for Digital : Agility for Digital world
Behaviour Driven Development (BDD) - Closing the Loop on a Great Fiori UX
IRJET-Web Portal for Selling and Purchasing Old Books
Synopsis of yashbazaar.com
 
User Story Splitting.pptx
Managing Content Chaos
Novel Consumer Retail Behavior Analysis From InfoScout Relies on Big Data Cho...
Bdd with Cucumber and Mocha
Transforming IT for Digital : Agility for Digital world

Similar to How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Todd Kerpelman at Plaid (20)

PDF
CIS14: Authentication: Who are You? You are What You Eat
PDF
CIS14: Authentication: Who are You? You are What You Eat
PDF
Ajax learning tutorial
PDF
Progressive Web Apps by Millicent Convento
PDF
Business Law Paper
PPTX
The Missing Link Between SharePoint and the End User Community
PDF
Serverless Evolution during 3 years of Serverless Toronto
PDF
Mozilla Foundation Metrics - presentation to engineers
PDF
Tweak Geeks #FOS15
PPTX
Open Web Technologies and You - Durham College Student Integration Presentation
PPT
Functional requirements: Thinking Like A Pirate
PDF
Join 2017_Deep Dive_Workflows with Zapier
PPTX
SEO for Large Websites
PPTX
E-COMMERCE WITH RESPECT TO CAMERA & IT’S.pptx
DOCX
documentation on bank management system
PDF
Putting Buyers and Sellers in the Best Light, How Etsy Leverages Big Data for...
PDF
Essay On Importance Of Reading Habits. Online assignment writing service.
PDF
2012 03 27_philly_jug_rewrite_static
PPTX
Creating a Single View: Overview and Analysis
PDF
[@IndeedEng] Logrepo: Enabling Data-Driven Decisions
CIS14: Authentication: Who are You? You are What You Eat
CIS14: Authentication: Who are You? You are What You Eat
Ajax learning tutorial
Progressive Web Apps by Millicent Convento
Business Law Paper
The Missing Link Between SharePoint and the End User Community
Serverless Evolution during 3 years of Serverless Toronto
Mozilla Foundation Metrics - presentation to engineers
Tweak Geeks #FOS15
Open Web Technologies and You - Durham College Student Integration Presentation
Functional requirements: Thinking Like A Pirate
Join 2017_Deep Dive_Workflows with Zapier
SEO for Large Websites
E-COMMERCE WITH RESPECT TO CAMERA & IT’S.pptx
documentation on bank management system
Putting Buyers and Sellers in the Best Light, How Etsy Leverages Big Data for...
Essay On Importance Of Reading Habits. Online assignment writing service.
2012 03 27_philly_jug_rewrite_static
Creating a Single View: Overview and Analysis
[@IndeedEng] Logrepo: Enabling Data-Driven Decisions
Ad

More from Nordic APIs (20)

PPTX
How to Choose the Right API Platform - We Have the Tool You Need! - Mikkel Iv...
PPTX
Bulletproof Backend Architecture: Building Adaptive Services with Self-Descri...
PDF
Implementing Zero Trust Security in API Gateway with Cilium - Pubudu Gunatila...
PPTX
Event-Driven Architecture the Cloud-Native Way - Manuel Ottlik, HDI Global SE
PPTX
Navigating the Post-OpenAPI Era with Innovative API Design Frameworks - Danie...
PDF
Using Typespec for Open Finance Standards - Chris Wood, Ozone API
PPTX
Schema-first API Design Using Typespec - Cailin Smith, Microsoft
PPTX
Avoiding APIpocalypse; API Resiliency Testing FTW! - Naresh Jain, Xnsio
PPTX
How to Build an Integration Platform with Open Source - Magnus Hedner, Benify
PPTX
API Design First in Practise – An Experience Report - Hari Krishnan, Specmatic
PPTX
The Right Kind of API – How To Choose Appropriate API Protocols and Data Form...
PPTX
Why Frequent API Hackathons Are Key to Product Market Feedback and Go-to-Mark...
PPTX
Maximizing API Management Efficiency: The Power of Shifting Down with APIOps ...
PPTX
APIs Vs Events - Bala Bairapaka, Sandvik AB
PPTX
GraphQL in the Post-Hype Era - Daniel Hervas, Reckon Digital
PPTX
From Good API Design to Secure Design - Axel Grosse, 42Crunch
PPTX
API Revolution in IoT: How Platform Engineering Streamlines API Development -...
PPTX
Unlocking the ROI of API Platforms: What Success Actually Looks Like - Budhad...
PDF
Increase Your Productivity with No-Code GraphQL Mocking - Hugo Guerrero, Red Hat
PPTX
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Theodo ...
How to Choose the Right API Platform - We Have the Tool You Need! - Mikkel Iv...
Bulletproof Backend Architecture: Building Adaptive Services with Self-Descri...
Implementing Zero Trust Security in API Gateway with Cilium - Pubudu Gunatila...
Event-Driven Architecture the Cloud-Native Way - Manuel Ottlik, HDI Global SE
Navigating the Post-OpenAPI Era with Innovative API Design Frameworks - Danie...
Using Typespec for Open Finance Standards - Chris Wood, Ozone API
Schema-first API Design Using Typespec - Cailin Smith, Microsoft
Avoiding APIpocalypse; API Resiliency Testing FTW! - Naresh Jain, Xnsio
How to Build an Integration Platform with Open Source - Magnus Hedner, Benify
API Design First in Practise – An Experience Report - Hari Krishnan, Specmatic
The Right Kind of API – How To Choose Appropriate API Protocols and Data Form...
Why Frequent API Hackathons Are Key to Product Market Feedback and Go-to-Mark...
Maximizing API Management Efficiency: The Power of Shifting Down with APIOps ...
APIs Vs Events - Bala Bairapaka, Sandvik AB
GraphQL in the Post-Hype Era - Daniel Hervas, Reckon Digital
From Good API Design to Secure Design - Axel Grosse, 42Crunch
API Revolution in IoT: How Platform Engineering Streamlines API Development -...
Unlocking the ROI of API Platforms: What Success Actually Looks Like - Budhad...
Increase Your Productivity with No-Code GraphQL Mocking - Hugo Guerrero, Red Hat
Securely Boosting Any Product with Generative AI APIs - Ruben Sitbon, Theodo ...
Ad

Recently uploaded (20)

PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PPTX
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PDF
KodekX | Application Modernization Development
PPTX
Big Data Technologies - Introduction.pptx
PDF
Electronic commerce courselecture one. Pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
20250228 LYD VKU AI Blended-Learning.pptx
PDF
Machine learning based COVID-19 study performance prediction
PDF
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Advanced methodologies resolving dimensionality complications for autism neur...
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
NewMind AI Weekly Chronicles - August'25 Week I
PPTX
Cloud computing and distributed systems.
DOCX
The AUB Centre for AI in Media Proposal.docx
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
The Rise and Fall of 3GPP – Time for a Sabbatical?
ACSFv1EN-58255 AWS Academy Cloud Security Foundations.pptx
Chapter 3 Spatial Domain Image Processing.pdf
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
KodekX | Application Modernization Development
Big Data Technologies - Introduction.pptx
Electronic commerce courselecture one. Pdf
Spectral efficient network and resource selection model in 5G networks
20250228 LYD VKU AI Blended-Learning.pptx
Machine learning based COVID-19 study performance prediction
Profit Center Accounting in SAP S/4HANA, S4F28 Col11
Reach Out and Touch Someone: Haptics and Empathic Computing
Advanced methodologies resolving dimensionality complications for autism neur...
Mobile App Security Testing_ A Comprehensive Guide.pdf
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
NewMind AI Weekly Chronicles - August'25 Week I
Cloud computing and distributed systems.
The AUB Centre for AI in Media Proposal.docx

How I Built Bill, the AI-Powered Chatbot That Reads Our Docs for Fun , by Todd Kerpelman at Plaid

  • 1. ∏ What I learned making Bill The helpful robot platypus that reads our docs for fun
  • 2. Plaid Account Veri fi cation & Payments Fraud & Compliance Personal Finance Insights Credit Underwriting Open Finance All your Fintech solutions on a single platform
  • 5. How does it work?
  • 6. Step 1: Chop up your content
  • 7. Step 2: Figure out the "meaning" of each Mowing the lawn Weeding Making dinner Shoveling snow Chains on tires Sledding Skiing Pool Beach Hot weather Cold weather Fun Chore Cross- country skiing "Embeddings Model"
  • 8. Step 3: Store all that in a database -0.0172341652,0.0231553614,0.0176660642,-0.0137998713,,0.0070 0442726,-0.0216646139,-0.00155431416,0.0154508408,-0.0206196 96,0.0172063019,0.00771148782,-0.00135577994,0.0161195882,-0. 1500-dimensional vector URL https://plaid.com/docs/signal/add-to-app/ Text for each institution that Plaid supports. Link makes it secure and easy for users to connect their bank accounts to Plaid. Note that these instructions cover Link on the web. For instructions on using Link within mobile apps, see the Link documentation.Using Link, we will Title Signal - Add Signal to your app | Plaid Docs
  • 9. So, when a user asks a question... 👩💻 Hey, Bill, how do I get started with Plaid Transactions? Ooh! Lemme convert that question into a vector! These documents are closest to the vector you just sent me. User's question Vector Embeddings API Vector database Vector database
  • 10. Now... we can ask our question Hey, large language model! Can you answer this user's question... ...with the help of these documents? Sure can! User's question Surprisingly accurate answer GPT-4
  • 11. A simplified version of the prompt You are a helpful friendly chatbot that wants developers to be successful when using the Plaid API. You are given a question and you should answer it if you can. It's okay to say you don't know if you don't know the answer. Feel free to include detail when relevant, and include code snippets if appropriate. Here is some context that might prove useful in answering the user's question: ========= {all those documents} ========= The user's question is: "{question}" Please format your answer in Markdown.
  • 12. My favorite analogy "Retrieval Augmented Generation" (or RAG)
  • 13. Build vs Buy Reasons to build Reasons to buy Less expensive in the long run Faster time to market Fine control over everything Dedicated engineering teams Vendor lock-in Less manual maintenance More integrated experience You get to learn about LLMs
  • 14. Build vs Buy I could build Twitter in a weekend!
  • 16. Will this replace your docs team? Hooray! I still have a job!
  • 17. ...but it can make your docs experience better Synthesizing information across different pages Better search than search Rephrasing generic docs for a speci fi c use case
  • 18. Will this replace your support team? Hooray! I still have a job!
  • 19. But you can make their lives easier Help! Our main account owner left the company! This call failed – can you look through your logs and tell us why? Can you enroll me in this beta feature? Something isn’t working as described in the docs. Help us locate the problem. Here's a question that's already answered in the documentation
  • 20. GPT4? You guys rich or something?
  • 22. What about user feedback?
  • 23. Grade your own homework
  • 24. Grade your own homework Here's a typical question from a user! 👩💻 Got it! User's question Typical Answer
  • 25. Grade your own homework GPT-4 How did this chatbot do, based on this criteria? Let's say 85 outta 100 👩💻 Typical Answer
  • 27. But mostly... 70% correct 25% "mostly correct" 5% plain ol' wrong
  • 28. So... what happens if Bill makes a mistake? Fix the docs!
  • 29. So... what happens if Bill makes a mistake? Maybe hard-code an answer?
  • 30. How can we make it smarter? More isn't always better
  • 31. How can we make it smarter? Can we change the way we read code? app.post("/server/create_new_user", async (req, res, next) => { try { const username = escape(req.body.username); const email = escape(req.body.email); const userId = uuidv4(); const result = await db.run( `INSERT INTO users(id, username, email) VALUES("${userId}", "${username}", "${email}")` ); console.log(`User creation result is ${JSON.stringify(result)}`); if (result["lastID"] != null) { res.cookie("signedInUser", userId, { maxAge: 900000, httpOnly: true, sameSite: "none", secure: "false", }); } res.json(result); } catch (error) { next(error); } }); This code is part of a server-side application written in Node.js that interacts with the Plaid API. It defines three functions: `getLoggedInUserId`, `getUserObject`, and an anonymous function that handles POST requests to the "/server/ create_new_user" endpoint. The `getLoggedInUserId` function takes a request object as an argument and returns the value of the "signedInUser" cookie. This function is used to identify the user who is currently logged in based on the cookies sent with the HTTP request. The `getUserObject` function is an asynchronous function that takes a user ID as an argument. It queries a database for a user with the given ID and returns the result. This function is used to retrieve the details of a user from the database. The anonymous function is a route handler for the "/server/create_new_user" endpoint. It is an asynchronous function that takes a request and response object, and a next function for error handling. When a POST request is made to this endpoint, the function first sanitizes the
  • 32. How can we make it smarter? Can we change the way we parse reference docs?
  • 33. Our normal reference docs... The way we show them to Bill...
  • 34. How can we make it smarter? Probably the bigger problem... MORTGAGES ANNUAL PERCENTAGE RATES PAYMENT DUE DATES OVERDUE PAYMENTS
  • 35. How can we make it smarter? Probably the bigger problem... SOME REFERENCE DOCS ABOUT A REST API
  • 36. Other things to try, maybe... Change the way we break up text Try more, smaller chunks Try fewer, larger chunks Re fi ne how we import text Try different matching models What if we try "Three answers from the docs, 3 answers from the reference API?" Updated embeddings API
  • 37. What's made the biggest impact? Using newer models Having good source material
  • 38. Security Concerns Assume that any information you've fed to your chatbot could be seen verbatim by your customer.
  • 40. Oh no! I'm out of time Go to kerp.blog for topics I didn't have time to discuss And thank you!