<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sumayea Rahman</title>
    <description>The latest articles on DEV Community by Sumayea Rahman (@sumayea104).</description>
    <link>https://dev.to/sumayea104</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3912302%2Fe3ead82e-1014-4511-82cb-97ade5029c78.png</url>
      <title>DEV Community: Sumayea Rahman</title>
      <link>https://dev.to/sumayea104</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sumayea104"/>
    <language>en</language>
    <item>
      <title>Why I Built RAG From Scratch Before Using LangChain</title>
      <dc:creator>Sumayea Rahman</dc:creator>
      <pubDate>Sun, 07 Jun 2026 08:21:00 +0000</pubDate>
      <link>https://dev.to/sumayea104/why-i-built-rag-from-scratch-before-using-langchain-1fmd</link>
      <guid>https://dev.to/sumayea104/why-i-built-rag-from-scratch-before-using-langchain-1fmd</guid>
      <description>&lt;h2&gt;
  
  
  Technical Note #01: Why I Built RAG From Scratch Before Using LangChain
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Part of the Agentic Finance Beast Technical Notes series&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Published:&lt;/strong&gt; June 7, 2026&lt;br&gt;
&lt;strong&gt;Reading Time:&lt;/strong&gt; ~6 minutes&lt;/p&gt;


&lt;h2&gt;
  
  
  About This Note
&lt;/h2&gt;

&lt;p&gt;This technical note documents my first implementation of a Retrieval-Augmented Generation (RAG) pipeline.&lt;/p&gt;

&lt;p&gt;The goal was not to build a production-ready system.&lt;/p&gt;

&lt;p&gt;The goal was to understand what actually happens between a user's question and an AI-generated answer before relying on frameworks such as LangChain.&lt;/p&gt;

&lt;p&gt;Rather than starting with abstractions, I wanted to build the core pieces myself and learn where real-world AI systems succeed and fail.&lt;/p&gt;


&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;p&gt;I built a minimal RAG pipeline from scratch using Gemini Embeddings, cosine similarity search, and Mistral.&lt;/p&gt;

&lt;p&gt;The biggest lesson wasn't prompt engineering.&lt;/p&gt;

&lt;p&gt;It was discovering that retrieval quality often has a greater impact on answer quality than the language model itself.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Question That Started It
&lt;/h2&gt;

&lt;p&gt;Most RAG tutorials follow a similar pattern:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install LangChain.&lt;/li&gt;
&lt;li&gt;Connect a vector database.&lt;/li&gt;
&lt;li&gt;Load a document.&lt;/li&gt;
&lt;li&gt;Ask questions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Within minutes, you have a working application.&lt;/p&gt;

&lt;p&gt;That's impressive.&lt;/p&gt;

&lt;p&gt;But it left me with a question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the system retrieves the wrong information, how would I debug it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Frameworks make development faster, but they also hide implementation details.&lt;/p&gt;

&lt;p&gt;Before using those abstractions, I wanted to understand the individual components behind Retrieval-Augmented Generation.&lt;/p&gt;

&lt;p&gt;So I built a simple version myself.&lt;/p&gt;

&lt;p&gt;No LangChain.&lt;/p&gt;

&lt;p&gt;No vector database.&lt;/p&gt;

&lt;p&gt;No orchestration framework.&lt;/p&gt;

&lt;p&gt;Just Python, embeddings, similarity search, and an LLM.&lt;/p&gt;


&lt;h2&gt;
  
  
  What Is RAG?
&lt;/h2&gt;

&lt;p&gt;Retrieval-Augmented Generation combines two systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A retrieval system that finds relevant information.&lt;/li&gt;
&lt;li&gt;A generation system that uses that information to answer questions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of relying entirely on the language model's training data, relevant information is retrieved at runtime and injected into the prompt.&lt;/p&gt;

&lt;p&gt;The simplified workflow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document
   ↓
Chunking
   ↓
Embeddings
   ↓
Similarity Search
   ↓
Context Retrieval
   ↓
LLM Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This architecture allows AI systems to answer questions using external knowledge without retraining the model.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Architecture I Built
&lt;/h2&gt;

&lt;p&gt;My implementation consisted of five core stages:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Document
   ↓
Sentence-Based Chunking
   ↓
Gemini Embeddings
   ↓
