<?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>Forem: Peter Damiano </title>
    <description>The latest articles on Forem by Peter Damiano  (@petediano).</description>
    <link>https://forem.com/petediano</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%2F3919995%2F8d808462-c0cb-41cc-aa6f-14b36d100468.jpg</url>
      <title>Forem: Peter Damiano </title>
      <link>https://forem.com/petediano</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/petediano"/>
    <language>en</language>
    <item>
      <title>Beyond Vector Search: Why GraphRAG is the Future of LLM Context</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Mon, 11 May 2026 15:56:27 +0000</pubDate>
      <link>https://forem.com/petediano/beyond-vector-search-why-graphrag-is-the-future-of-llm-context-3k8e</link>
      <guid>https://forem.com/petediano/beyond-vector-search-why-graphrag-is-the-future-of-llm-context-3k8e</guid>
      <description>&lt;h1&gt;
  
  
  Beyond Vector Search: Why GraphRAG is the Future of LLM Context
&lt;/h1&gt;

&lt;p&gt;For the past year, the industry standard for grounding LLMs has been Retrieval-Augmented Generation (RAG) using vector databases. While effective for semantic similarity, vector search often struggles with "global" queries—questions that require understanding relationships across disparate documents.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Pure Vector RAG
&lt;/h2&gt;

&lt;p&gt;Vector search relies on embedding chunks of text into high-dimensional space. If you ask, "What are the main themes across all company meetings?", a vector search will struggle to retrieve the fragmented, interconnected context needed for a holistic answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter: GraphRAG
&lt;/h2&gt;

&lt;p&gt;GraphRAG combines the power of &lt;strong&gt;Knowledge Graphs&lt;/strong&gt; with LLMs. By extracting entities and their relationships, we can map out a structured web of information. &lt;/p&gt;

&lt;h3&gt;
  
  
  Why it wins:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Relationship Mapping&lt;/strong&gt;: It understands that Entity A is connected to Entity B, not just that they appear in similar paragraphs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Reasoning&lt;/strong&gt;: LLMs can traverse the graph to summarize clusters of information, providing an "overview" that vector search can't match.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Hallucinations&lt;/strong&gt;: By enforcing constraints through graph schemas, the model is less likely to drift during generation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A Simple Implementation Concept
&lt;/h2&gt;

&lt;p&gt;To implement a basic GraphRAG pipeline, you need to transition from text-to-chunks to text-to-graph:&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="c1"&gt;# Conceptual flow for extracting triples
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_experimental.graph_transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;LLMGraphTransformer&lt;/span&gt;

&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ChatOpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;model_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;graph_transformer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;LLMGraphTransformer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Extract nodes and edges from document chunks
&lt;/span&gt;&lt;span class="n"&gt;graph_documents&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graph_transformer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;convert_to_graph_documents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;documents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Store in a graph database like Neo4j
&lt;/span&gt;&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_graph_documents&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;graph_documents&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Verdict
&lt;/h2&gt;

&lt;p&gt;Vector search isn't dead—it's evolving into a hybrid approach. The future of enterprise AI isn't just about semantic similarity; it's about structural understanding. If you're building RAG pipelines today, start looking into integrating graph structures. Your users will notice the difference in reasoning quality immediately.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>The Evolution of RAG: Why Agentic Workflows are the New Standard</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Mon, 11 May 2026 12:42:17 +0000</pubDate>
      <link>https://forem.com/petediano/the-evolution-of-rag-why-agentic-workflows-are-the-new-standard-5d62</link>
      <guid>https://forem.com/petediano/the-evolution-of-rag-why-agentic-workflows-are-the-new-standard-5d62</guid>
      <description>&lt;h1&gt;
  
  
  The Evolution of RAG: Why Agentic Workflows are the New Standard
&lt;/h1&gt;

&lt;p&gt;For the past two years, Retrieval-Augmented Generation (RAG) has been the gold standard for connecting LLMs to private data. However, the 'retrieve-then-generate' paradigm is hitting a wall: complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limitation of Static RAG
&lt;/h2&gt;

