Cover....1
Copyright....4
Table of Contents....5
Preface....9
Who This Book Is For....9
What Youll Learn and How the Book Is Organized....10
Conventions Used in This Book....10
Using Code Examples....11
OReilly Online Learning....12
How to Contact Us....12
Acknowledgments....12
Chapter 1. Getting Started with RAG....15
1.1 Identifying High-Value RAG Use Cases for Your Organization....17
Problem....17
Solution....17
Discussion....19
See Also....20
1.2 Choosing Your IDE and Coding Agent Setup....20
Problem....20
Solution....20
Discussion....22
See Also....22
1.3 Getting Started with Jupyter Notebooks in VS Code....22
Problem....22
Solution....22
Discussion....23
See Also....24
1.4 Storing Secrets and API Keys with .env Files....24
Problem....24
Solution....24
Discussion....26
See Also....26
1.5 Building Your First RAG App....27
Problem....27
Solution....27
Discussion....31
See Also....32
1.6 Choosing the Frameworks and Libraries for Your RAG Applications....32
Problem....32
Solution....32
Discussion....34
1.7 Running the Code Examples in the Book Repository....35
Problem....35
Solution....35
Discussion....36
See Also....36
Chapter 2. Foundation Models....37
2.1 Defining a Suitable Prompt Template....38
Problem....38
Solution....38
Discussion....40
See Also....40
2.2 Selecting the Right Language Model for Your Task....40
Problem....40
Solution....41
Discussion....42
See Also....43
2.3 Generating Content with the OpenAI API....43
Problem....43
Solution....43
Discussion....46
See Also....47
2.4 Generating Content with Googles Gemini Models....47
Problem....47
Solution....47
Discussion....48
See Also....49
2.5 Generating Content with the Anthropic API....49
Problem....49
Solution....49
Discussion....50
See Also....51
2.6 Running Open Source Models Locally with Ollama....51
Problem....51
Solution....51
Discussion....54
See Also....54
2.7 Creating Structured Outputs with the OpenAI SDK and Pydantic....55
Problem....55
Solution....55
Discussion....57
See Also....58
Chapter 3. Loading Data....59
3.1 Loading Word Files in Python....61
Problem....61
Solution....61
Discussion....63
See Also....64
3.2 Loading PDF Files....64
Problem....64
Solution....64
Discussion....65
See Also....66
3.3 Loading and Handling Tabular Data from Excel and CSV Files....66
Problem....66
Solution....66
Discussion....70
See Also....71
3.4 Loading Structured Data from a PostgreSQL Database....71
Problem....71
Solution....71
Discussion....72
See Also....73
3.5 Loading Audio Files via Speech-to-Text Models....73
Problem....73
Solution....73
Discussion....73
See Also....74
3.6 Extracting Text from Images and PDFs via Tesseract OCR....75
Problem....75
Solution....75
Discussion....77
See Also....78
3.7 Extracting Text from Images via Multimodal Models....79
Problem....79
Solution....79
Discussion....81
See Also....81
3.8 Generating Text Description for Images via Multimodal Models....82
Problem....82
Solution....82
Discussion....83
See Also....84
3.9 Generating Text Summaries for Embedded Tables via Multimodal Models....84
Problem....84
Solution....84
Discussion....86
See Also....87
3.10 Parsing PDFs with Multimodal Content....87
Problem....87
Solution....87
Discussion....90
See Also....91
3.11 Loading Videos via Speech-to-Text and Multimodal Models....91
Problem....91
Solution....91
Discussion....95
See Also....96
Chapter 4. Data Preparation....97
4.1 Adding Metadata to Enable Metadata Filtering....98
Problem....98
Solution....98
Discussion....102
See Also....103
4.2 Enhancing Data Quality by Replacing Abbreviations and Technical Terms....104
Problem....104
Solution....104
Discussion....106
See Also....109
4.3 Improving Search Accuracy by Creating Hypothetical Questions for Text Chunks....109
Problem....109
Solution....109
Discussion....111
See Also....113
4.4 Splitting Documents via Character Splitting....113
Problem....113
Solution....113
Discussion....114
See Also....115
4.5 Splitting Documents with Recursive Text Splitters....115
Problem....115
Solution....115
Discussion....117
See Also....119
4.6 Chunking Documents with Document-Aware Splitting....119
Problem....119
Solution....119
Discussion....120
See Also....122
4.7 Splitting Text with Semantic-Aware Chunkers....122
Problem....122
Solution....122
Discussion....124
See Also....125
4.8 Splitting Text with Agentic Chunkers....125
Problem....125
Solution....125
Discussion....128
See Also....129
Chapter 5. Embeddings....131
5.1 Mapping the Linguistic Meaning of Text Chunks to a Numerical Representation....132
Problem....132
Solution....132
Discussion....134
See Also....137
5.2 Visualizing Semantic Relationships Between Text Chunks via Dimensionality Reduction Techniques....137
Problem....137
Solution....137
Discussion....140
See Also....141
5.3 Calculating the Distance Between Embeddings....141
Problem....141
Solution....141
Discussion....143
See Also....144
5.4 Choosing the Right Embedding Model....145
Problem....145
Solution....145
Discussion....145
See Also....146
5.5 Generating Embeddings for Images and Text with CLIP....147
Problem....147
Solution....147
Discussion....150
See Also....150
5.6 Performing Text Classification with Embeddings....151
Problem....151
Solution....151
Discussion....154
See Also....155
5.7 Improving Search Results with a Hybrid Search Approach....155
Problem....155
Solution....155
Discussion....158
See Also....159
Chapter 6. Vector Databases and Similarity Searches....161
6.1 Choosing the Right Vector Database....162
Problem....162
Solution....162
Discussion....164
See Also....165
6.2 Storing and Searching Embeddings with FAISS....165
Problem....165
Solution....166
Discussion....168
See Also....169
6.3 Storing and Working with Embeddings in a Chroma Vector Database....169
Problem....169
Solution....169
Discussion....172
See Also....173
6.4 Storing Embeddings in PostgreSQL with the pgvector Extension....173
Problem....173
Solution....173
Discussion....177
See Also....178
6.5 Performing Similarity Search in PostgreSQL....178
Problem....178
Solution....178
Discussion....180
See Also....181
6.6 Accelerating Vector Searches in PostgreSQL with Indexing Techniques....181
Problem....181
Solution....181
Discussion....185
See Also....187
6.7 Combining Keyword and Similarity Search to Improve Retrieval Accuracy with PostgreSQL....187
Problem....187
Solution....188
Discussion....189
See Also....190
Chapter 7. Retrieval....191
7.1 Optimizing Query Results via Metadata Filtering in PostgreSQL....194
Problem....194
Solution....194
Discussion....197
See Also....198
7.2 Enhancing Retrieval Accuracy with HyDE....198
Problem....198
Solution....198
Discussion....201
See Also....202
7.3 Improving Search Results with Multiquery Retrieval....202
Problem....202
Solution....202
Discussion....205
See Also....205
7.4 Addressing Complex Requests by Designing a Query Routing System....206
Problem....206
Solution....206
Discussion....209
See Also....210
7.5 Enhancing Retrieved Documents by Designing an Auto-Merging Retriever....211
Problem....211
Solution....211
Discussion....213
See Also....214
7.6 Retrieving More Complete Text Chunks with a Sentence Window Retriever....214
Problem....214
Solution....214
Discussion....216
See Also....217
7.7 Improving Retrieval Relevancy with Reranking Methods....217
Problem....217
Solution....217
Discussion....220
See Also....220
7.8 Decomposing Complex Queries into Multiple Subqueries....220
Problem....220
Solution....221
Discussion....223
See Also....224
Chapter 8. Agentic RAG....225
8.1 Designing a Custom Tool in Python....229
Problem....229
Solution....229
Discussion....229
See Also....230
8.2 Using Workflow Patterns in Multiagent Systems....230
Problem....230
Solution....230
Discussion....234
See Also....235
8.3 Choosing an Agentic Framework....235
Problem....235
Solution....235
Discussion....237
See Also....238
8.4 Building an Agentic System via Function Calling....238
Problem....238
Solution....238
Discussion....244
See Also....244
8.5 Accelerating Agents with asyncio....245
Problem....245
Solution....245
Discussion....249
See Also....250
8.6 Building a Sales Negotiation Agent with OpenAIs Agents SDK and Chroma....250
Problem....250
Solution....250
Discussion....257
See Also....259
8.7 Enriching Your Agents Capabilities with MCP Tools....259
Problem....259
Solution....259
Discussion....263
See Also....264
8.8 Building an Agentic System with LangGraph....264
Problem....264
Solution....264
Discussion....271
See Also....273
Chapter 9. Graph RAG....275
9.1 Creating Your First Neo4j Knowledge Graph and Feeding It with Text from Documents....277
Problem....277
Solution....278
Discussion....284
See Also....284
9.2 Extending the Knowledge Graph with Structured Data....285
Problem....285
Solution....285
Discussion....288
See Also....288
9.3 Building Your First Cypher Query....289
Problem....289
Solution....289
Discussion....291
See Also....291
9.4 Enabling Semantic Search on a Neo4j Knowledge Graph....292
Problem....292
Solution....292
Discussion....295
See Also....295
9.5 Optimizing the Knowledge Graph for RAG Systems....295
Problem....295
Solution....295
Discussion....297
See Also....297
Chapter 10. Evaluating RAG Systems....299
10.1 Choosing the Right Evaluation Metrics for RAG Systems....303
Problem....303
Solution....303
Discussion....306
See Also....307
10.2 Evaluating RAG Systems by Humans....307
Problem....307
Solution....307
Discussion....309
See Also....310
10.3 Creating Synthetic Data for Automated Testing....310
Problem....310
Solution....310
Discussion....314
See Also....315
10.4 Evaluating the Retriever Step by Calculating Context Precisionk....315
Problem....315
Solution....316
Discussion....320
See Also....322
10.5 Evaluating Faithfulness During Generation with LLM-as-a-Judge....322
Problem....322
Solution....322
Discussion....329
See Also....330
10.6 Evaluating the Response Relevancy of Your RAG System....330
Problem....330
Solution....330
Discussion....336
See Also....336
Chapter 11. RAG Web Apps....337
11.1 Building Your First Streamlit App....338
Problem....338
Solution....338
Discussion....339
See Also....340
11.2 Building a Chatbot App with Streamlit....340
Problem....340
Solution....340
Discussion....349
See Also....350
11.3 Adding PDF Analyzer Functionality to Your Chatbot....350
Problem....350
Solution....350
Discussion....354
See Also....355
11.4 Connecting Your RAG App to a SQL Database....355
Problem....355
Solution....355
Discussion....360
See Also....361
11.5 Deploying Your Streamlit App with Docker and AWS....361
Problem....361
Solution....361
Discussion....363
See Also....364
Index....365
About the Author....377
As businesses race to unlock the full potential of large language models (LLMs), a critical challenge has emerged: How do you connect these tools to real-time, external data to solve real-world problems? Retrieval-augmented generation (RAG) is the answer. By combining LLMs with information retrieval, RAG empowers you to build everything from intelligent chatbots to autonomous, task-solving agents.
Packed with over 70 practical recipes, this go-to guide tackles a wide range of GenAI applications through structured hands-on learning. Author Dominik Polzer provides the tools you need to design, implement, and optimize RAG systems for your unique use cases. Whether you're working with simple data retrieval or designing cutting-edge autonomous agents, this cookbook will help you stay ahead of the curve.