<?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: Adbuth kumar Kota</title>
    <description>The latest articles on DEV Community by Adbuth kumar Kota (@adbuth_kumarkota_b65df72).</description>
    <link>https://dev.to/adbuth_kumarkota_b65df72</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4149895%2F48b26c83-af97-409a-9a1c-dcf29a94d6d4.png</url>
      <title>DEV Community: Adbuth kumar Kota</title>
      <link>https://dev.to/adbuth_kumarkota_b65df72</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adbuth_kumarkota_b65df72"/>
    <language>en</language>
    <item>
      <title>An Agent That Remembers What You Actually Need</title>
      <dc:creator>Adbuth kumar Kota</dc:creator>
      <pubDate>Tue, 29 Sep 2026 14:17:35 +0000</pubDate>
      <link>https://dev.to/adbuth_kumarkota_b65df72/an-agent-that-remembers-what-you-actually-need-29hp</link>
      <guid>https://dev.to/adbuth_kumarkota_b65df72/an-agent-that-remembers-what-you-actually-need-29hp</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqj2xuwi3241sukvqinb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmqj2xuwi3241sukvqinb.jpeg" alt=" " width="800" height="1271"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcp6ma39xg2z8thwrd2vy.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcp6ma39xg2z8thwrd2vy.jpeg" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzm52ykp0n93jxfmf0fo3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fzm52ykp0n93jxfmf0fo3.jpeg" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5c22ftgnjqxoygnl4ic.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ff5c22ftgnjqxoygnl4ic.jpeg" alt=" " width="800" height="497"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1lm9df825ghf3ntnekdk.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1lm9df825ghf3ntnekdk.jpeg" alt=" " width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A grocery assistant can answer “Where is the bread?” in a second.&lt;/p&gt;

&lt;p&gt;That is not the interesting part.&lt;/p&gt;

&lt;p&gt;The harder problem is answering the next question correctly when the customer has already told the system something important earlier.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Naku brown bread ante chala istam, white bread vaddu.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Later:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Which bread should I buy?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A normal chatbot can understand the second sentence. A useful grocery assistant should connect it to the first one.&lt;/p&gt;

&lt;p&gt;That is what I built with the &lt;strong&gt;GrocerAI Customer Agent&lt;/strong&gt;: an AI shopping assistant that combines real-time store data, tool-based actions, multilingual conversations, customer-specific memory, and a persistent learning loop.&lt;/p&gt;

&lt;p&gt;The goal was not to build another chatbot.&lt;/p&gt;

&lt;p&gt;The goal was to make the customer experience become more useful over time.&lt;/p&gt;
&lt;h2&gt;
  
  
  The Problem With a Normal Shopping Chatbot
&lt;/h2&gt;

&lt;p&gt;A grocery assistant has to answer questions about things that change constantly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is a product available?&lt;/li&gt;
&lt;li&gt;Where is it located?&lt;/li&gt;
&lt;li&gt;What alternatives are available?&lt;/li&gt;
&lt;li&gt;What is already in the cart?&lt;/li&gt;
&lt;li&gt;What is still needed for the shopping mission?&lt;/li&gt;
&lt;li&gt;Has the customer mentioned a preference before?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are different kinds of information.&lt;/p&gt;

&lt;p&gt;Some belong to the current store state.&lt;/p&gt;

&lt;p&gt;Some belong to the customer's current session.&lt;/p&gt;

&lt;p&gt;Some are experiences that may become useful later.&lt;/p&gt;

&lt;p&gt;I therefore designed the Customer Agent around three layers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current Store State
        +
Current Customer State
        +
Relevant Past Experience
        ↓
Customer Agent
        ↓
Action / Response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The structured backend remains the source of truth for current facts. Hindsight provides the memory layer for experiences that can influence future reasoning.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Customer Agent Is Tool-Driven
&lt;/h2&gt;

&lt;p&gt;The LLM is responsible for understanding the customer's request and deciding what information or action is needed.&lt;/p&gt;