&lt;p&gt;Traditional RAG pipelines act as static lookups. If a user asks a complex, multi-part question, a standard RAG system often struggles because it assumes a single context injection is enough to answer the prompt. &lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Agentic RAG
&lt;/h2&gt;

&lt;p&gt;Agentic RAG introduces &lt;strong&gt;reasoning&lt;/strong&gt; and &lt;strong&gt;looping&lt;/strong&gt;. Instead of a single retrieval step, an agent:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Decomposes the user query into sub-tasks.&lt;/li&gt;
&lt;li&gt;Decides whether it needs to search a vector database, query an API, or perform a calculation.&lt;/li&gt;
&lt;li&gt;Iteratively refines the answer based on intermediate findings.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Simple Conceptual Implementation (Python)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;initialize_agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Tool&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.llms&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="c1"&gt;# Define tools
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_knowledge_base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Simulate vector search
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The company profit in Q3 was $5M.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;Tool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;KnowledgeBase&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;func&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;search_knowledge_base&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Search internal docs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize Agent
&lt;/span&gt;&lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;temperature&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;initialize_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;zero-shot-react-description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What was the Q3 profit and what does that mean for our Q4 strategy?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Takeaways
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Tool Usage:&lt;/strong&gt; Models are no longer just passive text generators; they are orchestrators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feedback Loops:&lt;/strong&gt; Agents can self-correct when a retrieval attempt yields irrelevant data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; By shifting to an agentic architecture, your system becomes adaptable to new data sources without needing a complete refactor of your retrieval logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The future isn't just about better retrieval algorithms; it's about better reasoning frameworks. Start building agents today!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Moving Beyond Naive RAG: The Rise of Agentic Retrieval</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Mon, 11 May 2026 09:43:36 +0000</pubDate>
      <link>https://forem.com/petediano/moving-beyond-naive-rag-the-rise-of-agentic-retrieval-14an</link>
      <guid>https://forem.com/petediano/moving-beyond-naive-rag-the-rise-of-agentic-retrieval-14an</guid>
      <description>&lt;h1&gt;
  
  
  Moving Beyond Naive RAG: The Rise of Agentic Retrieval
&lt;/h1&gt;

&lt;p&gt;For the past year, Retrieval-Augmented Generation (RAG) has been the gold standard for grounding LLMs. But let's face it: naive RAG—taking a user query, turning it into an embedding, and doing a similarity search—is often fragile. It fails at multi-hop reasoning and lacks the ability to self-correct.&lt;/p&gt;

&lt;p&gt;Enter &lt;strong&gt;Agentic RAG&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is Agentic RAG?
&lt;/h3&gt;

&lt;p&gt;Instead of a static pipeline, Agentic RAG treats the retrieval process as an autonomous agent's task. The agent decides whether it needs to perform a search, query a SQL database, or reach out to an external API. It can look at the retrieved context, realize it's insufficient, and try a different search strategy.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Shift in Architecture
&lt;/h3&gt;

&lt;p&gt;In traditional RAG, the logic is hard-coded. In Agentic RAG, we use tools:&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="c1"&gt;# Example of an agent-based retrieval tool using LangChain/LangGraph
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;

&lt;span class="nd"&gt;@tool&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;search_knowledge_base&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Useful for when you need to answer questions about proprietary data.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="c1"&gt;# Implementation logic for high-performance vector search
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;

&lt;span class="c1"&gt;# The agent can now decide to use this tool dynamically
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why it matters:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Decision Making:&lt;/strong&gt; The model evaluates if it has enough info to answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-Correction:&lt;/strong&gt; If the retrieved documents don't contain the answer, the agent can rephrase the query or broaden its search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Source Synthesis:&lt;/strong&gt; It can pull data from a vector DB &lt;em&gt;and&lt;/em&gt; a live documentation API in a single turn.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Getting Started
&lt;/h3&gt;

