{"id":3512,"date":"2025-05-02T07:05:23","date_gmt":"2025-05-02T07:05:23","guid":{"rendered":"https:\/\/mailitics.com\/index.php\/2025\/05\/02\/agentic-ai-101-starting-your-journey-building-ai-agents\/"},"modified":"2025-05-02T07:05:23","modified_gmt":"2025-05-02T07:05:23","slug":"agentic-ai-101-starting-your-journey-building-ai-agents","status":"publish","type":"post","link":"https:\/\/mailitics.com\/index.php\/2025\/05\/02\/agentic-ai-101-starting-your-journey-building-ai-agents\/","title":{"rendered":"Agentic AI 101: Starting Your Journey Building AI Agents"},"content":{"rendered":"<p>    Agentic AI 101: Starting Your Journey Building AI Agents<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n    <!-- no image --><br \/>\n \t<BR><br \/>\n<BR><\/BR><\/p>\n<div>\n<h2 class=\"wp-block-heading\"><mdspan datatext=\"el1746162647083\" class=\"mdspan-comment\">Introduction<\/mdspan><\/h2>\n<p class=\"wp-block-paragraph\">The Artificial Intelligence industry is moving fast. It is impressive and many times overwhelming.<\/p>\n<p class=\"wp-block-paragraph\">I have been studying, learning, and building my foundations in this area of Data Science because I believe that the future of Data Science is strongly correlated with the development of Generative AI.<\/p>\n<p class=\"wp-block-paragraph\">It was just the other day when I built my first <a href=\"https:\/\/towardsdatascience.com\/tag\/ai-agent\/\" title=\"Ai Agent\">Ai Agent<\/a>, and then a couple of weeks after that, there were several Python packages to choose from, not to mention the no-code options that are doing very well, like <em>n8n<\/em>.<\/p>\n<p class=\"wp-block-paragraph\">From \u201cmere\u201d models that could just chat with us to a <em>tsunami<\/em> of AI Agents that are everywhere, searching the Internet, handling files, and making whole <a href=\"https:\/\/towardsdatascience.com\/tag\/data-science\/\" title=\"Data Science\">Data Science<\/a> projects (from EDA to modeling and evaluation), all of that happened in just a couple of years. <\/p>\n<p class=\"wp-block-paragraph\"><strong>What?<\/strong><\/p>\n<p class=\"wp-block-paragraph\">Seeing all of that, my thought was: <em>\u201cI need to get on board as soon as possible\u201d<\/em>. After all, it\u2019s better to surf the wave than be swallowed by it.<\/p>\n<p class=\"wp-block-paragraph\">For that reason, I decided to start this series of posts where I plan to go from the fundamentals to build our first AI Agent, until more complex concepts.<\/p>\n<p class=\"wp-block-paragraph\">Enough talk, let\u2019s dive in.<\/p>\n<h2 class=\"wp-block-heading\">The Basics of AI Agents<\/h2>\n<p class=\"wp-block-paragraph\">An AI Agent is created when we give the <a href=\"https:\/\/towardsdatascience.com\/tag\/llm\/\" title=\"Llm\">Llm<\/a> the power to interact with tools and perform useful actions for us. So, instead of being just a chatbot, now it can schedule appointments, take care of our calendar, search the internet, write social media posts, and the list goes on\u2026<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">AI Agents can do useful things, not just chat.<\/p>\n<\/blockquote>\n<p class=\"wp-block-paragraph\">But how can we give that power to an LLM?<\/p>\n<p class=\"wp-block-paragraph\">The simple answer is to use an API to interact with the LLM. There are several Python packages for that nowadays. If you follow my blog, you will see that I have already tried a couple of packages to build agents: Langchain, Agno (former PhiData), and CrewAI, for instance. For this series, I will stick with Agno [1].<\/p>\n<p class=\"wp-block-paragraph\">First, set up a virtual environment using <code>uv<\/code>, Anaconda, or the environment handler of your preference. Next, install the packages.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-bash\"># Agno AI\npip install agno\n\n# module to interact with Gemini\npip install google-generativeai\n\n# Install these other packages that will be needed throughout the tutorial\n pip install agno groq lancedb sentence-transformers tantivy youtube-transcript-api<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Quick note before we continue. Don\u2019t forget to get a Google Gemini API Key [2].<\/p>\n<p class=\"wp-block-paragraph\">Creating a simple agent is very simple. All the packages are very similar. They have a class <code>Agent<\/code> or something similar that allows us to select a model and start interacting with the LLM of our choice. Here are the main components of this class:<\/p>\n<ul class=\"wp-block-list\">\n<li class=\"wp-block-list-item\">\n<code>model<\/code>: the connection with the LLM. Here we will choose between OpenAI, Gemini, Llama, Deepseek etc.<\/li>\n<li class=\"wp-block-list-item\">\n<code>description<\/code>: This argument lets us describe the behavior of the agent. This is added to the <code>system_message<\/code>, which is a similar argument. <\/li>\n<li class=\"wp-block-list-item\">\n<code>instructions<\/code>: I like to think of an agent like an employee or an assistant that we\u2019re managing. In order to have a task done, we must provide the instructions of what needs to be done. Here is where you can do that. <\/li>\n<li class=\"wp-block-list-item\">\n<code>expected_output<\/code>: Here we can give instructions about the expected output.<\/li>\n<li class=\"wp-block-list-item\">\n<code>tools<\/code>: This is what makes the LLM an Agent, enabling it to interact with the real world using these tools.<\/li>\n<\/ul>\n<p class=\"wp-block-paragraph\">Now, let\u2019s create a simple agent that has no tools, but will serve to build our intuition around the structure of the code.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nfrom agno.agent import Agent\nfrom agno.models.google import Gemini\nimport os\n\n# Create agent\nagent = Agent(\n    model= Gemini(id=\"gemini-1.5-flash\",\n                  api_key = os.environ.get(\"GEMINI_API_KEY\")),\n    description= \"An assistant agent\",\n    instructions= [\"Be sucint. Answer in a maximum of 2 sentences.\"],\n    markdown= True\n    )\n\n# Run agent\nresponse = agent.run(\"What's the weather like in NYC in May?\")\n\n# Print response\nprint(response.content)<\/code><\/pre>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\">########### OUTPUT ###############\nExpect mild temperatures in NYC during May, typically ranging from the low 50s \nto the mid-70s Fahrenheit.  \nThere's a chance of rain, so packing layers and an umbrella is advisable.<\/code><\/pre>\n<p class=\"wp-block-paragraph\">That is great. We are using the Gemini 1.5 model. Notice how it responds based on the data it was trained on. If we ask it to tell us the weather today, we\u2019ll see a response saying it can\u2019t access the internet.<\/p>\n<p class=\"wp-block-paragraph\">Let\u2019s explore the <code>instructions<\/code> and <code>expected_output<\/code> arguments. We now want a table with the month, season and average temperature for NYC.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nfrom agno.agent import Agent\nfrom agno.models.google import Gemini\nimport os\n\n# Create agent\nagent = Agent(\n    model= Gemini(id=\"gemini-1.5-flash\",\n                  api_key = os.environ.get(\"GEMINI_API_KEY\")),\n    description= \"An assistant agent\",\n    instructions= [\"Be sucint. Return a markdown table\"],\n    expected_output= \"A table with month, season and average temperature\",\t\n    markdown= True\n    )\n\n# Run agent\nresponse = agent.run(\"What's the weather like in NYC for each month of the year?\")\n\n# Print response\nprint(response.content)\n<\/code><\/pre>\n<p class=\"wp-block-paragraph\">And there\u2019s the result. <\/p>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th class=\"has-text-align-center\" data-align=\"center\">Month<\/th>\n<th class=\"has-text-align-center\" data-align=\"center\">Season<\/th>\n<th class=\"has-text-align-center\" data-align=\"center\">Average Temperature (\u00b0F)<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">January<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Winter<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">32<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">February<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Winter<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">35<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">March<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Spring<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">44<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">April<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Spring<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">54<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">May<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Spring<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">63<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">June<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Summer<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">72<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">July<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Summer<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">77<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">August<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Summer<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">76<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">September<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Autumn<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">70<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">October<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Autumn<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">58<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">November<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Autumn<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">48<\/td>\n<\/tr>\n<tr>\n<td class=\"has-text-align-center\" data-align=\"center\">December<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">Winter<\/td>\n<td class=\"has-text-align-center\" data-align=\"center\">37<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2 class=\"wp-block-heading\">Tools<\/h2>\n<p class=\"wp-block-paragraph\">The previous responses are nice. But we naturally don\u2019t want to use powerful models such as LLMs to play with a chatbot or tell us old news, right?<\/p>\n<p class=\"wp-block-paragraph\">We want them to be a bridge to automation, productivity, and knowledge. So, the <strong>Tools<\/strong> will add capabilities to our AI Agents, building, therefore, the bridge with the real world. Common examples of tools for agents are: searching the web, running SQL, sending an email or calling APIs. <\/p>\n<p class=\"wp-block-paragraph\">But more than that, we can create custom capabilities to our agents by using any Python function as a tool.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Tools <\/strong>are functions that an Agent can run to achieve tasks.<\/p>\n<\/blockquote>\n<p class=\"wp-block-paragraph\">In terms of code, adding a tool to the Agent is just a matter of using the argument <code>tools<\/code> in the <code>Agent<\/code> class. <\/p>\n<p class=\"wp-block-paragraph\">Imagine a solopreneur (one-person company) in the healthy living business who wants to automate their content generation. This person posts tips about healthy habits every day. I know for a fact that content generation is not as straightforward as it looks like. It demands creativity, research, and copywriting skills. So, if this could be automated, or at least part of it, that\u2019s time saved.<\/p>\n<p class=\"wp-block-paragraph\">So we write this code to create a very simple agent that can generate a simple Instagram post and save it to a markdown file for our review. We reduced the process from thinking &gt; researching &gt; writing &gt; reviewing &gt; posting to reviewing &gt; posting.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nimport os\nfrom agno.agent import Agent\nfrom agno.models.google import Gemini\nfrom agno.tools.file import FileTools\n\n# Create agent\nagent = Agent(\n    model= Gemini(id=\"gemini-1.5-flash\",\n                  api_key = os.environ.get(\"GEMINI_API_KEY\")),\n                  description= \"You are a social media marketer specialized in creating engaging content.\",\n                  tools=[FileTools(\n                      read_files=True, \n                      save_files=True\n                      )],\n                  show_tool_calls=True)\n\n\n# Writing and saving a file\nagent.print_response(\"\"\"Write a short post for instagram with tips and tricks\n                        that positions me as an authority in healthy eating \n                        and save it to a file named 'post.txt'.\"\"\",\n                     markdown=True)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">As a result, we have the following.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-markup\">Unlock Your Best Self Through Healthy Eating:\n\n1. Prioritize whole foods: Load up on fruits, vegetables, lean proteins, and whole\n grains.  They're packed with nutrients and keep you feeling full and energized.\n2. Mindful eating:  Pay attention to your body's hunger and fullness cues. \nAvoid distractions while eating.\n3. Hydrate, hydrate, hydrate: Water is crucial for digestion, energy levels, \nand overall health.\n4. Don't deprive yourself:  Allow for occasional treats.  \nDeprivation can lead to overeating later.  Enjoy everything in moderation!\n5. Plan ahead:  Prep your meals or snacks in advance to avoid unhealthy \nimpulse decisions.\n\n#healthyeating #healthylifestyle #nutrition #foodie \n#wellbeing #healthytips #eatclean #weightloss #healthyrecipes \n#nutritiontips #instahealth #healthyfood #mindfuleating #wellnessjourney \n#healthcoach<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Certainly, we could make it much more fancy by creating a crew with other agents to search a list of websites for content, a content checker and reviewer, and another one to generate an image for the post. But I believe you got the general idea of how to add a <code>tool<\/code> to an <code>Agent<\/code>.<\/p>\n<p class=\"wp-block-paragraph\">Another type of tool we can add is the <strong>function<\/strong> <strong>tool<\/strong>. We can use a Python function to serve as a tool for the LLM. Just don\u2019t forget to add the type hints like <code>video_id:str<\/code>, so the model knows what to use as the function\u2019s input. Otherwise, you might see an error. <\/p>\n<p class=\"wp-block-paragraph\">Let\u2019s see briefly how that works.<\/p>\n<p class=\"wp-block-paragraph\">We now want our Agent to be able to get a given YouTube video and summarize it. To perform such a task, we simply create a function that downloads the transcript of the video from YT and passes it to the model to summarize.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nimport os\nfrom agno.agent import Agent\nfrom agno.models.google import Gemini\nfrom youtube_transcript_api import YouTubeTranscriptApi\n\n# Get YT transcript\ndef get_yt_transcript(video_id:str) -&gt; str:\n      \n    \"\"\"\n    Use this function to get the transcript from a YouTube video using the video id.\n\n    Parameters\n    ----------\n    video_id : str\n        The id of the YouTube video.\n    Returns\n    -------\n    str\n        The transcript of the video.\n    \"\"\"\n\n    # Instantiate\n    ytt_api = YouTubeTranscriptApi()\n    # Fetch\n    yt = ytt_api.fetch(video_id)\n    # Return\n    return ''.join([line.text for line in yt])\n\n\n# Create agent\nagent = Agent(\n    model= Gemini(id=\"gemini-1.5-flash\",\n                  api_key = os.environ.get(\"GEMINI_API_KEY\")),\n                  description= \"You are an assistant that summarizes YouTube videos.\",\n                  tools=[get_yt_transcript],\n                  expected_output= \"A summary of the video with the 5 main points and 2 questions for me to test my understanding.\",\n                  markdown=True,\n                  show_tool_calls=True)\n\n\n# Run agent\nagent.print_response(\"\"\"Summarize the text of the video with the id 'hrZSfMly_Ck' \"\"\",\n                     markdown=True)<\/code><\/pre>\n<p class=\"wp-block-paragraph\">And then you have a result.<\/p>\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" height=\"375\" width=\"1024\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/contributor.insightmediagroup.io\/wp-content\/uploads\/2025\/04\/image-209-1024x375.png?resize=1024%2C375&#038;ssl=1\" alt=\"\" class=\"wp-image-602835\"><figcaption class=\"wp-element-caption\">Result of the summarization requested. Image by the author.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Agents with Reasoning<\/h2>\n<p class=\"wp-block-paragraph\">Another cool option from the Agno package is allowing us to easily create agents that can analyze the situation before answering a question. That\u2019s the reasoning tool.<\/p>\n<p class=\"wp-block-paragraph\">We will create a reasoning agent with Alibaba\u2019s Qwen-qwq-32b model. Notice that the only difference here, besides the model, is that we\u2019re adding the tool <code>ReasoningTools()<\/code>. <\/p>\n<p class=\"wp-block-paragraph\">The <code>adding_instructions=True<\/code> means providing detailed instructions to the agent, which enhances the reliability and accuracy of its tool usage, while setting this to <code>False<\/code> forces the agent to depend on its own reasoning, which can be more prone to errors.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nimport os\nfrom agno.agent import Agent\nfrom agno.models.groq import Groq\nfrom agno.tools.reasoning import ReasoningTools\n\n\n# Create agent with reasoning\nagent = Agent(\n    model= Groq(id=\"qwen-qwq-32b\",\n                  api_key = os.environ.get(\"GROQ_API_KEY\")),\n                  description= \"You are an experienced math teacher.\",\n                  tools=[ReasoningTools(add_instructions=True)],\n                  show_tool_calls=True)\n\n\n# Writing and saving a file\nagent.print_response(\"\"\"Explain the concept of sin and cosine in simple terms.\"\"\",\n                     stream=True,\n                     show_full_reasoning=True,\n                     markdown=True)\n<\/code><\/pre>\n<p class=\"wp-block-paragraph\">Follows the output.<\/p>\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/contributor.insightmediagroup.io\/wp-content\/uploads\/2025\/04\/output.gif?ssl=1\" alt=\"\" class=\"wp-image-602838\"><figcaption class=\"wp-element-caption\">Output of the reasoning model. Image by the author.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Agent with Knowledge<\/h2>\n<p class=\"wp-block-paragraph\">This tool is the easiest way for me to create a Retrieval Augmented Generation (RAG). With this feature, you can point the agent to a website or a list of websites, and it will add the content to a vector database. Then, it becomes searchable. Once asked, the agent can use the content as part of the answer. <\/p>\n<p class=\"wp-block-paragraph\">In this simple example, I added one page of my website and asked the agent what books are listed there. <\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># Imports\nimport os\nfrom agno.agent import Agent\nfrom agno.models.google import Gemini\nfrom agno.knowledge.url import UrlKnowledge\nfrom agno.vectordb.lancedb import LanceDb, SearchType\nfrom agno.embedder.sentence_transformer import SentenceTransformerEmbedder\n\n# Load webpage to the knowledge base\nagent_knowledge = UrlKnowledge(\n    urls=[\"https:\/\/gustavorsantos.me\/?page_id=47\"],\n    vector_db=LanceDb(\n        uri=\"tmp\/lancedb\",\n        table_name=\"projects\",\n        search_type=SearchType.hybrid,\n        # Use Sentence Transformer for embeddings\n        embedder=SentenceTransformerEmbedder(),\n    ),\n)\n\n# Create agent\nagent = Agent(\n    model=Gemini(id=\"gemini-2.0-flash\", api_key=os.environ.get(\"GEMINI_API_KEY\")),\n    instructions=[\n        \"Use tables to display data.\",\n        \"Search your knowledge before answering the question.\",\n        \"Only inlcude the content from the agent_knowledge base table 'projects'\",\n        \"Only include the output in your response. No other text.\",\n    ],\n    knowledge=agent_knowledge,\n    add_datetime_to_instructions=True,\n    markdown=True,\n)\n\nif __name__ == \"__main__\":\n    # Load the knowledge base, you can comment out after first run\n    # Set recreate to True to recreate the knowledge base if needed\n    agent.knowledge.load(recreate=False)\n    agent.print_response(\n        \"What are the two books listed in the 'agent_knowledge'\",\n        stream=True,\n        show_full_reasoning=True,\n        stream_intermediate_steps=True,\n    )<\/code><\/pre>\n<figure class=\"wp-block-image size-full is-resized\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/contributor.insightmediagroup.io\/wp-content\/uploads\/2025\/04\/image-220.png?ssl=1\" alt=\"\" class=\"wp-image-602884\" style=\"width:680px;height:auto\"><figcaption class=\"wp-element-caption\">Response from the agent after searching the knowledge base. Image by the author.<\/figcaption><\/figure>\n<h2 class=\"wp-block-heading\">Agent with Memory<\/h2>\n<p class=\"wp-block-paragraph\">The last type we will go over in this post is the agent with memory. <\/p>\n<p class=\"wp-block-paragraph\">This type of agent can store and retrieve information about users from previous interactions, allowing it to learn user preferences and personalize its responses.<\/p>\n<p class=\"wp-block-paragraph\">Let\u2019s see this example where I will tell a couple of things to the agent and ask for recommendations based on that interaction.<\/p>\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-python\"># imports\nimport os\nfrom agno.agent import Agent\nfrom agno.memory.v2.db.sqlite import SqliteMemoryDb\nfrom agno.memory.v2.memory import Memory\nfrom agno.models.google import Gemini\nfrom rich.pretty import pprint\n\n# User Name\nuser_id = \"data_scientist\"\n\n# Creating a memory database\nmemory = Memory(\n    db=SqliteMemoryDb(table_name=\"memory\", \n                      db_file=\"tmp\/memory.db\"),\n    model=Gemini(id=\"gemini-2.0-flash\", \n                 api_key=os.environ.get(\"GEMINI_API_KEY\"))\n                 )\n\n# Clear the memory before start\nmemory.clear()\n\n# Create the agent\nagent = Agent(\n    model=Gemini(id=\"gemini-2.0-flash\", api_key=os.environ.get(\"GEMINI_API_KEY\")),\n    user_id=user_id,\n    memory=memory,\n    # Enable the Agent to dynamically create and manage user memories\n    enable_agentic_memory=True,\n    add_datetime_to_instructions=True,\n    markdown=True,\n)\n\n\n# Run the code\nif __name__ == \"__main__\":\n    agent.print_response(\"My name is Gustavo and I am a Data Scientist learning about AI Agents.\")\n    memories = memory.get_user_memories(user_id=user_id)\n    print(f\"Memories about {user_id}:\")\n    pprint(memories)\n    agent.print_response(\"What topic should I study about?\")\n    agent.print_response(\"I write articles for Towards Data Science.\")\n    print(f\"Memories about {user_id}:\")\n    pprint(memories)\n    agent.print_response(\"Where should I post my next article?\")<\/code><\/pre>\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/contributor.insightmediagroup.io\/wp-content\/uploads\/2025\/04\/output3.gif?ssl=1\" alt=\"\" class=\"wp-image-602890\"><figcaption class=\"wp-element-caption\">Example of AI Agent with memory. Image by the author.<\/figcaption><\/figure>\n<p class=\"wp-block-paragraph\">And here we end this first post about AI Agents.<\/p>\n<h2 class=\"wp-block-heading\">Before You Go<\/h2>\n<p class=\"wp-block-paragraph\">There\u2019s a lot of content in this post. We climbed the first step in this ladder of learning about AI agents. I know, it is overwhelming. There is so much information out there that it becomes harder and harder to know where to start and what to study.<\/p>\n<p class=\"wp-block-paragraph\">My suggestion is to take the same road I am taking. One step at a time, choosing just a couple of packages like Agno, CrewAI, and going deep on those, learning how to create more complex agents each time.<\/p>\n<p class=\"wp-block-paragraph\">In this post, we started from scratch, learning how to simply interact with an LLM to creating agents with memory, or even creating a simple RAG for an AI Agent.<\/p>\n<p class=\"wp-block-paragraph\">Obviously, there is much more you can do just with a single agent. Check out the Reference [4].<\/p>\n<p class=\"wp-block-paragraph\">With these simple skills, be sure that you are ahead of a lot of people, and there is a lot you can do already. Just use the creativity and (why not?) ask for the help of an LLM to build something cool!<\/p>\n<p class=\"wp-block-paragraph\">In the next post, we will learn more about agents and evaluation. Stay tuned!<\/p>\n<h3 class=\"wp-block-heading\">GitHub Repository<\/h3>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/gurezende\/agno-ai-labs\">https:\/\/github.com\/gurezende\/agno-ai-labs<\/a><\/p>\n<h3 class=\"wp-block-heading\">Contact and Online Presence<\/h3>\n<p class=\"wp-block-paragraph\">If you liked this content, find more of my work and social media in my website:<\/p>\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/gustavorsantos.me\/\">https:\/\/gustavorsantos.me<\/a><\/p>\n<h2 class=\"wp-block-heading\">References<\/h2>\n<p class=\"wp-block-paragraph\">[1] <a href=\"https:\/\/docs.agno.com\/introduction\">https:\/\/docs.agno.com\/introduction<\/a><\/p>\n<p class=\"wp-block-paragraph\">[2] <a href=\"https:\/\/ai.google.dev\/gemini-api\/docs\">https:\/\/ai.google.dev\/gemini-api\/docs<\/a><\/p>\n<p class=\"wp-block-paragraph\">[3] <a href=\"https:\/\/pypi.org\/project\/youtube-transcript-api\/\">https:\/\/pypi.org\/project\/youtube-transcript-api\/<\/a><\/p>\n<p class=\"wp-block-paragraph\">[4] <a href=\"https:\/\/github.com\/agno-agi\/agno\/tree\/main\/cookbook\">https:\/\/github.com\/agno-agi\/agno\/tree\/main\/cookbook<\/a><\/p>\n<p class=\"wp-block-paragraph\">[5] <a href=\"https:\/\/docs.agno.com\/introduction\/agents#agent-with-knowledge\">https:\/\/docs.agno.com\/introduction\/agents#agent-with-knowledge<\/a><\/p>\n<p class=\"wp-block-paragraph\">\n<p>The post <a href=\"https:\/\/towardsdatascience.com\/agentic-ai-101-starting-your-journey-building-ai-agents\/\">Agentic AI 101: Starting Your Journey Building AI Agents<\/a> appeared first on <a href=\"https:\/\/towardsdatascience.com\/\">Towards Data Science<\/a>.<\/p>\n<\/div>\n<p> \t<BR><br \/>\n <BR><\/BR><br \/>\n    Gustavo Santos<br \/>\n \t<BR><br \/>\n<BR><\/BR><br \/>\n<a href=\"https:\/\/towardsdatascience.com\/agentic-ai-101-starting-your-journey-building-ai-agents\/\">Go to original source<\/a><br \/>\n \t<BR><br \/>\n <BR><\/BR><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Agentic AI 101: Starting Your Journey Building AI Agents Introduction The Artificial Intelligence industry is moving fast. It is impressive and many times overwhelming. I have been studying, learning, and building my foundations in this area of Data Science because I believe that the future of Data Science is strongly correlated with the development of [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[678,799,62,69,83,87,160],"tags":[1140,98,104],"class_list":["post-3512","post","type-post","status-publish","format-standard","hentry","category-agentic-ai","category-ai-agent","category-aimldsaimlds","category-artificial-intelligence","category-data-science","category-llm","category-programming","tag-agents","tag-ai","tag-just"],"_links":{"self":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/posts\/3512"}],"collection":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/comments?post=3512"}],"version-history":[{"count":0,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/posts\/3512\/revisions"}],"wp:attachment":[{"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/media?parent=3512"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/categories?post=3512"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mailitics.com\/index.php\/wp-json\/wp\/v2\/tags?post=3512"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}