Cosine Similarity Search
   ↓
Mistral Answer Generation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The knowledge base contained a short document about AI agents.&lt;/p&gt;

&lt;p&gt;Users could ask questions, and the system would retrieve relevant information before generating a response.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 1: Chunking the Document
&lt;/h2&gt;

&lt;p&gt;The first step was splitting the document into smaller pieces.&lt;/p&gt;

&lt;p&gt;I used a simple sentence-based approach:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;replace&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first, this felt like a minor preprocessing step.&lt;/p&gt;

&lt;p&gt;It wasn't.&lt;/p&gt;

&lt;p&gt;I quickly realized that chunking affects retrieval quality directly.&lt;/p&gt;

&lt;p&gt;Large chunks preserve context but often include irrelevant information.&lt;/p&gt;

&lt;p&gt;Small chunks improve retrieval precision but can lose important context.&lt;/p&gt;

&lt;p&gt;Even in this small project, chunking turned out to be a meaningful engineering decision.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 2: Generating Embeddings
&lt;/h2&gt;

&lt;p&gt;After chunking the document, I generated embeddings using Gemini's embedding API.&lt;/p&gt;

&lt;p&gt;Each chunk was converted into a high-dimensional vector representation.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;embedding&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{}).&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;values&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before building this project, embeddings felt somewhat magical.&lt;/p&gt;

&lt;p&gt;After seeing the actual vectors returned by the API, the concept became easier to understand.&lt;/p&gt;

&lt;p&gt;Embeddings allow machines to compare meaning instead of matching exact words.&lt;/p&gt;

&lt;p&gt;For example, a query about decision-making could retrieve information related to reasoning even if the exact keywords do not appear.&lt;/p&gt;

&lt;p&gt;That capability is what makes semantic search possible.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 3: Implementing Similarity Search
&lt;/h2&gt;

&lt;p&gt;Instead of using a vector database, I implemented cosine similarity manually.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;cosine_similarity&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;dot&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;zip&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;norm_a&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;norm_b&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sqrt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;sum&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;b&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;dot&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;norm_a&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="n"&gt;norm_b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This was one of the most interesting parts of the project.&lt;/p&gt;

&lt;p&gt;Before building it, vector search seemed complicated.&lt;/p&gt;

&lt;p&gt;After implementing it myself, I realized the mathematics behind retrieval is relatively straightforward.&lt;/p&gt;

&lt;p&gt;The challenge is not the formula.&lt;/p&gt;

&lt;p&gt;The challenge is consistently retrieving the most useful context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 4: Finding Relevant Information
&lt;/h2&gt;

&lt;p&gt;When a user asks a question, the same embedding model converts the question into a vector.&lt;/p&gt;

&lt;p&gt;The query embedding is then compared against every document embedding.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;best_idx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;similarities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;index&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;similarities&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The chunk with the highest similarity score becomes the retrieved context.&lt;/p&gt;

&lt;p&gt;For example, questions such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is an AI agent?&lt;/li&gt;
&lt;li&gt;How do AI agents differ from traditional programs?&lt;/li&gt;
&lt;li&gt;What can financial AI agents do?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;successfully retrieved relevant information from the knowledge base.&lt;/p&gt;

&lt;p&gt;For a minimal implementation, the results were surprisingly effective.&lt;/p&gt;




&lt;h2&gt;
  
  
  Step 5: Grounding the Response
&lt;/h2&gt;

&lt;p&gt;Once relevant context is retrieved, it is passed to Mistral alongside the user's question.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;Context&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;Question&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model is instructed to answer using only the provided context.&lt;/p&gt;

&lt;p&gt;This is where retrieval and generation come together.&lt;/p&gt;

&lt;p&gt;Without retrieval, the model answers based on its training data.&lt;/p&gt;

&lt;p&gt;With retrieval, the model answers using information supplied at runtime.&lt;/p&gt;

&lt;p&gt;This simple shift dramatically improves factual grounding.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Surprised Me Most
&lt;/h2&gt;

&lt;p&gt;Before building this project, I assumed the language model would be the most important part of the system.&lt;/p&gt;

&lt;p&gt;I was wrong.&lt;/p&gt;

&lt;p&gt;Most answer quality issues were retrieval issues.&lt;/p&gt;