&lt;p&gt;If you want to implement this today, look into &lt;strong&gt;LangGraph&lt;/strong&gt; for building stateful, multi-actor applications, or &lt;strong&gt;LlamaIndex’s Query Engine&lt;/strong&gt; tools. Stop building static pipelines and start building agents that reason about their context.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Beyond Vector Search: Mastering Contextual Retrieval for LLMs</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sun, 10 May 2026 19:13:30 +0000</pubDate>
      <link>https://forem.com/petediano/beyond-vector-search-mastering-contextual-retrieval-for-llms-45af</link>
      <guid>https://forem.com/petediano/beyond-vector-search-mastering-contextual-retrieval-for-llms-45af</guid>
      <description>&lt;h1&gt;
  
  
  Beyond Vector Search: Mastering Contextual Retrieval for LLMs
&lt;/h1&gt;

&lt;p&gt;Retrieval-Augmented Generation (RAG) has become the gold standard for grounding LLMs in proprietary data. However, the 'naive RAG' approach—chunking documents and performing simple cosine similarity—is failing to scale for complex enterprise needs. &lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: The 'Lost in the Middle' Phenomenon
&lt;/h2&gt;

&lt;p&gt;LLMs struggle when relevant information is buried in long, noisy context windows. Simple vector retrieval often pulls 'top-k' results that might look semantically similar but lack the specific nuance required for a correct answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: Contextual Retrieval
&lt;/h2&gt;

&lt;p&gt;To move to production-grade RAG, we must adopt a multi-layered retrieval strategy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Search:&lt;/strong&gt; Combining Keyword Search (BM25) with Vector Search to ensure exact terminology matching.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Re-ranking:&lt;/strong&gt; Using a Cross-Encoder to re-evaluate the relevance of retrieved chunks after the initial search.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Enrichment:&lt;/strong&gt; Prepending metadata or document summaries to chunks before embedding to provide better global awareness.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Implementation Snippet (Python)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;sentence_transformers&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;CrossEncoder&lt;/span&gt;

