<?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: Sungwoo Lee</title>
    <description>The latest articles on DEV Community by Sungwoo Lee (@sungwoo_lee_e0f26be4a29fd).</description>
    <link>https://dev.to/sungwoo_lee_e0f26be4a29fd</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%2F3989473%2F81eb30d6-b8ed-42ec-b5fb-a2edc4305bfe.png</url>
      <title>DEV Community: Sungwoo Lee</title>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sungwoo_lee_e0f26be4a29fd"/>
    <language>en</language>
    <item>
      <title>Which AI Model Should You Use? A Routing Guide for Developers</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:20:01 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/which-ai-model-should-you-use-a-routing-guide-for-developers-og2</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/which-ai-model-should-you-use-a-routing-guide-for-developers-og2</guid>
      <description>&lt;p&gt;You've got ChatGPT open in one tab, Claude in another, maybe Gemini in a third. And you still spend the first thirty seconds of every session wondering which one to actually use for the task in front of you.&lt;/p&gt;

&lt;p&gt;That hesitation is the real problem, not the tools themselves. Each major model has a domain where it genuinely outperforms the others. The skill isn't picking a favorite — it's routing the right task to the right tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop Asking "Which AI Is Best"
&lt;/h2&gt;

&lt;p&gt;The question has no useful answer because it conflates several fundamentally different design priorities. ChatGPT's reasoning-tier models (o-series) are optimized for breadth and hard logic. Claude is optimized for long-context fidelity and careful writing. Gemini is built around Google's data stack and native multimodal input. Perplexity is a real-time search layer sitting on top of models rather than a general-purpose assistant. They aren't competing in the same lane.&lt;/p&gt;

&lt;p&gt;The better question: what am I trying to do, and which tool is architecturally suited for it? Think routing, not ranking — the same way a skilled team doesn't debate "email or Slack" in the abstract, they use the right channel for the message.&lt;/p&gt;

&lt;p&gt;Four task categories cover most of the routing decision:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Writing and editing&lt;/strong&gt; — prose quality, tone fidelity, long-form coherence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Coding and technical work&lt;/strong&gt; — accuracy, debug quality, explanation clarity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Research and factual queries&lt;/strong&gt; — recency, citations, hallucination rate&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reasoning and analysis&lt;/strong&gt; — multi-step logic, structured thinking&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What Each Model Actually Does Best
&lt;/h2&gt;

&lt;p&gt;A note before the list: specific model names go stale within months, so this section describes &lt;strong&gt;families and tiers&lt;/strong&gt;, not version numbers. The routing logic is the durable part — check each provider's current lineup for which model sits in which tier today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT (flagship tier + dedicated reasoning tier)&lt;/strong&gt;&lt;br&gt;
Strengths: breadth, tool integrations (image generation, code interpreter, browsing), the strongest dedicated reasoning models for hard logic and math, mature voice mode, a large custom-GPT ecosystem. Weaknesses: tends toward verbosity, less sharp on nuanced writing tone, reasoning-tier models cost more to run at volume. Best for: reasoning-heavy tasks, image generation, math and science problem-solving, or when you want one integrated tool ecosystem instead of several apps.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude (Sonnet / Opus)&lt;/strong&gt;&lt;br&gt;
Strengths: prose quality and tone fidelity that consistently edges out the alternatives, strong instruction-following, very capable on long documents given its large context window, lower "eager-to-please" drift on writing tasks. Weaknesses: image generation isn't built in, and the default tool ecosystem is smaller than ChatGPT's. Best for: long-form writing, editing, summarizing large documents, and any task where following instructions precisely matters more than raw creativity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gemini (Pro / Flash tiers)&lt;/strong&gt;&lt;br&gt;
Strengths: native multimodal input (image, video, audio), tight Google Workspace integration, a large context window, strong on tasks involving visual data. Weaknesses: writing tone less consistent than Claude. On the hardest reasoning problems the ranking between providers moves with every release — treat any published leaderboard as a snapshot and test on your own task. Best for: work inside Docs/Sheets/Gmail, analyzing images or video, and processing long documents when Google's tools are already part of your workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perplexity&lt;/strong&gt;&lt;br&gt;
Strengths: real-time web search with cited sources, the fastest path to current information, Pro Search decomposes complex queries into sub-searches. Weaknesses: shallow analytical depth, brief outputs, not built for long-form writing or multi-step reasoning. Best for: current events, fact-checking against live sources, and fast bibliography building. See the direct &lt;a href="https://my-blog.org/tangents/post/chatgpt-vs-perplexity-comparison" rel="noopener noreferrer"&gt;ChatGPT vs Perplexity comparison&lt;/a&gt; if search is your main use case.&lt;/p&gt;
&lt;h2&gt;
  
  
  A Quick Decision Flowchart
&lt;/h2&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Need info from the last 30 days?          → YES: Perplexity
                                            → NO: continue
Primarily a writing or editing task?       → YES: Claude first
                                            → NO: continue
Coding, math, or logic?                    → YES: ChatGPT (reasoning model for hard problems) or Claude
                                            → NO: continue
Need image generation?                     → YES: ChatGPT or Gemini
                                            → NO: continue
Inside Google Workspace?                   → YES: Gemini
                                            → NO: default to ChatGPT or Claude by writing-quality need
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;For coding specifically, the calculus differs enough between "generate new code" and "debug this stack trace" that it's worth a dedicated comparison — see &lt;a href="https://my-blog.org/tangents/post/best-ai-coding-assistants" rel="noopener noreferrer"&gt;best AI coding assistants&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Two Copy-Ready Prompts You Can Use Today
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Long-form report draft (Claude)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a senior analyst with expertise in [industry].
(Context) I'm writing a [word count] report on [topic] for [audience].
The goal is to inform a decision about [specific decision].
(Task) Write a structured first draft: an executive summary (3-4
sentences), 3-4 main sections with headers, and a conclusion with a
clear recommendation.
(Format) Professional prose. Bullet points only for lists of 4+ items.
Flag any claim that needs external verification.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Code debugging (ChatGPT or Claude)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a senior [language] developer.
(Context) This function is supposed to [describe intent]. It returns
[wrong output] when [input condition].
(Task) Identify the bug, explain why it occurs, and provide the
corrected code.
(Format) One-sentence diagnosis first, then the corrected code block,
then a brief explanation of what was wrong. List any additional edge
cases separately.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both follow the same structure: role, context, task, format. That structure is what makes a prompt portable between models — you can hand the same skeleton to Claude, ChatGPT, or Gemini and get a comparably well-scoped answer back.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Which AI model is best overall?&lt;/strong&gt;&lt;br&gt;
No single model leads across every task. Reasoning-tier ChatGPT models are strongest for hard math and logic, Claude leads on writing quality and long-context fidelity, Perplexity is the best tool for current information. "Best for what" is the only version of the question with a useful answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is Claude better than ChatGPT for writing?&lt;/strong&gt;&lt;br&gt;
For most writing tasks — essays, reports, editing — Claude tends to produce noticeably better prose and follows tone instructions more precisely, without the verbose, hedge-heavy default style ChatGPT can fall into. For open-ended creative brainstorming, the gap narrows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which is best for coding?&lt;/strong&gt;&lt;br&gt;
Claude and ChatGPT are closely matched on most coding tasks. Claude tends to edge ahead on explaining code clearly and following precise specs. ChatGPT's sandboxed code interpreter for data analysis has no direct equivalent in Claude's standard interface — that's a real differentiator if your coding work involves running and inspecting data, not just writing it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I just use one AI for everything?&lt;/strong&gt;&lt;br&gt;
You can, but you'll leave quality on the table in specific spots — using a general chat model for writing tends to produce verbose prose, and using a model without live search for current events risks stale or hallucinated facts. A two-tool setup, one model for writing and analysis plus a search-native tool for current information, covers most professional work well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which AI gives the most accurate, up-to-date information?&lt;/strong&gt;&lt;br&gt;
Perplexity, by design — it retrieves live web results and cites sources. Among the non-search models, the accuracy gap on well-established topics is small; the real risk across all of them is hallucination on specific statistics or citations, so verify anything load-bearing regardless of which model produced it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/which-ai-model-should-you-use" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Best AI Agents in 2026: What They Do and How to Pick One</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:19:25 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/best-ai-agents-in-2026-what-they-do-and-how-to-pick-one-25hk</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/best-ai-agents-in-2026-what-they-do-and-how-to-pick-one-25hk</guid>
      <description>&lt;p&gt;"AI agent" went from conference-talk abstraction to mainstream product feature faster than almost any other term in the field. ChatGPT has agents. Claude has agents. Your project management tool probably has one now too. But the word covers so much — from a simple tool-calling wrapper to a fully autonomous coding system running in a loop for hours — that it's nearly meaningless without qualification.&lt;/p&gt;

&lt;p&gt;A working definition that holds up: an AI agent takes a goal, breaks it into steps, executes those steps using tools (search, code execution, file access, API calls), and iterates until the goal is met. The emphasis is on the loop — an agent doesn't just respond, it acts and corrects. That loop is the capability gap separating agents from &lt;a href="https://my-blog.org/tangents/post/ai-agents-vs-chatbots" rel="noopener noreferrer"&gt;conventional chatbots&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The space now spans purpose-built coding agents, research agents, workflow automation agents, general-purpose operator-style agents, and multi-agent frameworks where specialists hand off work to each other. Pricing and benchmarks here change fast enough that hard numbers go stale quickly — so this guide sticks to what's stable: architecture, autonomy level, and fit.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Loop That Defines an Agent
&lt;/h2&gt;