&lt;p&gt;It does not directly invent inventory or shelf locations.&lt;/p&gt;

&lt;p&gt;Instead, it uses backend tools such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;searchProducts()
getProductDetails()
checkAvailability()
getShelfLocation()
getStoreMapRoute()
getCustomerMission()
updateMission()
getCart()
addToCart()
removeFromCart()
getRecommendations()
checkSubstitution()
sendNotification()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Consider:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Do you have brown bread?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The flow can become:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer
   ↓
Customer Agent
   ↓
searchProducts()
   ↓
checkAvailability()
   ↓
getShelfLocation()
   ↓
Answer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That distinction matters.&lt;/p&gt;

&lt;p&gt;The model handles reasoning.&lt;/p&gt;

&lt;p&gt;The application handles authoritative store state.&lt;/p&gt;

&lt;p&gt;This makes the assistant much more useful than simply asking an LLM to generate an answer from its own knowledge.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding Persistent Customer Memory
&lt;/h2&gt;

&lt;p&gt;The biggest change came when I added Hindsight.&lt;/p&gt;

&lt;p&gt;The Customer Agent can retain useful experiences and recall them when a future interaction makes them relevant.&lt;/p&gt;

&lt;p&gt;Conceptually:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer Interaction
        ↓
      retain()
        ↓
Customer Memory
        ↓
Future Interaction
        ↓
      recall()
        ↓
Personalized Reasoning
        ↓
Relevant Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I kept customer memories isolated using customer-specific memory banks:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;grocerai-customer-USER00001
grocerai-customer-USER00002
grocerai-customer-USER00003
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is important because personalization is only useful if the memory belongs to the correct customer.&lt;/p&gt;

&lt;p&gt;A preference from USER00001 should never influence USER00002.&lt;/p&gt;

&lt;p&gt;I explicitly tested this isolation rather than assuming it would work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Memory Should Survive Language Changes
&lt;/h2&gt;

&lt;p&gt;GrocerAI supports English, Telugu, Hindi, and mixed-language conversations.&lt;/p&gt;

&lt;p&gt;That created an interesting test.&lt;/p&gt;

&lt;p&gt;A customer can express a preference in Telugu:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Naku brown bread ante chala istam,
white bread vaddu."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Later, they can ask in English:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"Which bread should I buy?"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The useful behavior is not literal sentence matching.&lt;/p&gt;

&lt;p&gt;The agent needs to retrieve the underlying preference and connect it to the new request.&lt;/p&gt;

&lt;p&gt;The same idea applies to other customer experiences, such as remembering lactose intolerance and later using that information when discussing alternatives such as oat milk.&lt;/p&gt;

&lt;p&gt;That is where persistent semantic memory becomes more useful than keeping a giant conversation transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Customer Agent Also Understands Shopping Missions
&lt;/h2&gt;

&lt;p&gt;Shopping is rarely just a sequence of independent questions.&lt;/p&gt;

&lt;p&gt;A customer may have a mission:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Breakfast
 ├── Bread
 ├── Milk
 ├── Cereal
 └── Fruit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Customer Agent can work with that mission while the customer browses the store.&lt;/p&gt;

&lt;p&gt;It can identify what has already been completed, what is still needed, and what actions can help the customer finish the mission.&lt;/p&gt;

&lt;p&gt;This turns the interaction from:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Ask a question → get an answer”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Start a shopping goal → receive assistance throughout the journey.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Voice Uses the Same Agent
&lt;/h2&gt;

&lt;p&gt;I did not want voice to become a separate intelligence layer.&lt;/p&gt;

&lt;p&gt;The voice flow is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Voice Input
    ↓
Speech-to-Text
    ↓
Customer Agent
    ↓
Backend Tools
    ↓
Reasoning
    ↓
Response
    ↓
Text-to-Speech
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same customer state, tools, mission, and memory can therefore be used whether the customer interacts through text or voice.&lt;/p&gt;

&lt;p&gt;That keeps the architecture consistent.&lt;/p&gt;