&lt;span class="c1"&gt;# Initial search results
&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How does our internal API handle authentication?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;search_engine&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Re-ranking to improve precision
&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;CrossEncoder&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cross-encoder/ms-marco-MiniLM-L-6-v2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;pairs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;results&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;scores&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;predict&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;pairs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Sort results by relevance score
&lt;/span&gt;&lt;span class="n"&gt;ranked_results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;sorted&lt;/span&gt;&lt;span class="p"&gt;(&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;results&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;scores&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="k"&gt;lambda&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;x&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;reverse&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Precision is the new KPI. If your RAG system is hallucinating or missing key data, stop tuning your chunk size and start improving your retrieval pipeline. The future of AI isn't just bigger context windows; it's smarter, more precise information access.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Moving Beyond Chatbots: The Rise of Agentic Workflows</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sun, 10 May 2026 14:20:28 +0000</pubDate>
      <link>https://forem.com/petediano/moving-beyond-chatbots-the-rise-of-agentic-workflows-1gna</link>
      <guid>https://forem.com/petediano/moving-beyond-chatbots-the-rise-of-agentic-workflows-1gna</guid>
      <description>&lt;h1&gt;
  
  
  Moving Beyond Chatbots: The Rise of Agentic Workflows
&lt;/h1&gt;

&lt;p&gt;For the past two years, the industry has been obsessed with LLM wrappers—simple interfaces that send a prompt to an API and display the result. But the frontier has shifted. The future isn't a chatbot; it's an &lt;strong&gt;Agentic Workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an Agentic Workflow?
&lt;/h2&gt;

&lt;p&gt;An agentic workflow allows an AI to break down complex goals into smaller tasks, use external tools (browsing, code execution, database lookups), and iteratively refine its output based on feedback loops.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it matters
&lt;/h2&gt;

&lt;p&gt;If you treat an LLM as a single-turn reasoning engine, you're limited by its token output. If you treat it as an agent, you can solve multi-step problems like: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Build a full-stack dashboard from this database schema."&lt;/li&gt;
&lt;li&gt;"Audit this repository for security vulnerabilities and write the patches."&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  A Basic Agent Pattern in Python
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Concept: A simple feedback loop for an LLM agent
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_list&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;history&lt;/span&gt; &lt;span class="o"&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;role&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;system&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;content&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;You are an autonomous agent.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;

    &lt;span class="k"&gt;while&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;history&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;is_done&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;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;

        &lt;span class="c1"&gt;# Agent decides to use a tool
&lt;/span&gt;        &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;history&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&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;tool&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;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Roadmap
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Planning:&lt;/strong&gt; Let the LLM break down the objective.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reflection:&lt;/strong&gt; Allow the model to critique its own output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool Use:&lt;/strong&gt; Give it access to private APIs and local file systems.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We are moving from an era of "AI as a tool" to "AI as a coworker." Are you building agents yet? Let's discuss in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Beyond Vector Search: Why GraphRAG is the Future of LLM Context</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sun, 10 May 2026 11:02:52 +0000</pubDate>
      <link>https://forem.com/petediano/beyond-vector-search-why-graphrag-is-the-future-of-llm-context-31k0</link>
      <guid>https://forem.com/petediano/beyond-vector-search-why-graphrag-is-the-future-of-llm-context-31k0</guid>
      <description>&lt;h1&gt;
  
  
  Beyond Vector Search: Why GraphRAG is the Future of LLM Context
&lt;/h1&gt;

&lt;p&gt;For the past year, Retrieval-Augmented Generation (RAG) has been the gold standard for grounding LLMs in proprietary data. However, standard vector-based RAG often fails when users ask questions that require synthesizing information across multiple documents or understanding structural relationships.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Vector RAG
&lt;/h2&gt;

&lt;p&gt;Vector databases work by converting text into embeddings. While excellent for finding semantic similarity, they struggle with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Lack of Global Context:&lt;/strong&gt; They find specific snippets, but miss the 'big picture.'&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Relationship Blindness:&lt;/strong&gt; They cannot easily infer connections like "Who influenced the project that led to this bug?"&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Enter GraphRAG
&lt;/h2&gt;

&lt;p&gt;GraphRAG combines the semantic search capabilities of vector databases with the structured relational power of Knowledge Graphs. By mapping entities and their relationships, the LLM can traverse nodes to provide comprehensive reasoning.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Extraction:&lt;/strong&gt; Use an LLM to identify entities and relationships from your raw data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph Construction:&lt;/strong&gt; Store these in a graph database (like Neo4j).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning:&lt;/strong&gt; During inference, the LLM queries the graph to extract multi-hop paths.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Simple Implementation Concept
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Conceptual representation of a node-edge lookup
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_context_from_graph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_entity&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Querying a knowledge graph for related concepts
&lt;/span&gt;    &lt;span class="n"&gt;relationships&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graph_db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute_query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MATCH (e {name: $name})-[r]-&amp;gt;(target) RETURN target, type(r)&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;query_entity&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;format_for_llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;relationships&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;As we move toward autonomous AI agents, they need to do more than just search; they need to &lt;em&gt;understand&lt;/em&gt;. GraphRAG turns your data into a navigable map, allowing LLMs to perform deep analysis rather than just surface-level matching. If your RAG pipeline is hitting a wall with complex queries, it’s time to start thinking in graphs.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Why Vector Databases Are the Backbone of Modern AI Applications</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sun, 10 May 2026 08:10:58 +0000</pubDate>
      <link>https://forem.com/petediano/why-vector-databases-are-the-backbone-of-modern-ai-applications-1a3f</link>
      <guid>https://forem.com/petediano/why-vector-databases-are-the-backbone-of-modern-ai-applications-1a3f</guid>
      <description>&lt;h1&gt;
  
  
  Why Vector Databases Are the Backbone of Modern AI Applications
&lt;/h1&gt;

&lt;p&gt;Traditional relational databases (RDBMS) are built for structured data and exact matching. However, the surge in Generative AI and Large Language Models (LLMs) has introduced a new challenge: how do we store and retrieve unstructured data like text, images, and audio as mathematical vectors?&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Vector Databases
&lt;/h2&gt;

&lt;p&gt;Vector databases are specialized systems designed to store embeddings—high-dimensional numerical representations of data. Unlike standard SQL databases, they utilize Approximate Nearest Neighbor (ANN) algorithms to find "similar" items rather than "exact" matches.&lt;/p&gt;

&lt;h2&gt;
  
  
  The RAG Paradigm
&lt;/h2&gt;

&lt;p&gt;Retrieval-Augmented Generation (RAG) relies on vector databases to provide LLMs with external context. Without them, your AI is limited to its training data, leading to hallucinations and outdated information. With a vector store, you can query your own private data in milliseconds.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple Implementation Example (using Python and a mock interface):
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;numpy&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;

&lt;span class="c1"&gt;# Simulating a vector embedding search
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;find_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_vec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Calculate cosine similarity
&lt;/span&gt;    &lt;span class="n"&gt;similarities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dot&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query_vec&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;doc&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;database&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;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;argmax&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;span class="c1"&gt;# Example data
&lt;/span&gt;&lt;span class="n"&gt;database&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;0.9&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.8&lt;/span&gt;&lt;span class="p"&gt;])]&lt;/span&gt;
&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;np&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="mf"&gt;0.85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.75&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;result_index&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;find_similar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;database&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Best match index: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result_index&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Key Considerations
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Latency:&lt;/strong&gt; How fast is your indexing pipeline?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; Can your database handle millions of vectors?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hybrid Search:&lt;/strong&gt; Do you need to combine keyword search with semantic search?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;As we shift toward agentic AI, where models perform multi-step reasoning, the efficiency of your vector store will determine the speed and accuracy of your entire system. &lt;/p&gt;