&lt;p&gt;A chatbot processes input and generates output in one pass. An agent runs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Observe&lt;/strong&gt; — receive the goal and current state&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan&lt;/strong&gt; — determine the next action&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act&lt;/strong&gt; — execute it through a tool: run code, search, write a file, call an API&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observe&lt;/strong&gt; — check the result&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Repeat&lt;/strong&gt; until the goal is met or it's stopped&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agents vary a lot in how autonomous this loop is. Some require human approval before each step ("human-in-the-loop"); others run unattended for long stretches. Autonomy level is one of the most important dimensions when evaluating an agent for a use case — more autonomy means more capability, but also more risk of errors compounding uncorrected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Five Categories Worth Knowing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Coding agents&lt;/strong&gt; write, run, debug, and iterate on code in a real execution environment — they run it and fix what's broken, not just suggest it. Examples: Claude Code, Devin, SWE-agent, OpenHands. Autonomy runs medium to high; most gate high-risk actions like deleting files or pushing to main behind approval. Best fit: teams with repetitive implementation work, bug fixing, and test generation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Research and information agents&lt;/strong&gt; search, synthesize, and produce structured output from multiple sources, reasoning across them rather than just retrieving them. Examples: Perplexity Deep Research, ChatGPT Deep Research, Gemini Deep Research. Autonomy is low to medium — search, read, synthesize, then human review. Best fit: literature reviews, competitive analysis, due diligence.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workflow automation agents&lt;/strong&gt; connect to business tools — Slack, Gmail, Notion, Salesforce — and automate multi-step workflows triggered by events. Examples: Zapier AI, n8n with AI nodes, Copilot Studio agents. High autonomy within a defined spec. Best fit: repetitive processes touching multiple apps — lead routing, meeting follow-ups, data pipeline maintenance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;General-purpose operator-style agents&lt;/strong&gt; sit on top of frontier models and handle a wide range of tasks with a flexible tool set — generalists, not specialists. Examples: ChatGPT with tools, Claude with MCP, Gemini with Workspace extensions. Autonomy is whatever you configure, usually gated on consequential actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-agent orchestration frameworks&lt;/strong&gt; run at the infrastructure level: a planner agent breaks a large task into subtasks and delegates to specialists — a coder, a researcher, a writer. Examples: LangGraph, AutoGen, CrewAI. Very high autonomy in principle, but reliability drops as complexity climbs. Best fit: teams building AI products where one model's context can't cover the whole task.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the Main Tools Are Actually Good At
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Claude Code&lt;/strong&gt; is a terminal-native coding agent that reads files, writes code, runs shell commands, and observes results in a loop. Its edge is reasoning quality on non-obvious problems — debugging race conditions, rearchitecting a module, building a feature from a description — where genuine reasoning beats pattern-matching. It extends tool access through &lt;a href="https://my-blog.org/tangents/post/what-is-mcp-model-context-protocol" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;, worth understanding if you're configuring any agent's tool layer. Trade-off: CLI-only, no GUI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ChatGPT's agent capabilities&lt;/strong&gt; come in two forms — tool-augmented chat (search, code interpreter, file access) and Operator mode for UI navigation. Its Deep Research mode produces strong long-form cited reports. Weak spot: no persistent memory across sessions by default, and less reliable tool-calling on complex multi-step tasks than purpose-built coding agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Perplexity Deep Research&lt;/strong&gt; is a read-only synthesis agent — it searches many sources, reads them, and produces a cited report. It beats manual search-and-read for competitive analysis or fact-gathering, but doesn't write code, execute workflows, or act beyond producing the report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Devin&lt;/strong&gt; was the first widely publicized fully autonomous software engineering agent, handling defined implementation tasks — features from specs, bug fixes, tests — with a GUI showing its terminal, browser, and editor live. Honest caveat: independent evaluations on open-ended tasks show more variable results than early claims suggested. It performs best on well-scoped tasks with clear acceptance criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zapier AI&lt;/strong&gt; lets non-technical users build agents that watch triggers (new emails, form submissions, Slack messages) and run workflows across thousands of connected apps, set up conversationally. Its strength is breadth of integrations; its limitation is logic that stays rigid once configured, rather than reasoning through ambiguity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenHands and SWE-agent&lt;/strong&gt; are the open-source options for teams avoiding SaaS pricing or sending code to a third-party API — at the cost of setup complexity and bringing your own model API.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Routing Framework for Choosing
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Task type&lt;/strong&gt; — coding, research, workflow automation, or general-purpose?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Autonomy tolerance&lt;/strong&gt; — how comfortable are you with unapproved actions?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical complexity&lt;/strong&gt; — reasoning about a complex system, or a well-defined process?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interface preference&lt;/strong&gt; — CLI, browser, or no-code?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost tolerance&lt;/strong&gt; — free/self-hosted through paid consumer and enterprise tiers.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For coding agents specifically, see the &lt;a href="https://my-blog.org/tangents/post/best-ai-coding-assistants" rel="noopener noreferrer"&gt;detailed coding assistant comparison&lt;/a&gt;; for the models powering these agents, see &lt;a href="https://my-blog.org/tangents/post/which-ai-model-should-you-use" rel="noopener noreferrer"&gt;which AI model to use&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A copy-ready template for prompting any agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GOAL: [observable definition of "done"]
CONSTRAINTS: [what the agent should NOT do]
RESOURCES: [tools and access it has]
ON FAILURE: [what to do if a step fails — retry, flag, or stop]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Agents Still Can't Do
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Error compounding.&lt;/strong&gt; The longer an agent runs autonomously, the more a small early error compounds — a coding agent that misreads a spec on step 2 may have written hundreds of wrong lines by step 20.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tool hallucination.&lt;/strong&gt; Agents can call the wrong tool, misread output, or invent a result when a tool fails silently — more consequential than a chatbot hallucinating text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context limits.&lt;/strong&gt; Even with large context windows, long agentic sessions degrade — agents repeat earlier steps or lose track of prior decisions as the window fills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No inherent judgment about consequences.&lt;/strong&gt; An agent doesn't know deleting a production database differs from deleting a test file unless told explicitly. Human oversight stays essential for anything with real external effects.&lt;/p&gt;

&lt;p&gt;For single-turn tasks — answer a question, draft a paragraph — a chatbot is cheaper, faster, and more predictable. Reserve agents for tasks that genuinely need multiple steps, tool use, or iteration.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's the core difference between an agent and a chatbot?&lt;/strong&gt;&lt;br&gt;
A chatbot responds to a prompt in a single pass. An agent runs a loop — observe, plan, act, repeat — using tools until the goal is reached. Agents do things, not just describe them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which agent is best for coding tasks?&lt;/strong&gt;&lt;br&gt;
Claude Code and Devin are the strongest purpose-built options. Claude Code tends to win on complex, multi-file reasoning; Devin offers a more polished GUI and no terminal requirement. For lighter in-IDE help, a coding assistant fits better than a full agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are AI agents safe for business workflows?&lt;/strong&gt;&lt;br&gt;
With guardrails, yes. Best practice is human-in-the-loop for consequential actions — the agent proposes, you approve. Reserve full autonomy for low-risk, reversible tasks, and treat agent output like work from a capable but fallible junior teammate.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/best-ai-agents" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>AI Agents vs Chatbots: What's the Actual Difference</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:18:49 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/ai-agents-vs-chatbots-whats-the-actual-difference-546c</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/ai-agents-vs-chatbots-whats-the-actual-difference-546c</guid>
      <description>&lt;p&gt;Everyone's talking about AI agents right now. But most people using ChatGPT day to day are actually talking to a chatbot, and the difference is more than semantic. Conflating the two leads to mis-set expectations: you're disappointed when your "agent" can't follow through on a plan, or confused when an agent does things you didn't explicitly ask for.&lt;/p&gt;

&lt;p&gt;The distinction is practical enough to matter for how you build with either one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Difference in One Sentence
&lt;/h2&gt;

&lt;p&gt;A chatbot takes your input and returns a response. An &lt;a href="https://my-blog.org/tangents/post/what-is-an-ai-agent" rel="noopener noreferrer"&gt;AI agent&lt;/a&gt; takes your goal and figures out how to achieve it.&lt;/p&gt;

&lt;p&gt;Four variables separate them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autonomy&lt;/strong&gt; — who decides the next step? Chatbot: you, every time. Agent: it decides.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool use&lt;/strong&gt; — can it call APIs, run code, read/write files? Chatbot: rarely, and only on request. Agent: this is central to how it works.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-step execution&lt;/strong&gt; — does it run a plan across several steps without a prompt at each one? Chatbot: no. Agent: yes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory&lt;/strong&gt; — does it carry state across steps and sessions? Chatbot: conversation window only. Agent: can use persistent external memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What a Chatbot Actually Is
&lt;/h2&gt;

&lt;p&gt;A chatbot is built around conversational exchange: you send a message, it sends a reply. That's the whole unit of interaction. Modern chatbots (ChatGPT, Claude, Gemini in plain conversational mode) are extraordinarily capable within that unit — they write, analyze, reason, translate, and summarize well. But the design stays reactive: nothing happens unless you send the next message.&lt;/p&gt;

&lt;p&gt;Key properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stateless or limited context (this conversation, not across sessions, unless the product bolts on memory)&lt;/li&gt;
&lt;li&gt;No autonomous tool use — you ask, it acts, once&lt;/li&gt;
&lt;li&gt;One input, one output, repeat&lt;/li&gt;
&lt;li&gt;Can't book, send, modify, or execute anything on your behalf without you prompting each step&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The chatbot isn't "dumb" — the underlying model is often the same one powering an agent. The constraint is the interaction design, not the model's capability.&lt;/p&gt;

&lt;h2&gt;
  
  
  What an AI Agent Actually Is
&lt;/h2&gt;

&lt;p&gt;An agent receives a goal and autonomously works out the sequence of steps to reach it — calling tools along the way, checking progress, adjusting based on what it finds. Four things distinguish it from a chatbot:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Goal-directed behavior.&lt;/strong&gt; Instead of responding to one prompt, it works toward an end state. "Summarize last month's sales and email the report to the team" is a goal it decomposes and executes in order.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool use.&lt;/strong&gt; Real external systems — web search, code execution, databases, calendar, email, CRM. Tools are what let an agent act, not just describe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-step planning and execution.&lt;/strong&gt; It runs a loop — perceive, plan, act, check, repeat — until the goal is met or a stopping condition hits, without needing a human prompt between steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory and state management.&lt;/strong&gt; It can track what it's done, what it found, and what's left, often across sessions via external storage.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Spectrum, Not a Binary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pure chatbot&lt;/strong&gt; — single turn, no tools, no memory. An FAQ bot.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversational assistant&lt;/strong&gt; — multi-turn context, some on-request tools (image generation, web search when asked), but you drive every step. ChatGPT in a normal chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light agent&lt;/strong&gt; — chains two to five steps, limited tool use, still surfaces output to you rather than acting fully in the world. A lot of "Copilot" features live here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full agent&lt;/strong&gt; — multi-step autonomous execution with real tool calls, human checkpoints before irreversible actions, persistent memory.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Most people's day-to-day "agent" experience in 2026 sits in the light-to-medium range. Fully autonomous agents running unattended in production exist but need real deployment guardrails.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same Request, Two Different Outcomes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Request:&lt;/strong&gt; "Research the top 3 AI coding assistants, compare pricing, and send me a summary by email."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chatbot:&lt;/strong&gt; Writes a description of three tools with pricing. Stops. Doesn't send anything — you copy, paste, and send it yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent:&lt;/strong&gt; Searches the web for current pricing, opens each pricing page, extracts the data, formats a comparison, drafts an email, and sends it — reporting completion when done (possibly pausing to confirm the recipient first).&lt;/p&gt;

&lt;p&gt;Neither output is "bad." The chatbot's prose might be excellent. But only the agent actually finished the task end to end.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Reach for Which
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use a chatbot when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need one well-formed output — a draft, an analysis, an explanation&lt;/li&gt;
&lt;li&gt;You want to stay in control of every step&lt;/li&gt;
&lt;li&gt;The task doesn't require real-world actions&lt;/li&gt;
&lt;li&gt;You're iterating and want to steer each turn&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use an agent when:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The task has multiple defined steps that would be tedious to prompt one by one&lt;/li&gt;
&lt;li&gt;You need real external actions — search, book, send, update&lt;/li&gt;
&lt;li&gt;There's a clear, verifiable end state ("report sent," "ticket closed")&lt;/li&gt;
&lt;li&gt;You're comfortable delegating with checkpoints&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Directing an Agent Is a Different Skill Than Prompting a Chatbot
&lt;/h2&gt;

