<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Chatbot on Pythonflow</title>
		<link>https://pythonflow.com/tags/chatbot/</link>
		<description>Recent content in Chatbot on Pythonflow</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
			<managingEditor>alicandonmez90@gmail.com (flowfelis)</managingEditor>
		
		
			<webMaster>alicandonmez90@gmail.com (flowfelis)</webMaster>
		
		
		
			<lastBuildDate>Sat, 27 Jun 2026 07:00:00 +0100</lastBuildDate>
		
			<atom:link href="https://pythonflow.com/tags/chatbot/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>LangBot Day 10: Agents and Tool Calling — Let the LLM Decide What to Do</title>
				<link>https://pythonflow.com/posts/langbot-day-10-agents/</link>
				<pubDate>Sat, 27 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-10-agents/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 9, LangBot became a full RAG pipeline — every chat message retrieves relevant documents and the LLM answers from them. The &lt;code&gt;/search&lt;/code&gt; command, list-mode routing, and regular chat all coexist. But there is a problem hiding in plain sight: the routing logic is hand-coded in &lt;code&gt;if&lt;/code&gt;/&lt;code&gt;elif&lt;/code&gt; blocks. LangBot doesn&amp;rsquo;t &lt;em&gt;decide&lt;/em&gt; anything — it follows a script. Today we replace that script with an &lt;strong&gt;agent&lt;/strong&gt;: an LLM that reasons about which tool to use, calls it, and responds — autonomously.&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 9: The RAG Pipeline — Retriever Meets Generator</title>
				<link>https://pythonflow.com/posts/langbot-day-9-rag-pipeline/</link>
				<pubDate>Fri, 26 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-9-rag-pipeline/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 8, LangBot gained a long-term memory — a vector store (Pinecone) filled with document embeddings. You can ask &lt;code&gt;/search home office stipend&lt;/code&gt; and get relevant chunks back. But that is half the picture. You still have to type &lt;code&gt;/search&lt;/code&gt;, read raw chunks, and synthesize the answer yourself. Today we close the loop: the retriever feeds into the chatbot automatically, so you ask &lt;em&gt;&amp;ldquo;How much is the home office stipend?&amp;rdquo;&lt;/em&gt; and LangBot answers from your documents — no slash command, no manual lookup.&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 8: Retrieval — Vector Stores, Embeddings, and Pinecone</title>
				<link>https://pythonflow.com/posts/langbot-day-8-retrieval-vector-stores/</link>
				<pubDate>Thu, 25 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-8-retrieval-vector-stores/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 7, LangBot learned to stream — token-by-token responses that feel like a real chat app. It remembers the conversation within a session (Day 2 memory), it has a personality (Day 3 prompt templates), it returns typed data (Day 5 structured output), it handles lists (Day 6 output parsers), and it streams those replies in real time (Day 7). But ask it anything outside its training data and it either guesses, hallucinates, or apologizes. Today we fix that by giving LangBot the ability to search external documents — the retrieval half of RAG.&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 7: Streaming Output — Token-by-Token Responses</title>
				<link>https://pythonflow.com/posts/langbot-day-7-streaming/</link>
				<pubDate>Tue, 23 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-7-streaming/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 6, LangBot gained output parsers and now responds in two modes — chat mode returns typed &lt;code&gt;LangBotResponse&lt;/code&gt; objects with mood and confidence, and list mode returns clean &lt;code&gt;list[str]&lt;/code&gt; via &lt;code&gt;CommaSeparatedListOutputParser&lt;/code&gt;. Both modes use &lt;code&gt;.invoke()&lt;/code&gt;, which means the entire response arrives at once after the model finishes generating. Today we fix that — LangBot learns to type its replies one token at a time.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-problem-waiting-for-the-whole-answer&#34;&gt;The problem: waiting for the whole answer&lt;/h2&gt;&#xA;&lt;p&gt;Every interaction so far has the same rhythm:&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 6: Output Parsers — Transforming Raw Responses into Usable Data</title>
				<link>https://pythonflow.com/posts/langbot-day-6-output-parsers/</link>
				<pubDate>Mon, 22 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-6-output-parsers/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 5, LangBot started returning typed objects — every response is now a &lt;code&gt;LangBotResponse&lt;/code&gt; with &lt;code&gt;.message&lt;/code&gt;, &lt;code&gt;.mood&lt;/code&gt;, and &lt;code&gt;.confidence&lt;/code&gt;. That is great when you need structured metadata. But structured output is not always the right tool. Sometimes you just want a clean string. Sometimes you want a parsed list. Today we add output parsers — lightweight LCEL components that transform raw &lt;code&gt;AIMessage&lt;/code&gt; output into exactly the shape you need.&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 5: Structured Output — Typed Responses with Pydantic</title>
				<link>https://pythonflow.com/posts/langbot-day-5-structured-output/</link>
				<pubDate>Sun, 21 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-5-structured-output/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; Yesterday we wired LangBot&amp;rsquo;s prompt and model into one pipeline with LCEL&amp;rsquo;s pipe operator — &lt;code&gt;chain = prompt | llm&lt;/code&gt;. One &lt;code&gt;invoke()&lt;/code&gt; call now handles everything from formatting to generation. But we still get back a raw &lt;code&gt;AIMessage&lt;/code&gt; and have to reach into &lt;code&gt;.content&lt;/code&gt; for the text. Today LangBot returns real typed objects.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-problem-unstructured-mush&#34;&gt;The problem: unstructured mush&lt;/h2&gt;&#xA;&lt;p&gt;Every LLM response so far has been an &lt;code&gt;AIMessage&lt;/code&gt; — a blob of text with no shape. To extract anything useful, you either parse it yourself or pray the model followed your formatting instructions. Both are fragile.&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 4: Chaining with LCEL — The Pipe Operator</title>
				<link>https://pythonflow.com/posts/langbot-day-4-lcel/</link>
				<pubDate>Sat, 20 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-4-lcel/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 1 we built a basic CLI chatbot. Day 2 gave it memory so it remembers the conversation. Day 3 added a prompt template so LangBot has a personality. But every turn still requires two separate steps — format the template, then call the model. Today we stitch them together into one fluid pipeline.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-problem-two-steps-where-one-should-do&#34;&gt;The problem: two steps where one should do&lt;/h2&gt;&#xA;&lt;p&gt;Here is how LangBot works on Day 3. Every single turn:&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 3: Giving Your Chatbot a Personality with Prompt Templates</title>
				<link>https://pythonflow.com/posts/langbot-day-3-prompt-templates/</link>
				<pubDate>Fri, 19 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-3-prompt-templates/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; On Day 1 we built a CLI chatbot with &lt;code&gt;ChatOpenAI&lt;/code&gt;. On Day 2 we gave it memory so it remembers the conversation. But LangBot still has no personality — every session starts with a blank slate, and the model defaults to its generic &amp;ldquo;helpful assistant&amp;rdquo; tone. Today we change that.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-problem-a-chatbot-with-no-identity&#34;&gt;The problem: a chatbot with no identity&lt;/h2&gt;&#xA;&lt;p&gt;Right now, LangBot&amp;rsquo;s response to &lt;em&gt;any&lt;/em&gt; first message is unpredictable. Ask &amp;ldquo;What do you do?&amp;rdquo; and you get whatever the base model decides. There is no way to control:&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 2: Giving Your Chatbot a Memory with Conversation History</title>
				<link>https://pythonflow.com/posts/langbot-day-2-conversation-memory/</link>
				<pubDate>Thu, 18 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-2-conversation-memory/</guid>
				<description>&lt;p&gt;&lt;strong&gt;Recap:&lt;/strong&gt; Yesterday we built LangBot — a 27-line CLI chatbot powered by &lt;code&gt;ChatOpenAI&lt;/code&gt;. It works, but every message starts from scratch. Ask &amp;ldquo;What&amp;rsquo;s my name?&amp;rdquo; and it invents one. Remind it &amp;ldquo;My name is Alex&amp;rdquo; and ask again — it still guesses. Today we fix that.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;the-problem-amnesia-mode&#34;&gt;The problem: amnesia mode&lt;/h2&gt;&#xA;&lt;p&gt;Try this in Day 1&amp;rsquo;s LangBot:&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;You: My favorite color is blue.&#xA;&#xA;LangBot: That&amp;#39;s a great choice! Blue is calming and versatile.&#xA;&#xA;You: What did I just say my favorite color was?&#xA;&#xA;LangBot: I&amp;#39;m not sure — you haven&amp;#39;t mentioned a favorite color in this conversation.&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Every call to &lt;code&gt;llm.invoke()&lt;/code&gt; sends a single &lt;code&gt;HumanMessage&lt;/code&gt;. The model has zero context from previous turns. For a real chatbot, this is a dealbreaker.&lt;/p&gt;</description>
			</item>
			<item>
				<title>LangBot Day 1: Building a Chatbot with LangChain from Scratch</title>
				<link>https://pythonflow.com/posts/langbot-day-1-project-setup-basic-chatbot/</link>
				<pubDate>Wed, 17 Jun 2026 07:00:00 +0100</pubDate><author>alicandonmez90@gmail.com (flowfelis)</author>
				<guid>https://pythonflow.com/posts/langbot-day-1-project-setup-basic-chatbot/</guid>
				<description>&lt;p&gt;Welcome to &lt;strong&gt;LangBot&lt;/strong&gt; — a daily tutorial series where we build one chatbot app from scratch using &#xA;&lt;a href=&#34;https://www.langchain.com/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;LangChain&lt;/a&gt;&#xA;. Every post adds one new concept to the same codebase, so by the end you will have a production-ready chatbot and a solid mental model of how LangChain works.&lt;/p&gt;&#xA;&lt;p&gt;No magic. No abandoned side projects. One app, built in public, one concept at a time.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-we-are-building&#34;&gt;What we are building&lt;/h2&gt;&#xA;&lt;p&gt;LangBot is a conversational chatbot that runs in your terminal. Today it will be simple: you type a message, it replies. But every day this week we will add memory, prompt templates, structured output, retrieval, agents, streaming, and more — all in the same codebase.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