&lt;p&gt;Which database are you choosing for your next production AI app?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Beyond Vector Search: Why GraphRAG is the Next Frontier for LLMs</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sat, 09 May 2026 19:25:05 +0000</pubDate>
      <link>https://forem.com/petediano/beyond-vector-search-why-graphrag-is-the-next-frontier-for-llms-23e3</link>
      <guid>https://forem.com/petediano/beyond-vector-search-why-graphrag-is-the-next-frontier-for-llms-23e3</guid>
      <description>&lt;h1&gt;
  
  
  Beyond Vector Search: Why GraphRAG is the Next Frontier for LLMs
&lt;/h1&gt;

&lt;p&gt;For the past year, the industry standard for augmenting LLMs has been &lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; using vector databases. We chunk documents, embed them into vectors, and perform similarity searches. But as projects grow in complexity, we hit a wall: vector search is great at finding &lt;em&gt;snippets&lt;/em&gt;, but terrible at understanding &lt;em&gt;contextual relationships&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem: The "Isolated Snippet" Trap
&lt;/h2&gt;

&lt;p&gt;Traditional RAG treats information as isolated fragments. If you ask an LLM, "How do the changes in our 2023 infrastructure impact our cloud spending?", vector search might pull relevant paragraphs about infrastructure and paragraphs about spending, but it lacks the explicit link between those two entities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter GraphRAG
&lt;/h2&gt;

&lt;p&gt;GraphRAG (Graph Retrieval-Augmented Generation) bridges this gap by representing data as a Knowledge Graph. Instead of searching for text proximity, the system traverses nodes and edges to map the semantic relationships between concepts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why it wins:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Contextual Awareness:&lt;/strong&gt; It captures the "who, what, and why" rather than just keyword proximity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Global Reasoning:&lt;/strong&gt; It allows the LLM to summarize themes across an entire document set, not just locally related chunks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Hallucinations:&lt;/strong&gt; By enforcing a structured graph schema, the model is grounded in explicit facts.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A Peek at the Implementation
&lt;/h2&gt;

&lt;p&gt;Using a framework like &lt;code&gt;LangChain&lt;/code&gt; combined with &lt;code&gt;Neo4j&lt;/code&gt;, you can start building a simple relationship extractor:&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="c1"&gt;# Conceptual example of a node extraction trigger
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain.graphs&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Neo4jGraph&lt;/span&gt;

&lt;span class="c1"&gt;# Extracting entities and relationships to build the graph
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;index_document&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;entities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract_entities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;relationships&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extract_relationships&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;entities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;relationships&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Querying the graph instead of the vector store
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;retrieve_context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&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;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;MATCH (n)-[r]-&amp;gt;(m) WHERE ... RETURN n.name, r.type, m.name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The Future
&lt;/h2&gt;

&lt;p&gt;While vector search remains essential for unstructured retrieval, the future of enterprise AI lies in &lt;strong&gt;Hybrid RAG&lt;/strong&gt;—combining the raw speed of vector similarity with the structural integrity of knowledge graphs. &lt;/p&gt;