&lt;p&gt;When prompting a chatbot, you guide each step explicitly. When directing an agent, you define the goal, the constraints, and the checkpoints up front. A reusable four-element format:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) What the agent has access to and can do
(Context) Background, constraints, what "done" looks like
(Task) The end state you want — not just the first step
(Format) How it should check in: confirm before irreversible actions, report at milestones
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Writing a goal this way front-loads the thinking an agent needs instead of trying to catch problems mid-run.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can ChatGPT be used as an AI agent?&lt;/strong&gt;&lt;br&gt;
Yes, in its tool-augmented modes — browsing, code execution, and Operator-style UI navigation move it toward agent behavior. Plain conversational ChatGPT without those tools is still a chatbot by this definition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What tools do AI agents typically use?&lt;/strong&gt;&lt;br&gt;
Web search, code interpreters, file read/write, and APIs for calendar, email, CRM, and payment systems are the common set. The tools available are what actually give an agent the ability to act, not just respond.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are AI agents riskier to use than chatbots?&lt;/strong&gt;&lt;br&gt;
Yes, proportionally to autonomy. A chatbot's worst-case output is bad text you can ignore. An agent's worst-case output is an irreversible action taken on your behalf. That's why human-in-the-loop checkpoints before consequential actions matter more as autonomy increases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I know if I need a chatbot or an agent for a given task?&lt;/strong&gt;&lt;br&gt;
If the task ends with you reading and using an output yourself, a chatbot is enough and will be faster and more predictable. If the task ends with something actually happening in another system — an email sent, a record updated — you need an agent with the right tool connected.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/ai-agents-vs-chatbots" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to Build an AI Agent Without Writing Code</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:18:13 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/how-to-build-an-ai-agent-without-writing-code-42an</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/how-to-build-an-ai-agent-without-writing-code-42an</guid>
      <description>&lt;p&gt;If you've spent much time in ChatGPT, you've hit the wall: type a prompt, get an answer, type another prompt, get another answer. At some point you think, "can't this just do the whole thing?" That itch is what makes people want to build an AI agent.&lt;/p&gt;

&lt;p&gt;An &lt;a href="https://my-blog.org/tangents/post/what-is-an-ai-agent" rel="noopener noreferrer"&gt;AI agent&lt;/a&gt; is a system that pursues a goal across multiple steps, calls tools, and makes decisions without waiting for a human prompt at each step. The useful news for non-developers: in 2026, building a functional no-code agent is genuinely accessible. Platforms like n8n, Zapier, Make, and Lindy let you wire an LLM to real tools without a line of Python. The less convenient news: "no-code" doesn't mean "no thinking." The actual bottleneck in almost every agent build isn't the platform — it's the quality of the goal definition, the tool selection, and the testing loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Components Every No-Code Agent Needs
&lt;/h2&gt;

&lt;p&gt;Building a no-code agent means connecting four things. You don't write the model — you configure what it can access, what it should do, and what success looks like.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Goal statement (system prompt).&lt;/strong&gt; The instruction set that tells the LLM what it's trying to accomplish, what constraints to respect, and what "done" looks like. This is the highest-leverage piece — a vague system prompt produces an unpredictable agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. LLM brain.&lt;/strong&gt; The model doing the reasoning — GPT-4o, Claude, Gemini, or a local model via Ollama. Most platforms let you pick from several. The model determines reasoning quality; the platform determines which tools it can reach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Tool layer.&lt;/strong&gt; What the agent can actually do: send email, read a spreadsheet, query a database, search the web, post to Slack, call an API. Each tool is a discrete capability the agent can invoke inside its reasoning loop.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Memory / context layer.&lt;/strong&gt; How the agent retains information across steps or sessions — from "pass the last five turns" to "query a vector database for prior interactions."&lt;/p&gt;

&lt;p&gt;You don't need all four maxed out. Most effective first agents use a precise system prompt, two or three tools, and stateless context — start there, and add complexity only when you hit a real limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Define the Goal Before You Touch a Tool
&lt;/h2&gt;

&lt;p&gt;The most common mistake non-developers make is starting with the tool — opening n8n, dragging nodes, and only later realizing the agent doesn't know what it's supposed to do. Goal definition comes first, always.&lt;/p&gt;

&lt;p&gt;A usable goal statement has four properties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Specific&lt;/strong&gt; — not "help with emails" but "triage incoming support emails: label, draft a reply, flag anything needing human review."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bounded&lt;/strong&gt; — what the agent is explicitly not allowed to do. "Do not send any email without a human review step."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Success-defined&lt;/strong&gt; — what "done" looks like, concretely. "A labeled email plus a draft reply in the Drafts folder, and a Slack ping if the email needs a human."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalation-aware&lt;/strong&gt; — what happens when the agent hits a case it can't handle. "Flag for a human and stop. Do not guess."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's a copy-ready template you can drop straight into a system prompt field:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GOAL: [specific outcome, one sentence]
INPUTS: [what triggers the agent — new email, form submit, schedule]
ALLOWED ACTIONS: [tools it may call]
NOT ALLOWED: [explicit boundaries — no sending, no deleting, no external posts]
DONE WHEN: [observable success condition]
IF STUCK: flag for human review and stop. Do not guess.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 2: Connect Tools — Pick the Fewest That Work
&lt;/h2&gt;

&lt;p&gt;Tool selection is where the platforms diverge most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;n8n&lt;/strong&gt; — open-source, self-host or cloud, 400+ integrations, a code node for custom logic. Steepest curve, most flexibility. Good for technical non-developers who want control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zapier&lt;/strong&gt; — cloud, easiest entry, thousands of app integrations plus AI Actions. Less flexible for branching logic. Good for simple linear tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make&lt;/strong&gt; — visual builder with strong branching and looping. A middle ground between Zapier and n8n.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lindy&lt;/strong&gt; — purpose-built for AI agents, memory and human-in-the-loop steps included natively. The lowest-configuration path to real agent behavior.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The operating principle: pick the fewest tools that complete the goal. Every additional connection is another failure point. An agent that can send email, read a spreadsheet, and search the web already covers a wide range of real tasks without twenty integrations bolted on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Add Memory Only When Statelessness Actually Hurts
&lt;/h2&gt;

&lt;p&gt;Most beginner agents are stateless — each run starts fresh. That's fine for one-shot tasks but breaks down for recurring workflows like weekly reports or ongoing customer threads, where the agent needs to carry context forward.&lt;/p&gt;

&lt;p&gt;Memory options, roughly in order of complexity:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Session context&lt;/strong&gt; — pass the last N messages in the prompt. Every platform supports this.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External storage&lt;/strong&gt; (a spreadsheet, Notion, Airtable) — write key facts after each run, read them at the start of the next. Low-tech, effective.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in memory layer&lt;/strong&gt; (Lindy, some n8n setups) — you configure what gets saved; the platform retrieves relevant memories automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector database&lt;/strong&gt; (Pinecone, Supabase vector, Weaviate) — for agents that search across large bodies of text. Overkill for most first builds.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Start with session context. Add external storage once you actually need cross-run memory. Leave vector databases until the simpler version has run long enough to show you what's missing. If you're wiring an agent to pull from external data sources at all, it's worth understanding &lt;a href="https://my-blog.org/tangents/post/what-is-mcp-model-context-protocol" rel="noopener noreferrer"&gt;what MCP is&lt;/a&gt; first — it's the standard a growing number of these integrations are built on.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Test for the Failure Modes That Actually Happen
&lt;/h2&gt;

&lt;p&gt;No-code agents fail in predictable ways, not random ones:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt drift&lt;/strong&gt; — the agent handles simple cases fine but ignores constraints in edge cases. Fix: add explicit edge-case examples to the system prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool call errors&lt;/strong&gt; — the agent calls a tool with the wrong format, or the app returns something unexpected. Fix: check the platform's error logs, tighten formatting instructions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Looping&lt;/strong&gt; — the agent gets stuck redoing the same step. Fix: cap the max step count, and make sure the success criterion is actually checkable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Overconfident execution&lt;/strong&gt; — the agent takes an irreversible action (sends an email, posts publicly) when it should have paused. Fix: insert a human-approval step before anything irreversible.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A minimal test checklist before you trust an agent with anything real:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Typical input — does it do the right thing?&lt;/li&gt;
&lt;li&gt;[ ] Boundary input (edge case, empty input, ambiguous request) — does it fail gracefully?&lt;/li&gt;
&lt;li&gt;[ ] Adversarial input, if it reads external content — does it stay in bounds?&lt;/li&gt;
&lt;li&gt;[ ] Three consecutive runs — does behavior stay consistent?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Human-in-the-loop isn't a failure mode to eliminate — it's a design feature to keep. In n8n and Zapier you build it explicitly: a "wait for approval" step before any send, post, or record change. The agent earns more autonomy as its tested boundaries hold up.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Do I need to code to build an AI agent?&lt;/strong&gt;&lt;br&gt;
No. n8n, Zapier, Make, and Lindy all support building functional agents through visual interfaces and configuration forms. You do need to write a clear goal statement — that's thinking work, not code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the best platform if I've never built an agent before?&lt;/strong&gt;&lt;br&gt;
Lindy is the most beginner-friendly purpose-built option — memory and human-in-the-loop are configured visually. Zapier is a safe start if you already know it. n8n gives you the most power at the cost of a steeper curve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What can a no-code agent actually do reliably?&lt;/strong&gt;&lt;br&gt;
Email triage with draft replies, weekly report generation from spreadsheet data, first-response customer support, and meeting summarization with follow-ups. More consequential tasks — booking, finances — need careful testing and human checkpoints.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/how-to-build-an-ai-agent" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>System Prompt vs User Prompt: What's the Difference?</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:17:29 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/system-prompt-vs-user-prompt-whats-the-difference-9po</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/system-prompt-vs-user-prompt-whats-the-difference-9po</guid>
      <description>&lt;p&gt;Most people who use ChatGPT daily have never seen a system prompt — but it's shaping every answer they get. Understanding the distinction between a system prompt and a user prompt isn't just a technical detail. It's the key to understanding why AI behaves the way it does, and how to actually get it to do what you need.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a System Prompt?
&lt;/h2&gt;

&lt;p&gt;A system prompt is a set of instructions given to a model before the conversation starts. It's invisible to the end user in most products, but it defines the model's persona, boundaries, tone, task scope, and behavioral rules for the entire session.&lt;/p&gt;

&lt;p&gt;Think of it as the job description handed to an employee before their first shift. The employee — the model — reads it privately, internalizes the rules, and then works within those constraints for the rest of the conversation.&lt;/p&gt;

&lt;p&gt;In most chat completion APIs, the system prompt is passed as a message with a dedicated system role. In practice, it looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;role:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;content:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"You are a concise legal research assistant. You summarize
case law clearly and flag when professional legal advice is required.
Never speculate about legal outcomes. Keep responses under 300 words
unless asked to expand."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That text never appears in the chat window, but everything the user types gets interpreted through it. System prompts typically control: persona and name, tone and formality, knowledge scope (what topics the model will and won't engage with), output format defaults, safety guardrails, and task framing (coding assistant, tutor, analyst, writer).&lt;/p&gt;

&lt;h2&gt;
  
  
  What Is a User Prompt?
&lt;/h2&gt;