&lt;h2&gt;
  
  
  From Big Store Display to Personal Companion
&lt;/h2&gt;

&lt;p&gt;GrocerAI also separates the physical store experience from personal customer assistance.&lt;/p&gt;

&lt;p&gt;The main store display handles shopping interactions such as browsing, searching, product information, cart actions, navigation, and checkout.&lt;/p&gt;

&lt;p&gt;A customer can scan a QR code to activate a personal companion session.&lt;/p&gt;

&lt;p&gt;That session gets a customer identifier and can provide personalized information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;shopping mission progress&lt;/li&gt;
&lt;li&gt;remaining items&lt;/li&gt;
&lt;li&gt;recommendations&lt;/li&gt;
&lt;li&gt;notifications&lt;/li&gt;
&lt;li&gt;preferences&lt;/li&gt;
&lt;li&gt;availability&lt;/li&gt;
&lt;li&gt;personalized aisle guidance&lt;/li&gt;
&lt;li&gt;synchronized cart information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The important architectural rule is that the mobile experience is not a second independent cart.&lt;/p&gt;

&lt;p&gt;It shares the customer's active shopping session with the store display.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete Customer Learning Loop
&lt;/h2&gt;

&lt;p&gt;The final Customer Agent loop became:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;OBSERVE
   ↓
RECALL
   ↓
REASON
   ↓
ACT
   ↓
RE-OBSERVE
   ↓
REMEMBER
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Customer says preference
        ↓
retain experience
        ↓
Later bread request
        ↓
recall preference
        ↓
Reason about suitable products
        ↓
Recommend relevant option
        ↓
Observe customer action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important part is that memory is inside the decision cycle.&lt;/p&gt;

&lt;p&gt;It is not simply a page showing stored memories.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. An LLM should not be the database
&lt;/h3&gt;

&lt;p&gt;Current inventory, cart state, mission state, and orders need deterministic application data.&lt;/p&gt;

&lt;p&gt;The model should reason over that information rather than becoming the source of truth.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Memory should be selective
&lt;/h3&gt;

&lt;p&gt;Not every conversation sentence deserves to become a long-term memory.&lt;/p&gt;

&lt;p&gt;Useful memory is information that can improve a future decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Personalization requires isolation
&lt;/h3&gt;

&lt;p&gt;A memory system that accidentally mixes customers destroys trust.&lt;/p&gt;

&lt;p&gt;Customer-specific memory boundaries therefore became a first-class architectural requirement.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Multilingual support becomes more valuable with memory
&lt;/h3&gt;

&lt;p&gt;Understanding Telugu or Hindi is useful.&lt;/p&gt;

&lt;p&gt;Remembering a preference expressed in one language and applying it later in another makes the interaction much more continuous.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. The real test is future behavior
&lt;/h3&gt;

&lt;p&gt;I did not want to measure success only by whether the agent could store a memory.&lt;/p&gt;

&lt;p&gt;The stronger test was:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Did recalling that experience change what the agent did next?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That became the core test for the Customer Agent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Architecture
&lt;/h2&gt;

&lt;p&gt;The Customer Agent ended up as a combination of:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;             Customer
                 ↓
        ┌─────────────────┐
        │ Customer Agent  │
        └────────┬────────┘
                 ↓
        ┌─────────────────┐
        │ Groq Reasoning  │
        └────────┬────────┘
                 ↓
      ┌──────────┴──────────┐
      ↓                     ↓
Backend Tools          Hindsight Memory
      ↓                     ↓
Current State       Past Experiences
      └──────────┬──────────┘
                 ↓
          Personalized Action
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is not simply an AI that can talk about groceries.&lt;/p&gt;

&lt;p&gt;It is an agent that can understand a shopper, use the actual store as its source of truth, remember useful experiences, and use those experiences when the customer returns.&lt;/p&gt;

&lt;p&gt;That is the behavior I wanted from a personal grocery assistant:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;not just answering the customer's next question, but becoming more useful because of what it learned from the previous one.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