&lt;p&gt;Are you experimenting with GraphRAG in your stack? Let's discuss in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Beyond Prompt Engineering: The Shift to Agentic Orchestration</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sat, 09 May 2026 14:17:28 +0000</pubDate>
      <link>https://forem.com/petediano/beyond-prompt-engineering-the-shift-to-agentic-orchestration-228</link>
      <guid>https://forem.com/petediano/beyond-prompt-engineering-the-shift-to-agentic-orchestration-228</guid>
      <description>&lt;h1&gt;
  
  
  Beyond Prompt Engineering: The Shift to Agentic Orchestration
&lt;/h1&gt;

&lt;p&gt;For the past 18 months, the gold standard for interacting with Large Language Models (LLMs) has been "Prompt Engineering." We spent hours perfecting system messages, chain-of-thought structures, and few-shot examples. But the paradigm is shifting.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Static Prompts
&lt;/h2&gt;

&lt;p&gt;Prompt engineering is essentially human-in-the-loop programming. It’s brittle. If the input distribution shifts, your prompts often break. As applications grow in complexity, managing 500-line prompt templates becomes a maintenance nightmare.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Agentic Orchestration
&lt;/h2&gt;

&lt;p&gt;Agentic Orchestration is the architectural shift from "prompting a model" to "governing an agent." Instead of a single monolithic prompt, we build systems where the model acts as a reasoning engine that controls a loop of tools and state.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Core Pattern
&lt;/h3&gt;

&lt;p&gt;Modern agent frameworks (like LangGraph or CrewAI) follow a simple loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Think:&lt;/strong&gt; The LLM assesses the current state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act:&lt;/strong&gt; The LLM calls a tool (API, database, calculator).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observe:&lt;/strong&gt; The system feeds the tool output back into the agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeat:&lt;/strong&gt; The agent refines its goal until the task is complete.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  A Simple Example (Python/LangGraph)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langgraph.prebuilt&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;create_react_agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langchain_openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ChatOpenAI&lt;/span&gt;

&lt;span class="c1"&gt;# Define tools the agent can use
&lt;/span&gt;&lt;span class="n"&gt;tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;get_weather&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;search_database&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ChatOpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Create the autonomous loop
&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;create_react_agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# The agent now handles the flow autonomously
&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;invoke&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;messages&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&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;Check the weather and update the DB&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)]})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Resilience:&lt;/strong&gt; If a tool fails, the agent can retry or adjust its approach without manual human intervention.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scalability:&lt;/strong&gt; You focus on building robust tools (APIs) rather than debugging linguistic nuances.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complexity:&lt;/strong&gt; Agents can handle multi-step workflows that would be impossible to define in a single prompt.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;The future of AI development isn't in better prompt writing—it's in better systems engineering. Start building workflows, not just prompts. Your applications will be more reliable, scalable, and genuinely intelligent.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>Moving Beyond Simple Vector Search: Why Hybrid Search is Essential for RAG</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Sat, 09 May 2026 13:19:26 +0000</pubDate>
      <link>https://forem.com/petediano/moving-beyond-simple-vector-search-why-hybrid-search-is-essential-for-rag-1mnn</link>
      <guid>https://forem.com/petediano/moving-beyond-simple-vector-search-why-hybrid-search-is-essential-for-rag-1mnn</guid>
      <description>&lt;h1&gt;
  
  
  Moving Beyond Simple Vector Search: Why Hybrid Search is Essential for RAG
&lt;/h1&gt;

&lt;p&gt;As LLMs continue to dominate the landscape, Retrieval-Augmented Generation (RAG) has become the go-to architecture for grounding AI in private data. However, many developers hit a wall when their RAG systems fail to retrieve context-specific details. The solution? &lt;strong&gt;Hybrid Search&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Limitation of Dense Vectors
&lt;/h2&gt;

&lt;p&gt;Dense vector embeddings are excellent at capturing semantic meaning. They allow an AI to understand that 'canine' and 'dog' are related. However, they struggle with:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Keyword matching:&lt;/strong&gt; Precise product SKUs or acronyms.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rare terminology:&lt;/strong&gt; Domain-specific jargon that doesn't appear in broad training sets.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Enter Hybrid Search
&lt;/h2&gt;

