<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Oscar Mike Claure Cabrera on Medium]]></title>
        <description><![CDATA[Stories by Oscar Mike Claure Cabrera on Medium]]></description>
        <link>https://medium.com/@osomike?source=rss-4728a03c6eae------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*HT-UZHovJ5JvyLiN.</url>
            <title>Stories by Oscar Mike Claure Cabrera on Medium</title>
            <link>https://medium.com/@osomike?source=rss-4728a03c6eae------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sun, 15 Nov 2026 14:20:59 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@osomike/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[AI agents demystified: What they are and how to build one]]></title>
            <link>https://medium.com/@osomike/ai-agents-demystified-what-they-are-and-how-to-build-one-10f2cb83a1ea?source=rss-4728a03c6eae------2</link>
            <guid isPermaLink="false">https://medium.com/p/10f2cb83a1ea</guid>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[llm-agent]]></category>
            <category><![CDATA[llm-applications]]></category>
            <dc:creator><![CDATA[Oscar Mike Claure Cabrera]]></dc:creator>
            <pubDate>Thu, 05 Jun 2025 13:38:30 GMT</pubDate>
            <atom:updated>2025-06-05T14:03:42.413Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/792/1*rla82BGkWCn8rjZvuTGnow.png" /></figure><h3>Introduction</h3><p>With the ongoing developments in the data and AI industry, the hype around AI agents has no signs of slowing down. Jensen Huang, Nvidia CEO, is a strong proponent of AI agents, envisioning a <a href="https://finance.yahoo.com/news/nvidia-jensen-huang-says-ai-044815659.html?guccounter=1&amp;guce_referrer=aHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS8&amp;guce_referrer_sig=AQAAANDlg6Iih6JOio3Pz2lx-L3leQQ6SXV0i6zIUuqSlNUVp2dPBSzz3Y2gb6cjca2-DRhTLS5HXG27k25uJjScG9-c3a34eBx3teMVOnQRHV9ufxUBcYZWRUi-LgbGJAE4NVkB2IzqbGBl7rIjS4EpL1_IhIB87SYh2Vxp5LCE1HHT">multi-trillion-dollar opportunity</a>, where agents can perform tasks with a high degree of autonomy and revolutionise how people work and how businesses operate.</p><p>So, in this article we would like to discuss what exactly AI agents are, what are their main components, how they interact together and the basics on how to build one.</p><h3>What is an AI agent?</h3><p>An AI agent is a system or software program that can autonomously interact with its environment, by <strong>performing certain actions on behalf of humans</strong> to achieve a given goal.</p><p>Although agents are developed for a wide variety of use cases, we can agree that most of them will have at least the components shown in the figure below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/826/1*w-PC4SRhrGF50BRXcy_xgg.png" /><figcaption>Source: <a href="https://weaviate.io/blog/what-are-agentic-workflow">https://weaviate.io/blog/what-are-agentic-workflow</a></figcaption></figure><h4>Reasoning</h4><p>The core of the AI agent, thanks to their knowledge base and reasoning capability, agents can “think” and continuously engage in problem-solving to achieve a given objective.</p><p>LLMs power this by supporting:</p><ul><li><strong>Planning:</strong> capability of breaking down complex problems into sequential smaller manageable tasks, enabling the use of specific tools.</li><li><strong>Reflecting:</strong> capability to assess the outcomes of given actions and refine their strategies based on their results.</li></ul><h4>Tools</h4><p>Their name explains itself; tools are a collection of functions or programmed capabilities that expand the abilities of LLMs.</p><p>LLMs with “function calling” or “tool calling” functionalities can be made aware that they have access to a specific list of tools and they can call them when they require it. This calling mechanism comes as a “signalling” that a call to a function is needed rather than the actual LLM executing the tool itself.</p><p>Some examples of possible tools are:</p><ul><li>Database access, to retrieve or update information from a specific schema or set of tables.</li><li>Web browsing, to search something on the web when the user needs it.</li><li>Code interpreter, to run code generated by the LLM.</li></ul><h4>Memory</h4><p>Agents are initialised with a context defining their initial state and goal. Throughout interactions with other systems or humans, they rely on memory to store the conversation history and/or make checkpoints periodically.</p><p>This allows the LLMs to behave consistently according to user needs.</p><h4>An example of an agent</h4><p>AI agents for customer service are an example of such applications. These are agents with access to customers’ data (orders, payments, service planning, etc) and can help solve most of customers’ questions around specific orders like: cancelations, refunds, delivery dates replanning, etc.</p><p>In this scenario, <strong>reasoning</strong> helps the agent understand where the customer needs help and what are the steps to do so, <strong>tools</strong> allow the agents to interact with databases, fetch information about an order and update information like order statuses. Lastly, <strong>memory</strong> allows the agent to keep track of the conversation with the customer, ensuring continuity.</p><h3>Building your own AI agent</h3><p>From the introduction, we can conclude that building an AI agent involves several components and considerations on how they interact with each other.</p><p>In this section, we will dive into these components and see how they come together. At last, we will finish with an example on how to program a simplistic AI agent.</p><h4>Considerations before starting</h4><ol><li><strong>The Core LLM model</strong></li></ol><p>Selecting the core LLM is an important step, here are some important factors to consider:</p><ul><li>Performance: Accuracy and human-like interaction are important. Larger LLMs have more layers in their neural networks, so typically they offer better abstractions and more specialised knowledge on multiple areas, decreasing the chances that the model will hallucinate. However, this comes at the expense of increased compute and memory requirements, hence finding the right balance is essential.</li><li>Latency: Larger LLMs have larger latencies as their neural networks are composed of more layers, more compute is required.</li><li>Cost: Larger LLMs are of course more compute and memory greedy, hence more expensive to run.</li><li>Proprietary vs open source: The big debate “Do we rely on proprietary technology where we have little control and understanding, or do we go open source where we have full control, but also more specialised skills are needed to make it work?”</li></ul><p>Here a comparison table of both approaches focusing on key elements:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*EYeS3kJlFpEC1igd557K6w.png" /></figure><p>This is a <strong>strategic decision</strong>, not just technical. It affects costs, infrastructure, compliance, development speed, and long-term autonomy.</p><p><strong>2. Features required in the core LLM:</strong></p><p>For building agents, the core LLM needs some characteristics:</p><ul><li><strong>Instruction following:</strong> An <strong>instruct model</strong> is a fine-tuned base LLM that excels at following instructions, staying on the topic and responding in a desired format or style.</li><li><strong>Tool calling:</strong> The indispensable capability if you are trying to build an AI agent. This enables LLM models to be aware that there is a set of tools available and their specifications. So, based on the context or user requests, the LLM can decide if a call to a specific tool is needed or not. Once the LLM calls a tool, it is up to the engineer to map that call to the specific function, including the parameters that the LLM sent.</li><li><strong>Context window support:</strong> Although most recent models have large enough context windows, this could limit the ability to keep relevant information for the agent and that some summarisation or checkpoint might be needed at some point if we expect the interactive sessions to last for long.</li></ul><p><strong>3. Understanding Model-Specific competition schemas and APIs</strong></p><p>LLMs serve as the brain of the agent, but how do we interact and send instructions to them? Before moving forward let’s understand what <strong>LLM APIs</strong> are and how their <strong>completion schemas</strong> work.</p><p><strong><em>LLM API</em></strong></p><p>An LLM API is the interface that allows an AI agent to communicate with the language model. It defines how requests are sent and how responses are received.</p><p>Most LLM providers expose their APIs over HTTPS, using REST or JSON-based endpoints. SDKs are also widely used, as they wrap the API and create an easy-to-use abstraction for different programming languages.</p><p>Here a list of some SDKs for various LLM providers:</p><ul><li><a href="https://docs.mistral.ai/getting-started/clients/">Mistral</a></li><li><a href="https://platform.openai.com/docs/overview">OpenAI</a></li><li><a href="https://ai.google.dev/gemini-api/docs/quickstart">Google</a></li><li><a href="https://docs.anthropic.com/en/api/overview">Anthropic</a></li></ul><p>As we can see, most of them are proposed in <strong>python</strong>, as well as <strong>TypeScript</strong>, <strong>JavaScript</strong> and <strong>Go</strong>.</p><p><strong><em>Completion Schema</em></strong></p><p>The completion schema is the structure of the input we send to the LLM and the output it returns. It is important that the AI agent sends well formatted requests and correctly interprets the responses. Schemas vary by provider, but generally they can be seen as a list of dictionaries with the <strong>role</strong> and <strong>content</strong> as main<strong> keys</strong>.</p><p>The most common roles are:</p><ul><li><strong>System</strong>: used to provide high-level instructions and context that will guide the model behaviour trough the interactions.</li><li><strong>User</strong>: used to provide the (human) user input or query</li><li><strong>Assistant</strong>: used to provide the response of the LLM to the previous query or interaction</li></ul><p>For better understanding here we have an example of a sequence of messages, exchanged between a user and an AI assistant:</p><pre># Example of sequence of messages exchanged between a user and the AI assistant<br>[<br>  {<br>    &quot;role&quot;: &quot;system&quot;,<br>    &quot;content&quot;: &quot;Act as an human assistant, specializing in providing basic travel advises for European destinations. Provide  just location suggestions based on interests.\n\nYour name is Alice. Always ask the name of the person you are interacting with if it is not given at the begining of the conversation. To keep it more human keep responses short, so the human has the impression that it is chatting with another human. &quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;Hi there&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: &quot;Hi, I&#39;m Alice. What&#39;s your name?&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;I am Oscar&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: &quot;Nice to meet you, Oscar! What kind of experiences do you enjoy while traveling? Are you into vibrant cities, historical sites, coastal escapes, or something else?&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;I always found the French Alps fascinating!&quot;<br>  }<br>]</pre><p>Notice that the first message starts with a <strong>system</strong> role, containing the initial prompt. And then it follows an alternation between <strong>user</strong> and <strong>assistant</strong> messages.</p><h4>Choosing the core LLM</h4><p>As new models are released every month, here are some resources to keep track of their benchmark:</p><ul><li><a href="https://lmarena.ai/">LLM arena</a></li><li><a href="https://www.vellum.ai/llm-leaderboard">Vellum</a></li><li><a href="https://gorilla.cs.berkeley.edu/leaderboard.html">Berkeley Function Calling Leaderboard</a></li></ul><p>Based on the points above and the leaderboards ranking as of May 2025, we decided to go for <strong>o3-mini</strong> deployed in an <strong>Azure OpenAI</strong> endpoint for the core of our agentic solution. You can refer to its <a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/supported-languages?tabs=dotnet-secure%2Csecure%2Cpython-secure%2Ccommand&amp;pivots=programming-language-python">python SDK</a> and <a href="https://learn.microsoft.com/en-us/azure/ai-services/openai/how-to/chatgpt">completion schema</a> for more details.</p><h4>Calling the API via the SDK</h4><p>The SDKs contain an abstraction that allows us to authenticate with the LLM provider, in this case we are using the <strong>openai</strong> library to create a client and then we use the client to ask a single reply from the LLM.</p><p>Note that in the messages section, we are passing the system prompt as well as the initial request of the user, following the completion schema previously discussed:</p><pre>import openai<br><br>ai_client = openai.AzureOpenAI(<br>  api_version=&quot;API_VERSION_HERE&quot;,<br>  azure_endpoint=&quot;AZURE_OPENAI_ENDPOINT_HERE&quot;,<br>  api_key=&quot;API_KEY_HERE&quot;<br>)<br>response = ai_client.chat.completions.create(<br>  messages=[<br>      {<br>        &quot;role&quot;: &quot;system&quot;<br>        &quot;content&quot;: &quot;You are a helpful assistant&quot;<br>      },<br>      {<br>        &quot;role&quot;: &quot;user&quot;<br>        &quot;content&quot;: &quot;Hi there, what is the capital of France&quot;<br>      }<br>    ],<br>  model=&quot;DEPLOYMENT_NAME_HERE&quot;,<br>  max_completion_tokens=1000)<br><br>print(f&quot;AI assitant: {response.choices[0].message.content}&quot;)</pre><p>This will send a query to the o3-mini LLM being served in our Azure OpenAI endpoint. The response is then returned and stored on a variable, from which we still need to get its content. <br> <br> Once that is done, the output of this execution should look like this:</p><pre>AI assitant: The capital of France is Paris.</pre><h4>Creating tools</h4><p>Now let’s create a tool that allows us to list blobs in an Azure container. We will use a container client to authenticate with Azure and list the blobs in it, here a method that does exactly that:</p><pre># Example of function:<br>from typing import Optional<br>import logging<br>from azure.storage.blob import ContainerClient<br><br>logger = logging.Logger(&quot;my-dummy-logger&quot;, level=logging.DEBUG)<br><br>def list_blob_files(container_name: Optional[str] = None) -&gt; dict:<br><br>  if container_name in [None, &quot;&quot;, &quot;{}&quot;]:<br>    container_name = &quot;my-default-container&quot;  # Replace with your default container name<br><br>  if not isinstance(container_name, str):<br>    container_name = str(container_name)<br><br>  logger.debug(f&quot;Listing blobs in container: &#39;{container_name}&#39;&quot;)<br><br>  container_client = ContainerClient.from_connection_string(<br>    conn_str=&quot;YOUR_AZURE_STORAGE_CONNECTION_STRING&quot;,  # Replace with your connection string<br>    container_name=container_name<br>  )<br><br>  blob_list = container_client.list_blobs()<br>  try:<br>    files = [blob.name for blob in blob_list]<br>    logger.debug(f&quot;Found {len(files)} files in container.&quot;)<br>    status = &quot;success&quot;<br>  except azure_exceptions.HttpResponseError as e:<br>    logger.error(f&quot;Error listing blobs from container &#39;{container_name}&#39;: {e}&quot;)<br>    status = &quot;error&quot;<br>    files = []<br><br>  return {&quot;container_name&quot;: container_name, &quot;status&quot;: status, &quot;files&quot;: files}</pre><p>Now that we have the function/tool, we need to make the model aware that it can use it. For that a description of what the tool does and which parameters it takes is needed.</p><p>These descriptions follow a format that is again specific to the LLM provider.</p><p>Here we have the description of our blob listing tool, following the OpenAI <a href="https://platform.openai.com/docs/guides/function-calling?api-mode=responses">tool calling</a> reference:</p><pre># Tool description for OpenAI<br>tools_description = [<br>  {<br>    &quot;type&quot;: &quot;function&quot;,<br>    &quot;function&quot;: {<br>      &quot;name&quot;: &quot;list_blob_files&quot;,<br>      &quot;description&quot;:<br>        &quot;List all files in a specified Azure Blob Storage container. If no container is &quot; \<br>        &quot;specified, the default container will be used.&quot;,<br>      &quot;parameters&quot;: {<br>        &quot;type&quot;: &quot;object&quot;,<br>        &quot;properties&quot;: {<br>          &quot;container_name&quot;: {<br>            &quot;type&quot;: &quot;string&quot;,<br>            &quot;description&quot;: &quot;(Optional) The name of the Azure Blob Storage container.&quot;<br>          }<br>        },<br>        #&quot;required&quot;: [&quot;container_name&quot;]<br>      }<br>    }<br>  }<br>]</pre><p>This description includes the tool/function name, a description of what it does, the parameters it takes and a specification of which of them are mandatory.</p><p>Once the description is ready, to make the model aware of its existence, an additional <strong>tool description</strong> parameter is needed on the API call:</p><pre>import openai<br><br>ai_client = openai.AzureOpenAI(<br>  api_version=&quot;API_VERSION_HERE&quot;,<br>  azure_endpoint=&quot;AZURE_OPENAI_ENDPOINT_HERE&quot;,<br>  api_key=&quot;API_KEY_HERE&quot;<br>)<br><br>response = ai_client.chat.completions.create(<br>  messages=[<br>    {<br>      &quot;role&quot;: &quot;system&quot;,<br>      &quot;content&quot;: &quot;Act as an human assistant, specializing in providing basic travel advises for European destinations. Provide  just location suggestions based on interests.\n\nYour name is Alice. Always ask the name of the person you are interacting with if it is not given at the begining of the conversation. To keep it more human keep responses short, so the human has the impression that it is chatting with another human. &quot;<br>    },<br>    {<br>      &quot;role&quot;: &quot;user&quot;,<br>      &quot;content&quot;: &quot;I want to check the files on the test container&quot;<br>    }<br>  ],<br>  tools=tools_description,<br>  model=&quot;DEPLOYMENT_NAME_HERE&quot;,<br>  max_completion_tokens=1000<br>  )</pre><p>Now that the LLM is aware that it has access to a tool, it is up to us to check if it decided to use it or not. So, a check if a tool call has been made is needed and if so, a “hard coded” mapping to it.</p><p>Once the tool function has been executed, we add its return to the conversation between the LLM and the user with the role field set as <strong>tool</strong> on it.</p><p>Finally, a second call to the LLM is made to verbalise the function’s return.</p><p>The following competition schema helps us to understand what we are trying to achieve. On it, the user requests which are the files on the test container, and the LLM decides to make a call to the tool <strong>list_blob_files</strong>, which returns the list of blobs. We added that return to the conversation history and then we made <strong>another call to the LLM to interpret that return</strong>:</p><pre>[<br>  {<br>    &quot;role&quot;: &quot;system&quot;,<br>    &quot;content&quot;: &quot;You are a helpful assistant.&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;Hi there, I am Oscar&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: &quot;Hi Oscar, welcome! How can I help you today?&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;What are the files on the test container?&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: null,<br>    &quot;tool_calls&quot;: [<br>      {<br>        &quot;id&quot;: &quot;call_1zPM5CENscsLuEuRSg8nDCvN&quot;,<br>        &quot;type&quot;: &quot;function&quot;,<br>        &quot;function&quot;: {<br>          &quot;name&quot;: &quot;list_blob_files&quot;,<br>          &quot;arguments&quot;: &quot;{\&quot;container_name\&quot;: \&quot;test\&quot;}&quot;<br>        }<br>      }<br>    ]<br>  },<br>  {<br>    &quot;role&quot;: &quot;tool&quot;,<br>    &quot;content&quot;: &quot;{\&quot;container_name\&quot;: \&quot;test\&quot;, \&quot;status\&quot;: \&quot;success\&quot;, \&quot;files\&quot;: [\&quot;AI agents article.docx\&quot;, \&quot;Goolge-whitepaper_Prompt Engineering_v4.pdf\&quot;, \&quot;a-practical-guide-to-building-agents.pdf\&quot;]}&quot;,<br>    &quot;tool_call_id&quot;: &quot;call_1zPM5CENscsLuEuRSg8nDCvN&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: &quot;The files in the \&quot;test\&quot; container are as follows:\n1. AI agents article.docx\n2. Goolge-whitepaper_Prompt Engineering_v4.pdf\n3. a-practical-guide-to-building-agents.pdf\n\nLet me know if you need help with anything else!&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;Which of these are word files?&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: &quot;The Word file in the list is \&quot;AI agents article.docx\&quot;.&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;user&quot;,<br>    &quot;content&quot;: &quot;Great thanks!&quot;<br>  },<br>  {<br>    &quot;role&quot;: &quot;assistant&quot;,<br>    &quot;content&quot;: &quot;You&#39;re welcome, Oscar! Let me know if you have any other questions or need any additional help.&quot;<br>  }<br>]</pre><h4>Bringing all together</h4><p>Before going into the code, let’s summarise the key aspects:</p><ol><li>The AI agent relies on the core LLM for reasoning.</li><li>The LLM is aware that a tool is available thanks to the tool description passed during the API call.</li><li>When a user makes a query to the LLM, the LLM decides if a tool call is required or not.</li><li>If so, it signals that a tool call is needed. This signalling is then picked by the agent code and executes the specific function associated with it. The return of the function is then added to the conversation history and a second call to the LLM is needed to summarise the output of the function.</li><li>If a tool call is not required, the LLM can immediately reply to the user.</li></ol><p>The full runnable code is on this <a href="https://github.com/digital-power/building-a-simple-ai-agent">github repository</a>. Check the <strong><em>README.md</em></strong> to add your own <strong>settings.yaml </strong>file before executing it.</p><p>Here an example on how it runs:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/904/1*tndpb_Ah7ih_6aSrnHYVQA.png" /></figure><h4>Some additional notes</h4><p>In this article we described some key factors to consider while creating an AI agent.</p><p>In our example we relied on the OpenAI interface, however other LLM providers might have different SDKs and potentially different completion schemas, which can introduce complexity when switching them. <strong>LangChain</strong> is a framework that addresses this challenge by providing abstractions to standardise the interactions with LLMs across various LLM providers, simplifying tool calling and API management, <a href="https://python.langchain.com/docs/introduction/">here</a> more info about it.</p><p>Our example implemented a single-agent architecture, where a single LLM handles the reasoning, tool selection and the planning. While straightforward for simpler systems, it might fall short when adding more tools to it, as the LLM might have difficulties selecting the proper tool. For these scenarios, <a href="https://www.ibm.com/think/topics/multiagent-system">multi-agent architectures</a> are a good alternative as they distribute responsibilities to multiple specialised agents, where each one handles specialised and smaller tasks.</p><p>Another emerging concept in AI agents is <a href="https://modelcontextprotocol.io/introduction">Model Context Protocol</a> (MCP), it refers to a standardised way for AI agents and tools to share context across their interactions. In multi-agents/tools systems, MCP helps ensuring that all components such as reasoning agents, planning agents and external tools, operate with a consistent and updated understanding about the environment, goals and user preferences. While still under development, MCP is becoming more relevant for building more reliable AI systems.</p><p>Finally, as any other software product, testing your AI agent should be part of the developing process. Here a <a href="https://galileo.ai/blog/how-to-test-ai-agents-evaluation">blog</a> with some ideas of what to include on it.</p><h3>Conclusion</h3><p>Building an AI agent is a process that combines reasoning, tool integration and memory management to create systems capable of addressing complex tasks. Pay attention to selecting the core LLM, balancing performance, costs and latency. And make sure it has the features needed to follow instructions and perform tool calling.</p><p>As the AI landscape evolves fast, frameworks like LangChain and multi-agent architectures simplify development and enhance scalability.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=10f2cb83a1ea" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>