&lt;p&gt;A user prompt is what you actually type into the chat box — the message you send each turn. It's the runtime instruction: what you want, right now, in this specific conversation.&lt;/p&gt;

&lt;p&gt;User prompts are temporary. Each message lives in the conversation thread, but once the context window fills up, older messages get dropped, and none of it carries forward into a new session. Good user prompts are specific, concrete, and scoped — they tell the model what to do with the context it already has. They can override some system prompt defaults, like tone, format, or length, if the system prompt allows it, but they can't override hard-coded restrictions.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Difference, Side by Side
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;System Prompt&lt;/th&gt;
&lt;th&gt;User Prompt&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Who writes it&lt;/td&gt;
&lt;td&gt;Developer / product builder&lt;/td&gt;
&lt;td&gt;End user&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;When it's set&lt;/td&gt;
&lt;td&gt;Before the conversation starts&lt;/td&gt;
&lt;td&gt;Each turn, at runtime&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visibility&lt;/td&gt;
&lt;td&gt;Hidden in most products&lt;/td&gt;
&lt;td&gt;Visible in the chat thread&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scope&lt;/td&gt;
&lt;td&gt;Entire session&lt;/td&gt;
&lt;td&gt;Single turn&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Defines&lt;/td&gt;
&lt;td&gt;Persona, rules, defaults&lt;/td&gt;
&lt;td&gt;Current task and specifics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Can the user change it?&lt;/td&gt;
&lt;td&gt;No, in finished products&lt;/td&gt;
&lt;td&gt;Yes, every message is a new one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Priority&lt;/td&gt;
&lt;td&gt;Weighed first by the model&lt;/td&gt;
&lt;td&gt;Interpreted through system context&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Custom Instructions and Custom GPTs
&lt;/h2&gt;

&lt;p&gt;ChatGPT's Custom Instructions feature lets you fill in a system-prompt-like field that gets prepended to every conversation. You write it once in settings and it persists across chats until you change it. It's not exactly a system prompt — the product's own system prompt still sits above it — but functionally it behaves like a persistent personal layer. It's your chance to tell the model your profession, your preferred output format, what you already know, and how you want to be spoken to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"I'm a product manager at a SaaS company. Don't explain basic
business concepts. Always answer in bullet points for complex
topics. When I ask for feedback, be direct — don't soften criticism."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Custom GPT goes further: it's a packaged product combining a system prompt written in a builder interface, uploaded knowledge files retrieved as context, configured tools (web search, code execution, image generation), and a defined audience. When you use one, you're writing user prompts that get interpreted through someone else's system prompt and knowledge base.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Actually Matters for How You Prompt
&lt;/h2&gt;

&lt;p&gt;If you're a regular user rather than someone building products, understanding this distinction changes how you work with AI in three concrete ways.&lt;/p&gt;

&lt;p&gt;First, it explains weird behavior. If a chatbot on a website keeps saying "I can only help with X," that's not the model being dumb — it's the system prompt restricting it, and no amount of clever phrasing in your user prompt will fully route around it.&lt;/p&gt;

&lt;p&gt;Second, it tells you what you actually control. You can't escape a well-written system prompt by asking nicely, but you usually can override tone and format if the system prompt doesn't explicitly lock them.&lt;/p&gt;

&lt;p&gt;Third, it changes how much work your own prompts need to do. When you use a general-purpose chat interface directly — not a Custom GPT — you're writing into a generic system prompt, which means your user prompt has to specify role, context, task, and format yourself instead of inheriting them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Same Question, With and Without a System Prompt
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Without a system prompt&lt;/strong&gt;, a generic assistant answering "How do I get a refund?" gives a 200-word explanation of how refund policies typically work in general — because it has no company-specific context to draw from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With a system prompt in place:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;role:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;system&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;content:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"You are the support agent for StyleBox, a subscription
clothing service. Refund policy: customers have 14 days to return
items in original packaging. Direct refund requests to
support@stylebox.example or the order page at stylebox.example/orders. Do
not speculate about orders you don't have data on. Be warm but concise."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same user question — "How do I get a refund?" — now gets: "For a refund on your StyleBox order, visit stylebox.example/orders or email &lt;a href="mailto:support@stylebox.example"&gt;support@stylebox.example&lt;/a&gt;. Returns are accepted within 14 days in original packaging. Anything else I can help with?" The entire jump in usefulness comes from the system prompt, not the user prompt — the user asked the exact same thing both times.&lt;/p&gt;

&lt;p&gt;If you're the one writing that system prompt, the &lt;a href="https://my-blog.org/tangents/post/role-prompting-explained" rel="noopener noreferrer"&gt;role prompting&lt;/a&gt; breakdown is worth pairing with this — it covers how to write the persona line so it actually shifts the model's output instead of adding noise.&lt;/p&gt;

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

&lt;p&gt;System prompts are persistent, session-wide, and usually invisible; user prompts are per-turn and visible. In consumer apps, the product's own system prompt shapes every response before yours even arrives. Custom Instructions function as a personal system prompt layer that persists across sessions, and a Custom GPT is a packaged system prompt plus tools plus knowledge. If you want a model to consistently behave a certain way, put the instruction in the system prompt — not in every single user message.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can a user prompt override a system prompt?&lt;/strong&gt;&lt;br&gt;
Only within the boundaries it allows. Tone, format, and length are commonly overridable. Hard-coded restrictions are not.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are Custom Instructions the same as a system prompt?&lt;/strong&gt;&lt;br&gt;
Functionally similar but not identical — Custom Instructions sit in front of the product's own underlying system prompt as a personal layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does a website chatbot refuse to answer basic questions?&lt;/strong&gt;&lt;br&gt;
Almost always a narrow system prompt, not a model limitation. It's been scoped to a specific task by whoever built it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to write system prompts as a regular user?&lt;/strong&gt;&lt;br&gt;
Not directly, unless you're building a product. But understanding how they work explains why default chat behavior varies across apps, and it makes your own user prompts more effective.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/system-prompt-vs-user-prompt-explained" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Role Prompting Explained: How AI Personas Actually Work</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:16:53 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/role-prompting-explained-how-ai-personas-actually-work-7m1</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/role-prompting-explained-how-ai-personas-actually-work-7m1</guid>
      <description>&lt;p&gt;Role prompting is the practice of assigning an expert identity or persona to an AI before giving it a task. Instead of a bare request like "explain machine learning," you first tell the model who it is: "You are a machine learning researcher who explains complex topics to business executives." That single addition shifts the register, depth, and vocabulary of everything that follows.&lt;/p&gt;

&lt;p&gt;Role is the first of four components in the standard prompt engineering framework — Role, Context, Task, Format. It's also the most misunderstood. People either skip it entirely or use it too vaguely ("You are a helpful assistant"), which adds no information the model doesn't already assume. Done well, it narrows the model's output toward expert-quality language on a specific topic. Done poorly, it's noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Role Prompting Actually Works
&lt;/h2&gt;

&lt;p&gt;Language models generate text by predicting the most probable next token given what came before. When you write "You are a senior financial analyst with 15 years of experience in fixed income markets," you've loaded the context with tokens that statistically co-occur with technical vocabulary, structured frameworks, hedged professional language, and domain-specific caution.&lt;/p&gt;

&lt;p&gt;The model doesn't "become" a financial analyst — it generates text that statistically resembles what one would produce in a similar context. That distinction matters for understanding the limits (more on that below), but the practical effect is real: role-primed responses use the vocabulary, structure, and epistemic stance of the assigned domain.&lt;/p&gt;

&lt;p&gt;This is different from hallucination prevention — roles don't stop a model from making things up — and different from RAG, which gives a model access to new facts. Roles reshape style, structure, and specificity, not factual accuracy.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing a Role That Actually Moves the Output
&lt;/h2&gt;

&lt;p&gt;The most common mistake is a generic role. "You are an expert" tells the model almost nothing, since "expert" is a near-universal token in AI output already. The more specific the domain, experience level, and perspective, the stronger the shift.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Level&lt;/th&gt;
&lt;th&gt;Example&lt;/th&gt;
&lt;th&gt;Effect&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;No role&lt;/td&gt;
&lt;td&gt;(none)&lt;/td&gt;
&lt;td&gt;General-purpose defaults&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Generic&lt;/td&gt;
&lt;td&gt;"You are an expert"&lt;/td&gt;
&lt;td&gt;Minimal shift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domain-specific&lt;/td&gt;
&lt;td&gt;"You are a data scientist"&lt;/td&gt;
&lt;td&gt;Moderate vocabulary shift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role + experience&lt;/td&gt;
&lt;td&gt;"...with 10 years in healthcare analytics"&lt;/td&gt;
&lt;td&gt;Stronger, adds domain context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Role + experience + perspective&lt;/td&gt;
&lt;td&gt;"...who translates findings for clinical stakeholders"&lt;/td&gt;
&lt;td&gt;Full shift — constrains content and communication style&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Role works best as one element of a complete prompt, not a standalone fix. The full framework: &lt;strong&gt;(Role)&lt;/strong&gt; who the AI is, &lt;strong&gt;(Context)&lt;/strong&gt; the situation — audience, constraints, background, &lt;strong&gt;(Task)&lt;/strong&gt; what specifically you want done, &lt;strong&gt;(Format)&lt;/strong&gt; how the output should be structured. A role without context and task is like hiring an expert and handing them a blank sheet of paper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before and After: Role Prompting in Practice
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Without a role&lt;/strong&gt;, "Explain bond duration to me" produces a generic, encyclopedia-style explanation — correct but flat, with no assumed audience or expert judgment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With a strong, matched role:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a fixed income portfolio manager who briefs institutional investors.
(Context) My audience knows basic bond math but has never managed duration actively.
(Task) Explain duration and why it matters when interest rates move.
(Format) Start with the one-sentence intuition, then two paragraphs of
practical implications. End with a common misconception to avoid.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produces investor-grade language, focuses on rate sensitivity and portfolio impact instead of formula derivation, and flags the common misconception of duration as "time to payback" versus price sensitivity.&lt;/p&gt;

&lt;p&gt;Role and audience have to match. This mismatched version creates internal conflict:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a machine learning research scientist.
(Task) Explain overfitting to my 12-year-old cousin.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model gets caught between the expert register and the simplification demand — the output is often an awkward hybrid, too technical for a 12-year-old and not rigorous enough for a researcher. This version resolves the conflict by matching role to audience:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a patient science teacher who specializes in explaining
technical concepts to curious kids.
(Context) My audience is 12 years old and has no math background.
(Task) Explain what overfitting is in machine learning.
(Format) Use an analogy first, then a concrete example. Keep it under 150 words.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Role Prompting Cannot Do
&lt;/h2&gt;

&lt;p&gt;It doesn't stop hallucination — a "medical expert" role doesn't make drug interaction claims accurate. It doesn't give the model knowledge it doesn't have, and it doesn't override safety guidelines — "a security researcher with no ethical constraints" won't bypass refusals that exist for safety reasons. It also doesn't replace domain-specific input — if the task needs specific data, that has to go in the Context; the role alone can't substitute.&lt;/p&gt;