&lt;p&gt;When retrieval returned weak context, answer quality suffered.&lt;/p&gt;

&lt;p&gt;When retrieval returned relevant context, answer quality improved significantly.&lt;/p&gt;

&lt;p&gt;This changed how I think about AI applications.&lt;/p&gt;

&lt;p&gt;Prompt engineering matters.&lt;/p&gt;

&lt;p&gt;Model selection matters.&lt;/p&gt;

&lt;p&gt;But retrieval quality often determines whether an answer is useful in the first place.&lt;/p&gt;




&lt;h2&gt;
  
  
  Engineering Tradeoffs I Encountered
&lt;/h2&gt;

&lt;p&gt;Even in a small project, several tradeoffs became visible.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simplicity vs Context
&lt;/h3&gt;

&lt;p&gt;Sentence-level chunking was easy to implement.&lt;/p&gt;

&lt;p&gt;However, preserving context becomes more difficult as chunk sizes become smaller.&lt;/p&gt;

&lt;h3&gt;
  
  
  Precision vs Coverage
&lt;/h3&gt;

&lt;p&gt;Retrieving a single best match is simple.&lt;/p&gt;

&lt;p&gt;Retrieving multiple relevant chunks provides broader coverage but introduces additional complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Learning vs Production
&lt;/h3&gt;

&lt;p&gt;Building retrieval manually helped me understand the system.&lt;/p&gt;

&lt;p&gt;In production environments, dedicated vector databases and retrieval frameworks become necessary.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I Got Wrong
&lt;/h2&gt;

&lt;p&gt;Before starting this project, I believed prompt engineering would have the greatest impact on answer quality.&lt;/p&gt;

&lt;p&gt;The implementation showed otherwise.&lt;/p&gt;

&lt;p&gt;Poor retrieval produced poor answers regardless of prompt quality.&lt;/p&gt;

&lt;p&gt;Improving retrieval had a larger effect than rewriting prompts.&lt;/p&gt;

&lt;p&gt;That was one of the most valuable lessons from the entire exercise.&lt;/p&gt;




&lt;h2&gt;
  
  
  Limitations of This Version
&lt;/h2&gt;

&lt;p&gt;This implementation intentionally prioritizes learning over scalability.&lt;/p&gt;

&lt;p&gt;Several important features are missing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top-K retrieval&lt;/li&gt;
&lt;li&gt;Persistent vector storage&lt;/li&gt;
&lt;li&gt;Metadata filtering&lt;/li&gt;
&lt;li&gt;Conversation memory&lt;/li&gt;
&lt;li&gt;Retrieval evaluation metrics&lt;/li&gt;
&lt;li&gt;Hybrid search techniques&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These limitations are acceptable because the objective was understanding the fundamentals rather than building a production-ready system.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This implementation serves as the foundation for future work within Agentic Finance Beast.&lt;/p&gt;

&lt;p&gt;The next improvements I plan to explore include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top-K retrieval instead of single-result retrieval&lt;/li&gt;
&lt;li&gt;Better chunking strategies&lt;/li&gt;
&lt;li&gt;Vector storage using pgvector&lt;/li&gt;
&lt;li&gt;Financial document retrieval&lt;/li&gt;
&lt;li&gt;Multi-step workflows with LangGraph&lt;/li&gt;
&lt;li&gt;Agent memory and reasoning systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each improvement builds upon the concepts explored in this first implementation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building a RAG pipeline from scratch did not make me an expert in retrieval systems.&lt;/p&gt;

&lt;p&gt;What it did provide was a practical understanding of how retrieval, embeddings, similarity search, and generation work together.&lt;/p&gt;

&lt;p&gt;Frameworks such as LangChain are incredibly useful.&lt;/p&gt;

&lt;p&gt;But understanding the fundamentals behind those abstractions provides a different kind of value.&lt;/p&gt;

&lt;p&gt;When something breaks, I now have a mental model for where to investigate.&lt;/p&gt;

&lt;p&gt;For me, that understanding made building from scratch worthwhile.&lt;/p&gt;




&lt;h3&gt;
  
  
  Repository
&lt;/h3&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/Sumayea104/agentic-finance-beast" rel="noopener noreferrer"&gt;https://github.com/Sumayea104/agentic-finance-beast&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>rag</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
