1"use strict";(self.webpackChunkinnovation_labs=self.webpackChunkinnovation_labs||[]).push([[1307],{38980:(n,e,s)=>{s.r(e),s.d(e,{assets:()=>r,contentTitle:()=>o,default:()=>p,frontMatter:()=>l,metadata:()=>i,toc:()=>c});const i=JSON.parse('{"id":"concepts-ai-agents/understanding-agentic-systems","title":"Understanding Agentic Systems","description":"Common Misconceptions","source":"@site/versioned_docs/version-1.0.4/concepts-ai-agents/understanding-agentic-systems.mdx","sourceDirName":"concepts-ai-agents","slug":"/concepts-ai-agents/understanding-agentic-systems","permalink":"/resources/docs/1.0.4/concepts-ai-agents/understanding-agentic-systems","draft":false,"unlisted":false,"tags":[],"version":"1.0.4","frontMatter":{"id":"understanding-agentic-systems","title":"Understanding Agentic Systems"}}');var t=s(74848),a=s(28453);const l={id:"understanding-agentic-systems",title:"Understanding Agentic Systems"},o=void 0,r={},c=[{value:"Common Misconceptions",id:"common-misconceptions",level:3},{value:"Misconception 1: "My application uses multiple LLM calls, so it's an agent"",id:"misconception-1-my-application-uses-multiple-llm-calls-so-its-an-agent",level:4},{value:"Misconception 2: "I'm using tools and APIs, so it's an agent"",id:"misconception-2-im-using-tools-and-apis-so-its-an-agent",level:4},{value:"Misconception 3: "Having memory makes it an agent"",id:"misconception-3-having-memory-makes-it-an-agent",level:4},{value:"Misconception 4: "Using planning means its an agent"",id:"misconception-4-using-planning-means-its-an-agent",level:4},{value:"Misconception 4: "Complex prompt engineering makes it an agent"",id:"misconception-4-complex-prompt-engineering-makes-it-an-agent",level:4},{value:"Misconception 5: "Having a feedback loop makes it an agent"",id:"misconception-5-having-a-feedback-loop-makes-it-an-agent",level:4},{value:"Misconception 6: "The LLM performs the actions in an agent"",id:"misconception-6-the-llm-performs-the-actions-in-an-agent",level:4},{value:"Key Points About LLM's Role",id:"key-points-about-llms-role",level:3},{value:"Misconception 7:"My AI Assistant/AI chatbot is an AI Agent"",id:"misconception-7my-ai-assistantai-chatbot--is-an-ai-agent",level:4},{value:"Key Differences:",id:"key-differences",level:3},{value:"Example Task Comparison:",id:"example-task-comparison",level:3}];function d(n){const e={code:"code",h3:"h3",h4:"h4",li:"li",ol:"ol",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,a.R)(),...n.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(e.h3,{id:"common-misconceptions",children:"Common Misconceptions"}),"\n",(0,t.jsx)(e.p,{children:'The term "agent" in AI is overused and often applied inconsistently, diminishing its meaning and creating confusion about the actual capabilities of AI systems. Some of the common misconceptions are explained below:'}),"\n",(0,t.jsx)(e.h4,{id:"misconception-1-my-application-uses-multiple-llm-calls-so-its-an-agent",children:'Misconception 1: "My application uses multiple LLM calls, so it\'s an agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:'# This is NOT an agent - it\'s a multi-step LLM application\ndef process_document(doc):\n summary = llm.generate_summary(doc)\n keywords = llm.extract_keywords(summary)\n sentiment = llm.analyze_sentiment(summary)\n return {\n "summary": summary,\n "keywords": keywords,\n "sentiment": sentiment\n }\n'})}),"\n",(0,t.jsx)(e.h4,{id:"misconception-2-im-using-tools-and-apis-so-its-an-agent",children:"Misconception 2: \"I'm using tools and APIs, so it's an agent\""}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:'# This is NOT an agent - it\'s an automated workflow\ndef analyze_stock(symbol):\n price_data = stock_api.get_price(symbol)\n news = news_api.get_recent_news(symbol)\n analysis = llm.analyze(f"Price: {price_data}, News: {news}")\n return analysis\n'})}),"\n",(0,t.jsx)(e.h4,{id:"misconception-3-having-memory-makes-it-an-agent",children:'Misconception 3: "Having memory makes it an agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"# This is NOT an agent - just stateful LLM interaction\nclass ChatSystem:\n def __init__(self):\n self.conversation_history = []\n \n def respond(self, user_input):\n self.conversation_history.append(user_input)\n response = llm.generate(context=self.conversation_history)\n self.conversation_history.append(response)\n return response\n"})}),"\n",(0,t.jsx)(e.h4,{id:"misconception-4-using-planning-means-its-an-agent",children:'Misconception 4: "Using planning means its an agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"# This is NOT an agent - it's structured task decomposition\ndef handle_task(task):\n # Fixed planning template\n steps = llm.break_down_task(task)\n results = []\n for step in steps:\n result = execute_step(step)\n results.append(result)\n return combine_results(results)\n"})}),"\n",(0,t.jsx)(e.h4,{id:"misconception-4-complex-prompt-engineering-makes-it-an-agent",children:'Misconception 4: "Complex prompt engineering makes it an agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:'# This is NOT an agent - just sophisticated prompting\ndef analyze_with_cot(query):\n prompt = f"""\n Step 1: Understand the query\n {query}\n Step 2: Break down the components\n Step 3: Analyze each component\n Step 4: Synthesize findings\n """\n return llm.generate(prompt)\n'})}),"\n",(0,t.jsx)(e.h4,{id:"misconception-5-having-a-feedback-loop-makes-it-an-agent",children:'Misconception 5: "Having a feedback loop makes it an agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"# This is NOT an agent - just iterative refinement\ndef iterative_response(query, max_iterations=3):\n response = initial_response(query)\n for _ in range(max_iterations):\n quality = evaluate_response(response)\n if quality > threshold:\n break\n response = improve_response(response)\n return response\n"})}),"\n",(0,t.jsx)(e.h4,{id:"misconception-6-the-llm-performs-the-actions-in-an-agent",children:'Misconception 6: "The LLM performs the actions in an agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"# Common MISCONCEPTION: People think this actually performs actions\ndef incorrect_understanding():\n llm_response = llm.generate(\"Please save this file to disk\")\n # The LLM can't actually save files!\n \n# REALITY: Tools perform actions, LLM orchestrates\nclass PropertyAgent:\n def __init__(self):\n self.tools = {\n 'database': DatabaseTool(),\n 'email': EmailTool(),\n 'calendar': CalendarTool()\n }\n \n def handle_request(self, query):\n # LLM determines what needs to be done\n action_plan = llm.plan_actions(query)\n \n # TOOLS actually perform the actions\n for action in action_plan:\n if action.type == \"schedule_viewing\":\n # Calendar tool performs the actual scheduling\n self.tools['calendar'].create_appointment(action.details)\n elif action.type == \"send_confirmation\":\n # Email tool performs the actual sending\n self.tools['email'].send_message(action.details)\n"})}),"\n",(0,t.jsx)(e.h3,{id:"key-points-about-llms-role",children:"Key Points About LLM's Role"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.strong,{children:"LLM's Actual Functions:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Planning and strategizing actions"}),"\n",(0,t.jsx)(e.li,{children:"Reasoning about which tools to use"}),"\n",(0,t.jsx)(e.li,{children:"Interpreting results from tools"}),"\n",(0,t.jsx)(e.li,{children:"Generating natural language responses"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:[(0,t.jsx)(e.strong,{children:"Tools' Actual Functions:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"File operations"}),"\n",(0,t.jsx)(e.li,{children:"Database queries"}),"\n",(0,t.jsx)(e.li,{children:"API calls"}),"\n",(0,t.jsx)(e.li,{children:"Network requests"}),"\n",(0,t.jsx)(e.li,{children:"System modifications"}),"\n",(0,t.jsx)(e.li,{children:"Real-world interactions"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"# Clear separation of responsibilities\nclass AgentSystem:\n def process_task(self, task):\n # LLM PLANS the action\n plan = self.llm.create_execution_plan(task)\n \n # TOOLS EXECUTE the action\n for step in plan:\n if step.requires_web_access:\n result = self.web_tool.fetch_data(step.url)\n elif step.requires_database:\n result = self.db_tool.query(step.sql)\n elif step.requires_file_operation:\n result = self.file_tool.process(step.path)\n \n # LLM INTERPRETS results and plans next steps\n next_actions = self.llm.analyze_results(result)\n"})}),"\n",(0,t.jsx)(e.p,{children:"This misconception is particularly important because it helps explain:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Why tool integration is crucial for practical agent systems"}),"\n",(0,t.jsx)(e.li,{children:"Why agents need careful permission and capability management"}),"\n",(0,t.jsx)(e.li,{children:"The importance of proper tool abstraction and safety measures"}),"\n",(0,t.jsx)(e.li,{children:"Why LLM responses alone can't perform real-world actions"}),"\n"]}),"\n",(0,t.jsx)("div",{style:{textAlign:"center"},children:(0,t.jsx)("img",{src:"/resources/img/id-images/llm-vs-tools-light.png",alt:"comparison",style:{width:"100%",maxWidth:"900px"}})}),"\n",(0,t.jsx)(e.p,{children:"This diagram illustrate several key points:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Separation of Responsibilities"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"LLM handles planning, reasoning, and decision-making"}),"\n",(0,t.jsx)(e.li,{children:"Tools perform actual real-world actions"}),"\n",(0,t.jsx)(e.li,{children:"Clear boundaries between thinking and doing"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Flow of Control"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"User requests flow through the LLM first"}),"\n",(0,t.jsx)(e.li,{children:"LLM determines which tools to use"}),"\n",(0,t.jsx)(e.li,{children:"Tools execute actions and return results"}),"\n",(0,t.jsx)(e.li,{children:"LLM interprets results and plans next steps"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Real World Impact"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Only tools can affect the external world"}),"\n",(0,t.jsx)(e.li,{children:"LLM provides intelligence but not execution"}),"\n",(0,t.jsx)(e.li,{children:"Actions are constrained by available tools"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.p,{children:"This helps explain why:"}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Tool integration is crucial for practical agent systems"}),"\n",(0,t.jsx)(e.li,{children:"Security and permissions must be implemented at the tool level"}),"\n",(0,t.jsx)(e.li,{children:"LLM capabilities alone don't enable real-world actions"}),"\n",(0,t.jsx)(e.li,{children:"System design must carefully consider tool access and limitations"}),"\n"]}),"\n",(0,t.jsx)(e.h4,{id:"misconception-7my-ai-assistantai-chatbot--is-an-ai-agent",children:'Misconception 7:"My AI Assistant/AI chatbot is an AI Agent"'}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:"# This is NOT an agent - it's an AI Assistant\
1nclass BasicAIAssistant:\n def chat(self, user_input):\n response = llm.generate_response(user_input)\n return response\n\n# This is CLOSER to an agent\nclass AIAgent:\n def __init__(self):\n self.tools = load_available_tools()\n self.memory = AgentMemory()\n self.planner = ActionPlanner()\n \n def handle_task(self, task):\n # Autonomous decision making\n goal = self.planner.define_goal(task)\n plan = self.planner.create_plan(goal)\n \n # Dynamic tool selection and execution\n while not goal.is_achieved():\n next_action = self.planner.next_action(plan)\n tool = self.select_tool(next_action)\n result = tool.execute(next_action.parameters)\n \n # Adaptive behavior\n if not result.is_successful():\n plan = self.planner.revise_plan(result)\n \n self.memory.update(result)\n"})}),"\n",(0,t.jsx)(e.p,{children:"However, sometimes as we discussed in chapter 1, AI assistants could have certain level of Agentic behavior depending on how they are implemented."}),"\n",(0,t.jsx)(e.h3,{id:"key-differences",children:"Key Differences:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Autonomy Level"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Responds to direct commands and questions"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Makes autonomous decisions about how to achieve goals"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Tool Usage"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: May have access to tools but uses them as instructed"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Autonomously decides which tools to use and when"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Goal Orientation"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Focuses on responding to immediate requests"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Maintains and works toward longer-term goals"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Memory Usage"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: May maintain conversation history"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Uses memory strategically for goal achievement"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Decision Making"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Makes limited decisions within conversation scope"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Makes complex decisions about actions, strategy, and resource use"}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(e.h3,{id:"example-task-comparison",children:"Example Task Comparison:"}),"\n",(0,t.jsx)(e.pre,{children:(0,t.jsx)(e.code,{className:"language-python",children:'# Research Task Example\n\n# AI Assistant Approach:\nasync def assistant_research(query):\n """Responds to direct questions with available information"""\n response = await llm.generate(\n f"Please research about {query}"\n )\n return response\n\n# AI Agent Approach:\nasync def agent_research(query):\n """Autonomously conducts comprehensive research"""\n plan = await self.create_research_plan(query)\n sources = []\n \n for step in plan:\n if step.type == "web_search":\n results = await self.tools.search(step.query)\n sources.extend(results)\n elif step.type == "verify_information":\n verified_data = await self.tools.fact_check(results)\n elif step.type == "synthesize":\n synthesis = await self.tools.analyze(verified_data)\n \n # Adaptive planning\n if self.evaluate_progress() < self.quality_threshold:\n plan = await self.revise_research_plan()\n \n return self.compile_research(sources, synthesis)\n'})}),"\n",(0,t.jsx)(e.p,{children:"This misconception is particularly important because:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsx)(e.li,{children:"It affects system design expectations"}),"\n",(0,t.jsx)(e.li,{children:"It influences how we evaluate AI system capabilities"}),"\n",(0,t.jsx)(e.li,{children:"It impacts how we implement security and permissions"}),"\n",(0,t.jsx)(e.li,{children:"It shapes user expectations and interaction patterns"}),"\n"]}),"\n",(0,t.jsx)("div",{style:{textAlign:"center"},children:(0,t.jsx)("img",{src:"/resources/img/id-images/agent-assistant-light.png",alt:"comparison",style:{width:"100%",maxWidth:"900px"}})}),"\n",(0,t.jsx)(e.p,{children:"These diagrams highlight the key differences between AI Assistants and AI Agents:"}),"\n",(0,t.jsxs)(e.ol,{children:["\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Architecture Complexity"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Simple, linear flow with reactive tool usage"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Complex system with multiple interacting components"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Processing Flow"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Direct input \u2192 response pattern"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Multi-step process with planning and feedback loops"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Tool Integration"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Passive, explicitly requested tool usage"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Active, autonomous tool selection and execution"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Memory Usage"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Basic conversation tracking"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Sophisticated memory system for context and learning"}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(e.li,{children:["\n",(0,t.jsx)(e.p,{children:(0,t.jsx)(e.strong,{children:"Decision Making"})}),"\n",(0,t.jsxs)(e.ul,{children:["\n",(0,t.jsx)(e.li,{children:"Assistant: Reactive decisions based on immediate input"}),"\n",(0,t.jsx)(e.li,{children:"Agent: Proactive decisions based on goals and strategy"}),"\n"]}),"\n"]}),"\n"]})]})}function p(n={}){const{wrapper:e}={...(0,a.R)(),...n.components};return e?(0,t.jsx)(e,{...n,children:(0,t.jsx)(d,{...n})}):d(n)}},28453:(n,e,s)=>{s.d(e,{R:()=>l,x:()=>o});var i=s(96540);const t={},a=i.createContext(t);function l(n){const e=i.useContext(a);return i.useMemo((function(){return"function"==typeof n?n(e):{...e,...n}}),[e,n])}function o(n){let e;return e=n.disableParentContext?"function"==typeof n.components?n.components(t):n.components||t:l(n.components),i.createElement(a.Provider,{value:e},n.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.