&lt;p&gt;Hybrid search combines &lt;strong&gt;Semantic Search&lt;/strong&gt; (Vector) with &lt;strong&gt;Lexical Search&lt;/strong&gt; (BM25/TF-IDF). By blending both, you get the best of both worlds: conceptual understanding plus exact keyword precision.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to Implement (Conceptual Example)
&lt;/h3&gt;

&lt;p&gt;Most modern vector databases like Pinecone, Weaviate, or Qdrant now offer native hybrid support. Here is a simple logic flow:&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="c1"&gt;# Conceptual representation of a hybrid retrieval query
&lt;/span&gt;&lt;span class="n"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;vector_db&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;hybrid_search&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How to fix Error Code 404-B?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;vector&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;embedding_model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How to fix Error Code 404-B?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;alpha&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;# Balance between vector and keyword
&lt;/span&gt;    &lt;span class="n"&gt;top_k&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reduced Hallucinations:&lt;/strong&gt; By ensuring the right documentation is retrieved, the LLM has less room to guess.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domain Accuracy:&lt;/strong&gt; Engineers and medical professionals need exact documentation, not 'semantically similar' guesses.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building production RAG applications, stop relying on vector search alone. Implement hybrid search to provide the reliability your users expect.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>software</category>
      <category>tech</category>
    </item>
    <item>
      <title>211 Students in 7 Days: How I Built a Success Story in Malawi using Angular + AI</title>
      <dc:creator>Peter Damiano </dc:creator>
      <pubDate>Fri, 08 May 2026 12:22:44 +0000</pubDate>
      <link>https://forem.com/petediano/211-students-in-7-days-how-i-built-a-success-story-in-malawi-using-angular-ai-554n</link>
      <guid>https://forem.com/petediano/211-students-in-7-days-how-i-built-a-success-story-in-malawi-using-angular-ai-554n</guid>
      <description>&lt;p&gt;Most people tell you that to build a fast startup in 2026, you must use React or Next.js. I decided to go a different way.&lt;br&gt;
I am a 19-year-old student in Mulanje, Malawi, and I just fully launched Educate MW. In just one week, 211 students joined the platform to access syllabuses and past papers.&lt;br&gt;
The secret to this speed? Combining the structure of Angular with the power of AI Automation.&lt;br&gt;
Why I chose Angular for Social Impact&lt;br&gt;
In a market like Malawi, where data is expensive, I needed a framework that was robust and reliable.&lt;br&gt;
Strict Structure: Angular’s "opinionated" nature meant that as my app grew, the code stayed clean.&lt;br&gt;
Performance: With the new Signals API in Angular, the app is lightning-fast even on budget smartphones.&lt;br&gt;
Scalability: I’m not just building for 200 students; I’m building for thousands. Angular is built for that scale.&lt;br&gt;
The Power of "Vibe Coding"&lt;br&gt;
Even though I used a "serious" framework like Angular, I didn't spend months writing every line of boilerplate code. I used AI agents to:&lt;br&gt;
Generate Components: I described the "vibe" and the logic, and the AI handled the TypeScript and HTML templates.&lt;br&gt;
Automate Content: I used AI to help categorize and organize Malawian past papers so I could focus on the user experience.&lt;br&gt;
Results that Matter&lt;br&gt;
Preview Launch: 160 students.&lt;br&gt;
Full Launch (Day 7): 211 active students.&lt;br&gt;
Tech Stack: Angular + Firebase + AI Agents.&lt;br&gt;
My Advice to Solo Devs&lt;br&gt;
You don't need a massive team or a specific "trendy" framework to make an impact. If you find a real problem in your community (like the lack of digital study materials) and solve it with the tools you know best, people will come.&lt;br&gt;
Check out the live app here: (&lt;em&gt;&lt;a href="Https://educatemw.vercel.app"&gt;Https://educatemw.vercel.app&lt;/a&gt;&lt;/em&gt;)&lt;br&gt;
Are you an Angular fan or a React loyalist? Let’s debate in the comments!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>angular</category>
    </item>
  </channel>
</rss>