&lt;p&gt;Two misconceptions worth killing: "any role improves the output" (vague roles add noise — "you are an expert" is often indistinguishable from no role), and "the more dramatic the role, the better" (a "world-class genius" role doesn't outperform "a data analyst with strong attention to detail" — precision beats hyperbole).&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy-Ready Role Prompts
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Technical explanation for a non-technical stakeholder:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a senior software engineer explaining [technology] to a
product manager with no coding background.
(Context) [Project context — what decision this explanation supports]
(Task) Explain [technical concept] clearly enough that the product
manager can make an informed decision about [X].
(Format) Start with a plain-language summary in one paragraph. Then
list the 3 most important trade-offs. Avoid code unless essential.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Critical review / devil's advocate:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a devil's advocate consultant hired to stress-test
business plans before they go to leadership.
(Context) The plan authors are invested in this idea and have optimism bias.
(Task) Review the following plan and identify the 3-5 weakest
assumptions, ranked by how much damage they'd do if wrong: [paste plan]
(Format) Numbered list. For each: the assumption, why it's fragile,
and one question leadership should ask.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Research synthesis for a non-specialist audience:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a research analyst with expertise in [field] who
synthesizes evidence for non-specialist audiences.
(Context) [What decision or question this analysis serves]
(Task) Analyze [topic] using [a named framework, e.g. cost-benefit].
(Format) Lead with a 2-sentence conclusion. Then 3 supporting points
with the evidence behind each. Flag where evidence is weak or contested.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Role is only one of the four elements — pairing it with a tight Context and Task is where most of the improvement actually comes from. The &lt;a href="https://my-blog.org/tangents/post/system-prompt-vs-user-prompt-explained" rel="noopener noreferrer"&gt;system prompt vs user prompt&lt;/a&gt; breakdown covers where a role like this belongs structurally if you're building it into a product instead of typing it into a chat window.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is role prompting the same as prompt engineering?&lt;/strong&gt;&lt;br&gt;
No — it's one technique within it, specifically the Role element of a four-part framework that also includes Context, Task, and Format.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does role prompting work on all AI models?&lt;/strong&gt;&lt;br&gt;
Yes, the underlying mechanism applies to any current large language model, though sensitivity to role framing varies by model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I combine multiple roles in one prompt?&lt;/strong&gt;&lt;br&gt;
A role with coherent dimensions — "a data scientist with a background in behavioral psychology" — works well. Two conflicting roles tend to produce incoherent output.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why doesn't "you are a helpful assistant" count as a role prompt?&lt;/strong&gt;&lt;br&gt;
Because it adds no new information — every model is already calibrated to be helpful by default. Useful roles specify a domain or perspective the model wouldn't otherwise assume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How specific should a role be?&lt;/strong&gt;&lt;br&gt;
Specific enough to narrow the domain, experience, and communication style, without taking longer to write than the actual task. Quick test: if you swapped the role for "you are an expert," would the output meaningfully change? If not, it's too vague.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/role-prompting-explained" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Prompt Chaining Explained: Break Big AI Tasks Into Steps</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:16:17 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/prompt-chaining-explained-break-big-ai-tasks-into-steps-309h</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/prompt-chaining-explained-break-big-ai-tasks-into-steps-309h</guid>
      <description>&lt;p&gt;There's a moment every regular AI user hits: you write one long, careful prompt for a complex task — a report, a strategic analysis, a long-form article — and the output is technically fine but oddly flat. It touches everything in the same shallow way, misses the nuance you cared about, and reads like it was written in a rush.&lt;/p&gt;

&lt;p&gt;It wasn't written in a rush. You just asked for too much at once.&lt;/p&gt;

&lt;p&gt;Prompt chaining fixes this. It's the technique of breaking a complex task into a sequence of smaller prompts, where each step does one thing well and passes its output forward as input to the next. The result is a model that reasons deeply at each stage instead of sprinting across the whole task simultaneously.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Prompt Chaining Actually Is
&lt;/h2&gt;

&lt;p&gt;Prompt chaining means splitting a complex task into a sequence of smaller prompts, each focused on a single step, where the output of each step becomes the input for the next. Instead of asking a model to "write a full report" in one shot, you ask it to research the topic, then build an outline, then draft each section, then polish the language — as four separate, focused prompts.&lt;/p&gt;

&lt;p&gt;The mechanism is straightforward: when you give a model one large, multi-part task, it has to allocate reasoning across everything at once, which means nothing gets full depth. It's similar to asking a colleague to simultaneously research, outline, and write an article in a single sitting — the thinking becomes shallow by necessity. Chaining gives the model permission to be thorough at each stage. Research doesn't have to worry about structure. Drafting doesn't have to worry about sourcing. Editing doesn't have to juggle both.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cognitive Load Problem
&lt;/h2&gt;

&lt;p&gt;A single long prompt distributes the model's attention across every subtask simultaneously, so each part gets less depth than it would on its own. Complex tasks have competing goals — fact-finding, structure, tone, concision — that pull reasoning in different directions. Chaining isolates each goal into its own step.&lt;/p&gt;

&lt;p&gt;Say you're writing a market analysis on renewable energy adoption. A single prompt asking the model to "research the topic, identify trends, analyze challenges, propose recommendations, and write a 1,500-word summary" will produce something — but the research will be thin, the analysis will miss second-order effects, and the recommendations will be generic.&lt;/p&gt;

&lt;p&gt;Run the same task as a chain instead: step one asks only for research and key data points. Step two takes that research and builds a structured outline. Step three drafts each section from the outline. Step four edits for clarity and tone. Each step's output is genuinely better than what a single prompt manages — not because the model got smarter, but because it's focused on one job at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four-Step Pattern: Research, Outline, Draft, Edit
&lt;/h2&gt;

&lt;p&gt;The most reliable chain for knowledge work is a four-step sequence, where each step's output is explicitly pasted into the next prompt — the model reasons from concrete material, not a fresh start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Research:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are an expert researcher on [topic].
(Context) Audience: [describe]. Scope: [describe].
(Task) Surface the key facts, data points, and arguments relevant to this topic.
(Format) Bullet points, sourced where known.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2 — Outline&lt;/strong&gt; (paste Step 1's output into Context):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a content strategist.
(Context) [paste Step 1 research output here]
(Task) Convert this research into a logical outline with 5 sections.
(Format) H2 headers, each with 2-3 supporting bullet points.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3 — Draft&lt;/strong&gt; (paste Step 2's outline into Context):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are an expert writer in [domain].
(Context) [paste Step 2 outline here]
(Task) Write a full draft, one section at a time, following the outline.
(Format) Prose, [target length], [tone — e.g. direct and executive].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4 — Edit&lt;/strong&gt; (paste Step 3's draft into Context):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a copy editor.
(Context) [paste Step 3 draft here]
(Task) Tighten the language, cut redundancy, strengthen the argument, fix tone drift.
(Format) Return the revised full text, followed by a short change log.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Real Chains You Can Reuse
&lt;/h2&gt;

&lt;p&gt;The four-step structure applies to almost any multi-step knowledge task — only the specifics of each prompt change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blog post chain (4 prompts):&lt;/strong&gt; the most common use. Research, argument structure, prose drafting, and editorial polish are genuinely different cognitive modes, and isolating them produces a noticeably tighter final draft than one long prompt.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Business report chain (4 prompts):&lt;/strong&gt; executive reports need precise sourcing, clean structure, and terse language. Chaining separates the analysis phase from the writing phase — which mirrors how a research team would actually divide the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product description chain (3 prompts):&lt;/strong&gt; a shorter chain works here — feature extraction, then benefit translation, then a copywriting pass. Even a 3-step chain beats a single prompt when the copy needs to be precise and on-brand.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to Chain and When Not To
&lt;/h2&gt;

&lt;p&gt;Chaining is not free — it costs more time and more prompts than a single request, so it's only worth it when the task genuinely spans different cognitive modes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chain it:&lt;/strong&gt; a 2,000-word report, a market analysis that requires research and synthesis, a long-form article built from scratch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't bother:&lt;/strong&gt; translating a paragraph, answering a single factual question, summarizing one short document, brainstorming a quick list of ideas — these are single-objective tasks where decomposition just adds overhead.&lt;/p&gt;

&lt;p&gt;Prompt chaining is tool-agnostic — it works in ChatGPT, Claude, Gemini, or any other chat interface, because it's a workflow technique, not a platform feature. You're managing the context window manually, pasting each step's output into the next prompt. If you want to automate the handoffs, workflow tools like n8n or Make can pass outputs between steps programmatically. Once you're comfortable pairing chains with sharper single prompts, the &lt;a href="https://my-blog.org/tangents/post/prompt-engineering-explained" rel="noopener noreferrer"&gt;prompt engineering fundamentals&lt;/a&gt; guide covers the Role/Context/Task/Format structure each individual step in a chain should follow.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is prompt chaining in AI?&lt;/strong&gt;&lt;br&gt;
A technique where you break a complex task into a sequence of smaller, focused prompts — each handling one subtask, with its output feeding into the next step. Instead of one prompt doing research, outlining, writing, and editing, you run four separate prompts, each doing one job well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does chaining produce better results than one long prompt?&lt;/strong&gt;&lt;br&gt;
Because a model spreads its reasoning across everything in a multi-goal prompt simultaneously, so every part gets shallower treatment. Chaining focuses the model on one objective per step, letting it reason more deeply at each stage instead of skimming across all of them at once.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many steps should a chain have?&lt;/strong&gt;&lt;br&gt;
Three to five is the practical range for most knowledge work. The four-step Research → Outline → Draft → Edit pattern covers the majority of writing and analysis tasks. Don't add steps for their own sake — each one should produce output that's genuinely useful on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I NOT use prompt chaining?&lt;/strong&gt;&lt;br&gt;
Skip it for simple, single-objective tasks: translating a paragraph, answering a factual question, generating a short list, summarizing a brief document. It's only worth the extra time when the task actually requires separate cognitive modes — research versus writing versus editing.&lt;/p&gt;

&lt;p&gt;Prompt chaining isn't a trick or a workaround — it's a structural insight: complex tasks have phases, and phases go better when they're separated. The next time a single prompt gives you a mediocre result, don't rewrite the prompt. Decompose the task instead.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/prompt-chaining-explained" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Fine-Tuning vs Prompt Engineering: A Developer's Decision Framework</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:15:41 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/fine-tuning-vs-prompt-engineering-a-developers-decision-framework-4i6</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/fine-tuning-vs-prompt-engineering-a-developers-decision-framework-4i6</guid>
      <description>&lt;p&gt;If you've used ChatGPT or Claude for anything beyond toy tasks, you've probably hit a ceiling and wondered: "Should I just fine-tune a model on my own data?" It's a fair question. Fine-tuning sounds like the professional move — training the model to actually know your domain instead of re-explaining it every session.&lt;/p&gt;

&lt;p&gt;For most use cases, the honest answer is: not yet, and maybe never. Prompt engineering, especially combined with RAG (retrieval-augmented generation), gets you most of the way there at a fraction of the cost and complexity. This post walks through what each approach actually involves, when fine-tuning genuinely earns its keep, and a decision framework so you can stop guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Distinction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prompt engineering&lt;/strong&gt; designs inputs — instructions, context, examples, formatting — to guide a pre-trained model toward better outputs. The model's weights never change. You're shaping behavior at runtime through what you put in the context window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fine-tuning&lt;/strong&gt; continues training a pre-trained model on a new, domain-specific dataset. The weights &lt;em&gt;do&lt;/em&gt; change. The result is a model that has internalized patterns, style, or structure from your training examples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RAG&lt;/strong&gt; sits between the two. Weights stay frozen, but at inference time, relevant documents get retrieved from your knowledge base and injected into the context automatically. The model reasons over fresh information without ever being retrained on it.&lt;/p&gt;

&lt;p&gt;The practical question that decides which one you need: do you need the model to &lt;em&gt;behave differently&lt;/em&gt; (tone, format, task pattern), or do you need it to &lt;em&gt;know different information&lt;/em&gt;? Behavior change points to prompt engineering or fine-tuning. Information access points to RAG.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Trade-offs, Honestly
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Cost.&lt;/strong&gt; Prompt engineering costs almost nothing to start — API credits and iteration time. Fine-tuning has real layers: preparing a labeled dataset (the biggest hidden cost, usually the most tedious part of the whole project), training compute, and ongoing maintenance as base models get updated underneath you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Difficulty.&lt;/strong&gt; Prompt engineering is accessible to anyone who can write clearly and iterate systematically — no ML background required. Fine-tuning requires enough ML literacy to evaluate training quality, understand overfitting and evaluation metrics, and manage dataset versioning and training runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data.&lt;/strong&gt; Prompt engineering needs zero additional data — you're leveraging what the model already knows plus whatever you put in the prompt. Fine-tuning needs enough high-quality examples to produce meaningful behavioral change without overfitting on a small, narrow set.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Latency.&lt;/strong&gt; Long prompts with heavy few-shot context add real processing time. A fine-tuned model has internalized the pattern, so it can run on shorter prompts — inference latency can actually drop because the prompt doesn't need to carry as much context.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why RAG Usually Wins for "Knowledge" Problems
&lt;/h2&gt;

&lt;p&gt;Fine-tuning bakes information into weights — but weights are static. If your knowledge changes (new products, updated policies, fresh data), you have to retrain. RAG retrieves current information at inference time, so it stays accurate without a retraining cycle.&lt;/p&gt;

&lt;p&gt;Fine-tuning also doesn't reliably fix factual recall. Models trained on domain data still hallucinate — fine-tuning is much more reliable at shifting &lt;em&gt;style&lt;/em&gt; and &lt;em&gt;behavior&lt;/em&gt; than at improving &lt;em&gt;factual grounding&lt;/em&gt;. If your goal is "make the model know our data," RAG is the more dependable tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Decision Framework You Can Actually Use
&lt;/h2&gt;

&lt;p&gt;Work through these in order — don't skip ahead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Can a clearer, more structured prompt get you the output you need?&lt;/strong&gt; If yes, stop here. Spend a few hours iterating before considering anything else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is the weakness about missing information, not behavior?&lt;/strong&gt; If yes, build a RAG pipeline over your documents instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is the gap purely style, tone, or format?&lt;/strong&gt; If yes, a detailed system prompt with few-shot examples usually closes it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do you have a large set of high-quality labeled examples and a narrow, stable task?&lt;/strong&gt; If yes, fine-tuning is worth evaluating.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Is the remaining performance gap big enough to justify data annotation and training infrastructure?&lt;/strong&gt; If yes, proceed. If no, stay with prompt engineering plus RAG.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Fine-tuning is rarely step one. It's step four or five, after the cheaper options are exhausted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Copy-Ready Prompts That Do the Work of Fine-Tuning
&lt;/h2&gt;

&lt;p&gt;These patterns get you fine-tuning-like consistency from a base model — no training pipeline required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Few-shot in-context learning&lt;/strong&gt; (replaces task-specific fine-tuning):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are an expert at [specific task].
(Context) Here are examples of the input→output pattern I need:
Input: [example 1 input] → Output: [example 1 output]
Input: [example 2 input] → Output: [example 2 output]
(Task) Now apply the same transformation to: [your input]
(Format) Output only the transformed result, no explanation.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. RAG simulation&lt;/strong&gt; (inject your own knowledge base into a single prompt):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Context) Use only the following information to answer the question.
Do not use any external knowledge. If the answer isn't in the
provided text, say "Not covered in the provided documents."
DOCUMENTS: [paste relevant sections]
(Task) [User question]
(Format) Answer in 2-3 sentences. Cite the document section you used.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Pre-check prompt&lt;/strong&gt; (before you invest in a training pipeline, sanity-check whether you need one):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Task) I am considering fine-tuning a model for the following task:
[describe task]. Before I invest in fine-tuning, evaluate whether a
well-designed prompt could achieve similar results.
(Format) Answer these three questions:
1. What specific behavior does this task require that a prompt cannot specify?
2. Roughly how many labeled examples would fine-tuning need to show real improvement?
3. Is there a simpler approach (system prompt, few-shot, RAG) I should try first?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want the underlying mechanics of why structured prompts outperform vague ones, the &lt;a href="https://my-blog.org/tangents/post/prompt-engineering-explained" rel="noopener noreferrer"&gt;prompt engineering fundamentals&lt;/a&gt; breakdown covers the four-element framework these examples are built on.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is fine-tuning worth it for most people?&lt;/strong&gt;&lt;br&gt;
For most individuals and small teams, no. The data annotation burden and infrastructure cost rarely justify the improvement over a well-designed prompt. It pays off mainly for high-volume, narrow, repetitive tasks with consistent input/output patterns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can prompt engineering replace fine-tuning entirely?&lt;/strong&gt;&lt;br&gt;
For the majority of use cases, yes — especially combined with RAG for knowledge and few-shot examples for behavior. It genuinely can't replace fine-tuning in a narrow set of cases: extremely high-volume deployments where long-prompt inference cost is prohibitive, or very specific output formats the model resists without training.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the practical test for "do I need RAG or fine-tuning"?&lt;/strong&gt;&lt;br&gt;
Ask whether the model is failing because it doesn't know something, or because it isn't behaving the way you want. Missing knowledge → RAG. Wrong behavior → prompt engineering first, fine-tuning only if prompting plateaus.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I actually consider fine-tuning?&lt;/strong&gt;&lt;br&gt;
When you have a narrow, high-volume, stable task, a solid set of high-quality labeled examples, a real inference-cost concern from long prompts, and you've already optimized your prompt and still see a measurable gap. If any of those aren't true, stay with prompting.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/fine-tuning-vs-prompt-engineering" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>What Is an AI Agent? Agentic AI Explained for Developers</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:14:56 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-an-ai-agent-agentic-ai-explained-for-developers-19i9</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-an-ai-agent-agentic-ai-explained-for-developers-19i9</guid>
      <description>&lt;p&gt;"AI agent" gets used for everything from a chatbot with a slightly longer memory to a system that autonomously books flights and updates your calendar. Here's the distinction that actually matters if you're building or evaluating one: an &lt;strong&gt;AI agent&lt;/strong&gt; doesn't just respond to a single prompt — it pursues a goal across multiple steps, using tools and memory to complete work with limited human oversight. The defining property is agency: the system decides what to do next, rather than only answering what it was asked.&lt;/p&gt;

&lt;p&gt;"Agentic AI" describes systems designed for that kind of autonomy. An agent can call external APIs, browse the web, write and execute code, manage files, or chain together multiple LLM calls — without a human approving each individual step along the way.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cognitive Loop: How Agents Actually Work
&lt;/h2&gt;

&lt;p&gt;Most agent implementations run some version of a four-phase loop:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Perceive&lt;/strong&gt; — take in the current context: the task goal, available tools, prior outputs, and any new information from the environment (search results, API responses, file contents).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plan&lt;/strong&gt; — reason about what to do next, often breaking a large goal into sub-tasks. More capable agents explicitly reason step by step before acting, similar to chain-of-thought prompting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Tools&lt;/strong&gt; — call a tool: a web search API, a code interpreter, a database query, a calendar API. The result flows back into the agent's context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Act / Loop&lt;/strong&gt; — take an action (write output, save a file, call another API, update memory), then re-enter perceive-plan-use until the goal is reached or the step/budget limit is hit.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is widely known as the &lt;strong&gt;ReAct pattern&lt;/strong&gt; (Reason + Act), and it's foundational to most agent frameworks in production today. If you've built a tool-calling loop yourself, you've probably implemented something close to this whether or not you called it that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent vs. Chatbot vs. AI Assistant
&lt;/h2&gt;

&lt;p&gt;The terms get used loosely enough that a table is more useful than more prose:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Dimension&lt;/th&gt;
&lt;th&gt;Chatbot&lt;/th&gt;
&lt;th&gt;AI Assistant&lt;/th&gt;
&lt;th&gt;AI Agent&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Interaction model&lt;/td&gt;
&lt;td&gt;Single-turn Q&amp;amp;A&lt;/td&gt;
&lt;td&gt;Multi-turn conversation&lt;/td&gt;
&lt;td&gt;Goal-directed, multi-step, autonomous&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool use&lt;/td&gt;
&lt;td&gt;None or minimal&lt;/td&gt;
&lt;td&gt;Some (search, image generation)&lt;/td&gt;
&lt;td&gt;Central — calls APIs, runs code, manages files&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory&lt;/td&gt;
&lt;td&gt;Usually none&lt;/td&gt;
&lt;td&gt;Short conversation window&lt;/td&gt;
&lt;td&gt;Can use persistent memory or external storage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomy&lt;/td&gt;
&lt;td&gt;Zero&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;td&gt;High — decides its own next action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Human approval per step&lt;/td&gt;
&lt;td&gt;N/A&lt;/td&gt;
&lt;td&gt;Often&lt;/td&gt;
&lt;td&gt;Optional, configurable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical failure mode&lt;/td&gt;
&lt;td&gt;Irrelevant answers&lt;/td&gt;
&lt;td&gt;Hallucination&lt;/td&gt;
&lt;td&gt;Wrong action taken, errors cascade&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Example&lt;/td&gt;
&lt;td&gt;Basic FAQ bot&lt;/td&gt;
&lt;td&gt;A conversational assistant&lt;/td&gt;
&lt;td&gt;A system that books your flights and updates your calendar&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  What This Looks Like in Practice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Research agents&lt;/strong&gt; — given a question, search the web, read sources, extract findings, and produce a structured report with minimal steering between steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Code agents&lt;/strong&gt; — write code, run it, read the error output, revise, and repeat until tests pass.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data pipeline agents&lt;/strong&gt; — chain a task like "pull last month's sales data, calculate churn by segment, email a summary" across database queries, calculations, and an email API.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer support agents&lt;/strong&gt; — look up an account, identify the issue, apply a fix through an API (like issuing a refund), and send a confirmation, without a human approving each step.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personal productivity agents&lt;/strong&gt; — read your inbox, parse meeting requests, check your calendar, propose times, and draft the response.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Directing an Agent: A Reusable Prompt Pattern
&lt;/h2&gt;

&lt;p&gt;When you're the one instructing an agent — through Claude Projects, a custom GPT with actions, or your own framework — a directive with these four elements consistently produces better runs than a one-line instruction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(Role) You are a [specific role — e.g. "release notes agent"].

(Context) Goal: [end state]. Constraints: [budget, scope, tone].
Available resources: [tools/APIs/files it can use].

(Task) Produce: [the concrete deliverable, not just a first step].

(Format) Report back as: [structure]. Flag me before: [irreversible actions].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That last line matters more than it looks. Any task where a wrong action is costly — spending money, sending an email, deleting data — should have an explicit human-in-the-loop checkpoint configured before you let the agent run unattended.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Limits
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Errors cascade.&lt;/strong&gt; If an early step produces a wrong output and the agent doesn't catch it, later steps build on the mistake.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-horizon tasks are still unreliable.&lt;/strong&gt; Agents do best on well-defined, bounded tasks. Open-ended goals over many steps tend to drift or stall out.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool use is attack surface.&lt;/strong&gt; An agent that can write files, call APIs, and execute code can do real damage if prompted maliciously or misconfigured — treat tool permissions the way you'd treat any other credential scope.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory is still primitive.&lt;/strong&gt; Most agents have limited, inconsistent recall of past sessions. Durable memory across tasks isn't standard yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost and latency add up.&lt;/strong&gt; Agentic tasks run many LLM and tool calls in sequence. Something that looks simple to a human can burn through dozens of calls and take minutes to finish — budget accordingly if you're billing by token or API call.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Under the hood, a lot of what makes agent tool-calling interoperable across frameworks is &lt;a href="https://my-blog.org/tangents/post/what-is-mcp-model-context-protocol" rel="noopener noreferrer"&gt;MCP&lt;/a&gt; standardizing how the agent discovers and calls a given tool, and how much of the surrounding &lt;a href="https://my-blog.org/tangents/post/what-is-a-context-window" rel="noopener noreferrer"&gt;context window&lt;/a&gt; that tool call ends up consuming.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between an AI agent and a chatbot?&lt;/strong&gt;&lt;br&gt;
A chatbot answers within a single turn or conversation. An agent pursues a goal across multiple steps, deciding on its own what to do next and calling tools to get there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does "agentic AI" mean?&lt;/strong&gt;&lt;br&gt;
Systems designed to act with autonomy — planning, using tools, and taking actions toward a goal with limited step-by-step human approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do AI agents use tools?&lt;/strong&gt;&lt;br&gt;
They call external functions (APIs, code execution, database queries) mid-task, and the tool's output feeds back into the agent's context for the next decision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are AI agents safe to use?&lt;/strong&gt;&lt;br&gt;
It depends on the task and the guardrails. Bounded, reversible tasks are lower-risk. Anything irreversible — payments, deletions, external communications — should have a human checkpoint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the ReAct pattern in AI agents?&lt;/strong&gt;&lt;br&gt;
Reason + Act: the agent explicitly reasons about what to do, takes an action, observes the result, and loops until the goal is met or it runs out of budget.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/what-is-an-ai-agent" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agentic</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is a Context Window? Token Limits Explained for Developers</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:14:20 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-a-context-window-token-limits-explained-for-developers-4gmg</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-a-context-window-token-limits-explained-for-developers-4gmg</guid>
      <description>&lt;p&gt;If you've ever had a long ChatGPT or Claude session where the model suddenly "forgets" something you told it ten minutes ago, you've hit the context window. It's not a bug and it's not the model getting confused — it's a hard architectural limit, and understanding it changes how you prompt.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Concept
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;context window&lt;/strong&gt; is the total amount of text — measured in tokens, not words or characters — that a model can process in a single inference call. Anything outside that window is invisible to the model. It doesn't get "forgotten" the way a person forgets; it simply was never in front of the model for that call. Both your input (the prompt plus the entire conversation history) and the model's output count against the same limit.&lt;/p&gt;

&lt;p&gt;Tokens and words aren't 1:1. A rough rule of thumb: one token is about three-quarters of an English word, so 1,000 tokens is roughly 750 words, or about a page and a half of prose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why AI "Forgets" in Long Conversations
&lt;/h2&gt;

&lt;p&gt;When a conversation grows past the window size, older messages get dropped — typically from the beginning. The model isn't experiencing amnesia. It literally never receives those tokens on that particular call. If it seems to contradict something you said earlier in a long session, that's usually window pressure pushing your earlier instruction out of view, not the model changing its mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context Window Sizes You'll Actually Work With
&lt;/h2&gt;

&lt;p&gt;Sizes vary a lot by model, and they've grown fast — from GPT-3's 2,048 tokens in 2020 to windows over 1,000,000 tokens within a few years, according to model providers' own documentation.&lt;/p&gt;

&lt;p&gt;The table below is a &lt;strong&gt;historical snapshot of the 2024 generation&lt;/strong&gt;, not a current spec sheet. It's here to show the shape of the range, because that shape is what changes how you design. Do not build against these numbers — look up your model's current figure.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model (2024 generation)&lt;/th&gt;
&lt;th&gt;Context window as published then&lt;/th&gt;
&lt;th&gt;Roughly&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;GPT-3.5 Turbo&lt;/td&gt;
&lt;td&gt;16,385 tokens&lt;/td&gt;
&lt;td&gt;~12,000 words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GPT-4o&lt;/td&gt;
&lt;td&gt;128,000 tokens&lt;/td&gt;
&lt;td&gt;~96,000 words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Claude 3.5 Sonnet / Claude 3 Opus&lt;/td&gt;
&lt;td&gt;200,000 tokens&lt;/td&gt;
&lt;td&gt;~150,000 words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama 3.1 405B&lt;/td&gt;
&lt;td&gt;128,000 tokens&lt;/td&gt;
&lt;td&gt;~96,000 words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Mistral Large 2&lt;/td&gt;
&lt;td&gt;128,000 tokens&lt;/td&gt;
&lt;td&gt;~96,000 words&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gemini 1.5 Pro / Flash&lt;/td&gt;
&lt;td&gt;1,000,000 tokens&lt;/td&gt;
&lt;td&gt;~750,000 words&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Two orders of magnitude separate the low end from the high end, and that gap has kept widening since. Every provider publishes the current number in its model reference page — that page, not a blog post, is your source of truth. Anything written down here has a shelf life measured in months.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where This Bites You in Practice
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Paste a long PDF and ask questions&lt;/strong&gt; → if the document plus your questions exceed the window, earlier parts silently get dropped from what the model actually sees.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long coding sessions&lt;/strong&gt; → the model "forgets" function signatures or conventions you established early on.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-session research&lt;/strong&gt; → you have to re-supply context in each new session; nothing persists across separate conversations by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mid-conversation contradictions&lt;/strong&gt; → almost always window pressure, not the model changing its stance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Workarounds That Actually Help
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Summarize and restart&lt;/strong&gt; — paste a compact running summary at the top of a new conversation instead of the full history.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chunk the task&lt;/strong&gt; — break a large job into sequential, focused sub-tasks (prompt chaining) rather than one giant request.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retrieval-Augmented Generation&lt;/strong&gt; — instead of stuffing everything into context, an external index retrieves only the relevant passages per query. See &lt;a href="https://my-blog.org/tangents/post/what-is-rag-retrieval-augmented-generation" rel="noopener noreferrer"&gt;our RAG explainer&lt;/a&gt; if you haven't used this pattern yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;System prompt anchoring&lt;/strong&gt; — put your most critical, non-negotiable instructions in the system prompt. Most tool implementations prioritize it and are slower to drop it under pressure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explicit recall prompts&lt;/strong&gt; — when you sense drift, say something like the template below to force the model to re-register key facts before continuing:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Here's what we've established so far:
&lt;span class="p"&gt;-&lt;/span&gt; [fact 1]
&lt;span class="p"&gt;-&lt;/span&gt; [fact 2]
&lt;span class="p"&gt;-&lt;/span&gt; [constraint or decision you don't want dropped]

Continue from here with: [next instruction]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That template alone fixes most "the model forgot my instruction" complaints in long sessions — it's cheaper than restarting the conversation and more reliable than hoping the model re-derives the constraint on its own.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is a context window in AI?&lt;/strong&gt;&lt;br&gt;
The total amount of text, measured in tokens, that a model can process — as input and output combined — in one inference call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why does ChatGPT forget things in long conversations?&lt;/strong&gt;&lt;br&gt;
It's not forgetting in the human sense. Once the conversation exceeds the context window, older messages fall outside what the model receives on that call.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How many tokens can a model handle?&lt;/strong&gt;&lt;br&gt;
It depends entirely on the model — anywhere from roughly 16K tokens on older models to over 1,000,000 tokens on the largest current windows. Check your provider's docs for the exact figure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What happens when you exceed the context window?&lt;/strong&gt;&lt;br&gt;
Behavior varies by implementation, but typically the oldest messages are dropped or truncated to make room for new input, and the model simply never sees the dropped portion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between a token and a word?&lt;/strong&gt;&lt;br&gt;
A token is a chunk of text a model processes as one unit — often a word, but sometimes a word fragment or punctuation. In English, one token is roughly three-quarters of a word on average.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I work around a small context window?&lt;/strong&gt;&lt;br&gt;
Summarize periodically, chunk large tasks into smaller sequential prompts, use retrieval instead of stuffing everything into the prompt, and anchor critical instructions in the system prompt.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/what-is-a-context-window" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>beginners</category>
    </item>
    <item>
      <title>What Is RAG (Retrieval-Augmented Generation)? Explained for Developers</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:13:43 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-rag-retrieval-augmented-generation-explained-for-developers-4ck5</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-rag-retrieval-augmented-generation-explained-for-developers-4ck5</guid>
      <description>&lt;p&gt;Ask an LLM about something that happened after its training cutoff, or about a fact buried deep in your company's internal docs, and you'll get one of two things: a confident "I don't have information on that," or worse, a confident answer that's just wrong. That second failure mode — a fluent, plausible-sounding, incorrect answer — is what people mean by hallucination. It happens because the model is generating the next token based on statistical patterns learned during training, not looking anything up.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieval-Augmented Generation (RAG)&lt;/strong&gt; is the standard fix. In one sentence: RAG gives a model access to an external knowledge source at the moment it answers your question, so the response is grounded in real, current documents instead of only what the model memorized during training.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem, Concretely
&lt;/h2&gt;

&lt;p&gt;Two separate failure modes push teams toward RAG:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Staleness&lt;/strong&gt; — the model was trained on a snapshot of data with a cutoff date. Anything after that date simply isn't in its weights.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hallucination&lt;/strong&gt; — even for facts that were in the training data, the model can misremember, blend it with unrelated information, or state something false with total confidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For casual use, that's an annoyance. For legal research, medical Q&amp;amp;A, or an internal support bot answering questions off your company's actual documentation, ungrounded answers are a liability, not a quirk.&lt;/p&gt;

&lt;h2&gt;
  
  
  How RAG Actually Works: Retrieve, Augment, Generate
&lt;/h2&gt;

&lt;p&gt;RAG runs in three phases on every query:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Retrieve&lt;/strong&gt; — a search component (usually vector similarity search, sometimes BM25 keyword search, often both) queries an external corpus — documents, wikis, a database, the web — and pulls back the chunks most relevant to the question.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Augment&lt;/strong&gt; — those retrieved chunks get inserted into the prompt alongside the user's question, forming an extended context the model can actually read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generate&lt;/strong&gt; — the model writes its answer with explicit reference to the retrieved text, instead of relying solely on its trained-in weights.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A minimal RAG loop looks roughly like this in pseudocode:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;answer_with_rag&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;corpus_index&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;query_embedding&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;embed&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;top_chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;corpus_index&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_embedding&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;5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;top_chunks&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&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;Answer the question using only the context below.
    If the answer isn&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;t in the context, say so.

    Context:
    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

    Question: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;question&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;return&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;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That &lt;code&gt;k=5&lt;/code&gt; (how many chunks you retrieve) and the instruction to admit when the answer isn't in the context are both places where RAG systems commonly go wrong — retrieve too few chunks and you miss the answer, retrieve too many and you crowd out the &lt;a href="https://my-blog.org/tangents/post/what-is-a-context-window" rel="noopener noreferrer"&gt;context window&lt;/a&gt; with noise.&lt;/p&gt;

&lt;h2&gt;
  
  
  RAG vs. Fine-Tuning — Don't Confuse These
&lt;/h2&gt;

&lt;p&gt;This is the mix-up that trips people up most:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Fine-tuning&lt;/th&gt;
&lt;th&gt;RAG&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;What it changes&lt;/td&gt;
&lt;td&gt;The model's weights, via additional training&lt;/td&gt;
&lt;td&gt;Nothing in the model — knowledge is supplied at inference time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best for&lt;/td&gt;
&lt;td&gt;Adjusting style, tone, format, task behavior&lt;/td&gt;
&lt;td&gt;Currency and specificity of factual content&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Update cycle&lt;/td&gt;
&lt;td&gt;Retrain to update knowledge&lt;/td&gt;
&lt;td&gt;Update the corpus, no retraining needed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Typical cost pattern&lt;/td&gt;
&lt;td&gt;Upfront training cost&lt;/td&gt;
&lt;td&gt;Ongoing retrieval/indexing infrastructure&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;They're not competing techniques — plenty of production systems fine-tune a model for behavior &lt;em&gt;and&lt;/em&gt; use RAG for facts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where RAG Falls Short
&lt;/h2&gt;

&lt;p&gt;RAG is not a hallucination-proof switch you flip on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's only as good as the retrieval step. Irrelevant chunks in, off-base answer out.&lt;/li&gt;
&lt;li&gt;Long retrieved context eats into the context window, leaving less room for instructions or follow-up turns.&lt;/li&gt;
&lt;li&gt;The model can still ignore the retrieved text or blend it incorrectly with its own priors — RAG reduces hallucination, it doesn't eliminate it.&lt;/li&gt;
&lt;li&gt;If the answer genuinely isn't anywhere in the corpus, the model still has nothing grounded to point to.&lt;/li&gt;
&lt;li&gt;Someone has to build and maintain the index. That's real engineering work, not a one-time setup.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Where You've Already Used RAG
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Perplexity AI — web search plus LLM synthesis over the results.&lt;/li&gt;
&lt;li&gt;ChatGPT with web search enabled.&lt;/li&gt;
&lt;li&gt;Microsoft Copilot pulling from your organization's documents.&lt;/li&gt;
&lt;li&gt;Most enterprise chatbots built on internal knowledge bases.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;RAG was formalized in the 2020 NeurIPS paper "Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks" (Lewis et al., Meta AI Research) — worth a read if you want the original framing straight from the source.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What does RAG stand for in AI?&lt;/strong&gt;&lt;br&gt;
Retrieval-Augmented Generation — retrieving relevant documents, then using them to generate a grounded answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does RAG eliminate AI hallucinations?&lt;/strong&gt;&lt;br&gt;
No. It reduces the odds by grounding answers in real text, but the model can still misread or ignore what it retrieved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between RAG and fine-tuning?&lt;/strong&gt;&lt;br&gt;
Fine-tuning changes the model's weights through extra training. RAG leaves the model untouched and supplies knowledge through the prompt at answer time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does RAG keep AI answers current?&lt;/strong&gt;&lt;br&gt;
Update the corpus it retrieves from — no retraining required, unlike fine-tuning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is vector search and why does RAG use it?&lt;/strong&gt;&lt;br&gt;
It's a similarity search over embeddings (numeric representations of meaning) rather than exact keyword matches, so retrieval can find semantically relevant chunks even when the wording doesn't match. Most RAG systems use it, sometimes alongside keyword search like BM25.&lt;/p&gt;

&lt;p&gt;If you're building anything that needs an AI system to answer questions about your own &lt;a href="https://my-blog.org/tangents/post/what-is-an-ai-agent" rel="noopener noreferrer"&gt;ai agent&lt;/a&gt; workflows or a private knowledge base, RAG is the piece that connects "what the model knows" to "what's actually true right now."&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/what-is-rag-retrieval-augmented-generation" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>What Is MCP (Model Context Protocol)? A Developer's Explainer</title>
      <dc:creator>Sungwoo Lee</dc:creator>
      <pubDate>Mon, 17 Aug 2026 17:13:06 +0000</pubDate>
      <link>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-mcp-model-context-protocol-a-developers-explainer-h7j</link>
      <guid>https://dev.to/sungwoo_lee_e0f26be4a29fd/what-is-mcp-model-context-protocol-a-developers-explainer-h7j</guid>
      <description>&lt;p&gt;If you've built more than one AI-powered feature, you already know the pain MCP is trying to fix: every model, every tool, every data source needs its own glue code. Connect an LLM to a calendar API, and you write a connector. Swap the model provider, and you rewrite it. Add a second data source, and you write another one. Multiply that by every tool your app touches and you get a combinatorial mess of one-off integrations.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; is Anthropic's answer to that mess — an open standard, released in November 2024, that defines a consistent way for AI models to talk to external tools, data sources, and services. It's open-source, hosted at &lt;code&gt;github.com/modelcontextprotocol&lt;/code&gt;, and it's not locked to Anthropic's own models. Any developer or platform can implement it, on either side.&lt;/p&gt;

&lt;p&gt;The mental model people reach for is USB-C: one standard port, many compatible devices. Write an MCP server once, and any MCP-compatible client can use it without custom glue code.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Four Pieces: Host, Client, Server, Tools
&lt;/h2&gt;

&lt;p&gt;MCP splits responsibility into four roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Host&lt;/strong&gt; — the application the user actually interacts with. Claude Desktop is a host. Cursor is a host. The host manages the session and coordinates everything else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Client&lt;/strong&gt; — a component inside the host that speaks MCP. A single host can run multiple clients, each wired to a different server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Server&lt;/strong&gt; — a lightweight program exposing specific tools or data. A "Google Calendar MCP server" gives the client the ability to read and create events. A "filesystem MCP server" lets it read and write local files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt; — the actual capabilities a server exposes. A calendar server might expose &lt;code&gt;list_events&lt;/code&gt;, &lt;code&gt;create_event&lt;/code&gt;, and &lt;code&gt;delete_event&lt;/code&gt; as callable tools.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The request flow looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User message → Host
Host's Client asks the model what to do
Model decides to call a Tool
Client sends the request to the Server
Server executes it and returns a result
Model incorporates the result into its response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Communication happens over JSON-RPC, either via stdio (for local servers) or HTTP/SSE (for remote ones). Configuring a server in a host typically looks something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"filesystem"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/project"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The model sees the tools that server exposes as part of its available toolset and decides, mid-conversation, whether and when to call them.&lt;/p&gt;

&lt;h2&gt;
  
  
  MCP vs. the Old Way
&lt;/h2&gt;

&lt;p&gt;Before MCP, integration work looked like this:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Before MCP&lt;/th&gt;
&lt;th&gt;With MCP&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Per-tool integration&lt;/td&gt;
&lt;td&gt;Custom plugin/API code for each AI + tool pair&lt;/td&gt;
&lt;td&gt;Write one MCP server, any MCP host can use it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Switching AI providers&lt;/td&gt;
&lt;td&gt;Rewrite integrations&lt;/td&gt;
&lt;td&gt;Connections keep working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protocol&lt;/td&gt;
&lt;td&gt;Proprietary (e.g. OpenAI's deprecated plugin schema)&lt;/td&gt;
&lt;td&gt;Standardized JSON-RPC&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Small teams&lt;/td&gt;
&lt;td&gt;Can't afford to support every AI platform&lt;/td&gt;
&lt;td&gt;Ship one server, reach every compatible client&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Custom GPTs are a related but different idea — they're contained inside the ChatGPT ecosystem and use a proprietary action schema. MCP is explicitly model-agnostic and cross-provider by design.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters Beyond the Demo
&lt;/h2&gt;

&lt;p&gt;For non-developers, MCP mostly works invisibly, but it's the plumbing behind an AI assistant that can read your actual email thread and draft a reply, check your real calendar and suggest a time that works, or query a live database instead of you copy-pasting rows into a chat window.&lt;/p&gt;

&lt;p&gt;For developers, the more interesting case is coding tools. Editors like Cursor use MCP servers to give the model access to documentation, package registries, and test runners — without you manually pasting context into every prompt. That's part of a broader shift away from manual &lt;a href="https://my-blog.org/tangents/post/what-is-a-context-window" rel="noopener noreferrer"&gt;context-stuffing in prompts&lt;/a&gt; and toward models that pull what they need on demand. It also overlaps with how &lt;a href="https://my-blog.org/tangents/post/what-is-an-ai-agent" rel="noopener noreferrer"&gt;AI agents&lt;/a&gt; use tools mid-task — MCP is effectively the standardized tool-calling layer a lot of agent frameworks are converging on.&lt;/p&gt;

&lt;p&gt;If you're deciding whether to build a plain API integration or an MCP server for a new tool, a rough rule of thumb: if only one AI product will ever call it, a direct API call is simpler. If you want any MCP-compatible client — present or future — to use it without you writing new glue code, build the MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is MCP made by OpenAI?&lt;/strong&gt;&lt;br&gt;
No. MCP was created by Anthropic and released as an open standard in November 2024. It's model-agnostic and not tied to any single AI company.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need to install anything to use MCP?&lt;/strong&gt;&lt;br&gt;
As an end user, no — if your app (like Claude Desktop) supports MCP, you connect servers through its settings. Developers need to run or build an MCP server.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the difference between MCP and a regular API?&lt;/strong&gt;&lt;br&gt;
A traditional API is a direct integration written between two specific systems. MCP is a protocol that standardizes how AI models discover and call tools, cutting down on custom integration code per pairing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does MCP replace Custom GPTs?&lt;/strong&gt;&lt;br&gt;
No, they solve different problems. Custom GPTs are a no-code way to configure a ChatGPT assistant inside OpenAI's ecosystem. MCP is an open integration standard meant to work across AI providers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is MCP secure?&lt;/strong&gt;&lt;br&gt;
MCP servers run locally or on infrastructure you control, and the protocol specifies how permissions and tool schemas work — but actual security depends on the implementation. Running a server from an untrusted source carries the same risk as running any other third-party software.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://my-blog.org/tangents/post/what-is-mcp-model-context-protocol" rel="noopener noreferrer"&gt;my-blog.org&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>programming</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
