<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Ajay Walia</title><link>https://curiousbit.netlify.app/</link><description>Digital workplace, artificial intelligence, cloud, security, automation, and enterprise technology notes by Ajay Walia.</description><language>en-au</language><managingEditor>Ajay Walia</managingEditor><webMaster>Ajay Walia</webMaster><copyright>Copyright 2026 Ajay Walia</copyright><lastBuildDate>Thu, 02 Jul 2026 03:03:35 +0000</lastBuildDate><atom:link href="https://curiousbit.netlify.app/tags/flowise/index.xml" rel="self" type="application/rss+xml"/><image><url>https://curiousbit.netlify.app/images/og-default.png</url><title>Ajay Walia</title><link>https://curiousbit.netlify.app/</link></image><item><title>Teaching a Chatbot to Talk Jewellery: Building Ornativa's Assistant with Flowise</title><link>https://curiousbit.netlify.app/ornativa-jewellery-chatbot-flowise/</link><guid isPermaLink="true">https://curiousbit.netlify.app/ornativa-jewellery-chatbot-flowise/</guid><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><dc:creator>Ajay Walia</dc:creator><description>&lt;p&gt;&lt;em&gt;A walkthrough of my Week 20 mini-project — a retrieval-based AI chatbot built with a visual, low-code pipeline.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="the-brief"&gt;The brief&lt;/h2&gt;
&lt;p&gt;For this project I set out to build a customer-facing chatbot for a fictional jewellery brand, &lt;strong&gt;Ornativa Jewels&lt;/strong&gt;, based in Hyderabad. The idea was simple to describe but genuinely interesting to build: a shopper should be able to ask natural questions — &lt;em&gt;&amp;ldquo;What&amp;rsquo;s the price of the Pearl Necklace?&amp;rdquo;&lt;/em&gt;, &lt;em&gt;&amp;ldquo;Show me your diamond pieces&amp;rdquo;&lt;/em&gt;, &lt;em&gt;&amp;ldquo;Is the Ruby Solitaire Ring available?&amp;rdquo;&lt;/em&gt; — and get accurate answers drawn straight from the store&amp;rsquo;s product catalogue.&lt;/p&gt;</description><content:encoded>&lt;![CDATA[<img src="https://curiousbit.netlify.app/images/ornativa/pipeline.png" alt="Flowise" style="max-width:100%;height:auto;margin-bottom:1.5em;"/><p><em>A walkthrough of my Week 20 mini-project — a retrieval-based AI chatbot built with a visual, low-code pipeline.</em></p><h2 id="the-brief">The brief</h2><p>For this project I set out to build a customer-facing chatbot for a fictional jewellery brand,<strong>Ornativa Jewels</strong>, based in Hyderabad. The idea was simple to describe but genuinely interesting to build: a shopper should be able to ask natural questions —<em>&ldquo;What&rsquo;s the price of the Pearl Necklace?&rdquo;</em>,<em>&ldquo;Show me your diamond pieces&rdquo;</em>,<em>&ldquo;Is the Ruby Solitaire Ring available?&rdquo;</em> — and get accurate answers drawn straight from the store&rsquo;s product catalogue.</p><p>There was one hard rule:<strong>no hard-coded answers.</strong> The bot had to actually read a catalogue (a PDF with 10 products) and retrieve the right information on the fly. That makes it a<em>retrieval-augmented</em> chatbot — or RAG, if you like acronyms.</p><p>And rather than write it all in code, I built it in<strong>Flowise</strong>, a low-code tool where you assemble an AI pipeline by dragging nodes onto a canvas and connecting them, a bit like wiring a flowchart.</p><p><strong>Why Flowise and not something else?</strong> Fair question. Microsoft&rsquo;s Copilot Studio does this too, but it pulls you into the Power Platform licensing world before you&rsquo;ve built anything. Botpress is polished but conversation-flow-first, with RAG bolted on. Langflow is the closest cousin — I picked Flowise because it exposes the LangChain-style building blocks (splitter, embeddings, vector store, chain) as first-class nodes, which is exactly what I wanted to<em>learn</em>, not hide. For a production enterprise bot the calculus changes; for understanding how RAG actually fits together, Flowise is the most honest of the visual tools.</p><p>The whole thing was also cheap and quick: roughly a weekend of tinkering, and the API bill — embeddings for one 10-product PDF plus all my test chats on gpt-4o-mini — came to well under a dollar. (Illustrative, not a benchmark: your token counts will vary.)</p><h2 id="what-rag-actually-means-in-one-paragraph">What RAG actually means (in one paragraph)</h2><p>Large language models are confident talkers, but they don&rsquo;t know your private data and they&rsquo;ll happily make things up. RAG fixes both problems by giving the model a cheat sheet at answer time. You take your documents, break them into chunks, convert each chunk into a numerical &ldquo;embedding,&rdquo; and store them. When a user asks something, the system finds the most relevant chunks and hands them to the model with an instruction like<em>&ldquo;answer using only this.&rdquo;</em> The result is answers grounded in<em>your</em> content, not the model&rsquo;s imagination.</p><h2 id="what-i-built">What I built</h2><p>The finished pipeline has seven connected nodes, and each does one job:</p><ul><li>A<strong>PDF loader</strong> reads the catalogue.</li><li>A<strong>text splitter</strong> breaks it into bite-sized chunks (I used ~800 characters with a little overlap, enough to keep each product&rsquo;s details together).</li><li>An<strong>embeddings</strong> node turns those chunks into vectors.</li><li>A<strong>vector store</strong> holds them and returns the closest matches to any question.</li><li>A<strong>chat model</strong> (OpenAI&rsquo;s gpt-4o-mini) writes the replies.</li><li>A<strong>memory</strong> node lets the bot remember the last few turns.</li><li>A<strong>retrieval chain</strong> ties it all together with a custom prompt.</li></ul><p>That prompt is where Ornativa&rsquo;s personality lives. I told the model to be<em>&ldquo;Ornativa&rsquo;s virtual jewellery expert — polite, concise, and factual,&rdquo;</em> to answer only from the catalogue, to quote prices in rupees, and — my favourite touch — to handle out-of-stock items gracefully by suggesting a close in-stock alternative.</p><p>Before the bot can answer anything, the catalogue has to be ingested — chunked, embedded, and stored. In Flowise that&rsquo;s one click (&ldquo;upsert&rdquo;), and it confirms exactly what went in:</p><p><img src="/images/ornativa/upsert.png" alt="The Flowise upsert record showing two documents added to the in-memory vector store from the jewellery catalogue PDF."/><h2 id="did-it-work">Did it work?</h2><p>Yes — and testing it was the fun part. A few real exchanges:</p><p><em>&ldquo;List all available diamond items.&rdquo;</em> → It returned the Classic Diamond Ring (₹135,000), Diamond Stud Earrings (₹105,000), and Lotus Pendant (₹72,000):</p><p><img src="/images/ornativa/chat-diamonds.png" alt="The chatbot answering &ldquo;List all available diamond items&rdquo; with the Classic Diamond Ring, Diamond Stud Earrings, and Lotus Pendant — each with material, weight, and price."/><p><em>&ldquo;What&rsquo;s the price of the ring?&rdquo;</em> (asked right after) → It remembered the context and answered about the Classic Diamond Ring — proof the memory was working.</p><p><em>&ldquo;Do you have the Ruby Solitaire Ring?&rdquo;</em> → It knew the item was out of stock and offered the closest available piece instead, exactly the behaviour I designed:</p><p><img src="/images/ornativa/chat-out-of-stock.png" alt="The chatbot handling an out-of-stock query — the Ruby Solitaire Ring is out of stock, so it recommends the available Classic Diamond Ring as an alternative."/><p><em>&ldquo;Do you sell platinum rings?&rdquo;</em> →<em>&ldquo;I&rsquo;m sorry, I don&rsquo;t have that information in our current catalogue.&rdquo;</em> No hallucination — it stuck to what it actually knew.</p><h2 id="the-issues-i-ran-into-and-fixed">The issues I ran into (and fixed)</h2><p>No project is smooth, and honestly the debugging taught me the most.</p><p><strong>Getting Flowise running locally was a fight.</strong> My first attempt to start it failed with a wall of red errors. The culprits were version mismatches: I was on a very new Node.js version that Flowise&rsquo;s components didn&rsquo;t support yet, and a recent Python change had removed a module its build step relied on. Rather than untangle all of that, I switched to<strong>Flowise Cloud</strong> — no install, and I was building within minutes.</p><p><strong>My chatflow wouldn&rsquo;t import.</strong> I exported the pipeline as a JSON file, tried to load it, and… nothing happened. After some digging I realised two things. First, I was using the wrong import option — the file has to be loaded through the canvas&rsquo;s own<em>&ldquo;Load Chatflow&rdquo;</em> menu, not a top-level import button. Second, and more subtly, the JSON had been generated against an<em>older</em> version of Flowise, and the newer cloud version quietly rejected it. Rebuilding the file against the current node definitions fixed it, and the whole pipeline snapped into place.</p><p>The lesson that kept repeating: with fast-moving tools,<strong>versions matter more than you&rsquo;d expect</strong>, and the error message is rarely the whole story.</p><h2 id="what-it-taught-me">What it taught me</h2><p>Beyond the jewellery, the project was really about the bigger ideas behind agentic AI:</p><ul><li><strong>The role of low-code/no-code tools</strong> — how a visual builder lowers the barrier to assembling real AI systems.</li><li><strong>Building pipelines visually</strong> — document loading, chunking, embeddings, retrieval, prompting, and memory, all wired by hand.</li><li><strong>Low-code vs. writing code</strong> — the trade-offs (more on that below).</li><li><strong>Designing multi-step pipelines</strong> — getting several tools to cooperate toward one goal.</li></ul><h2 id="low-code-vs-code-my-honest-take">Low-code vs. code: my honest take</h2><p>Flowise was fantastic for<em>speed</em>. I could see the whole system at a glance, change a prompt or a chunk size, and re-test in seconds. For prototyping and learning, that visual feedback loop is hard to beat, and non-developers can genuinely build useful things with it.</p><p>The trade-off is control. When something breaks — like my import issue — you&rsquo;re partly at the mercy of the tool&rsquo;s abstractions and version quirks. Writing the same pipeline in code (say, with LangChain) gives you finer control and easier version pinning, at the cost of more setup and a steeper learning curve. My conclusion:<strong>low-code to prototype and learn; code when you need production-grade control.</strong></p><h2 id="where-these-tools-go-next">Where these tools go next</h2><p>The pattern I built — point a chatbot at a set of documents and let it answer grounded questions — is wildly reusable. A few directions I can see:</p><ul><li><strong>Customer support</strong>: product FAQs, order policies, troubleshooting guides.</li><li><strong>Internal knowledge assistants</strong>: HR policies, IT runbooks, onboarding docs.</li><li><strong>Education</strong>: a tutor that answers only from your course material.</li><li><strong>Professional search</strong>: legal, medical, or financial document Q&amp;A, where grounding and citations really matter.</li><li><strong>E-commerce</strong>: exactly this jewellery use case, scaled up. Honest caveat: my in-memory vector store dies with the session and won&rsquo;t hold thousands of products — a real deployment would swap in a persistent store (pgvector, Qdrant, Pinecone) and replace the static PDF with a live inventory API. The pipeline shape stays the same; only the endpoints get more serious.</li></ul><p>Swap the catalogue for any document set, adjust the prompt, and you have a brand-new assistant.</p><h2 id="takeaway">Takeaway</h2><p>In a weekend-sized project I went from a PDF and an idea to a working, memory-aware chatbot that answers grounded questions and handles edge cases like out-of-stock items — without hard-coding a single answer. The tools have reached a point where the hard part isn&rsquo;t the plumbing anymore; it&rsquo;s the thinking: what data to feed the model, how to chunk it, and how to shape the prompt. That&rsquo;s a genuinely exciting shift, and a fun one to be learning right now.</p><p><em>Built with Flowise + OpenAI, as part of my Agentic AI coursework. If you want the code-first version of this pattern, I built one earlier:<a href="/rag-chatbot-github-rest-api/">RAG chatbot over indexed public documentation</a>. And if the embeddings step felt like magic,<a href="/one-predicts-words-one-maps-meaning/">LLM &amp; Embeddings — one predicts words, one maps meaning</a> unpacks it.</em></p>
]]></content:encoded><media:content url="https://curiousbit.netlify.app/images/ornativa/pipeline.png" medium="image"><media:title type="plain">Flowise</media:title></media:content><category>flowise</category><category>rag</category><category>low-code</category><category>chatbot</category><category>artificial-intelligence</category><category>Projects</category></item></channel></rss>