All right. So what was that? We just built a super interesting crew for support. But things can get even more interesting. On this lesson, we are going to use tools to build a customer outreach campaign. That's going to be super interesting because sales is a very common use case for multi-agent systems. So let's look into that real quick. Welcome back to our new lesson. We are talking about tools. Tools are such an important part of crewAI and of any multiple-agent system out there. Tools want to allow your agents to communicate with the external world, to get out of their bubble, of just chatting with themselves and actually perform actions have an actual impact on your flows, on your systems, on your users, and on your company. So it's a super key part that makes agents great. So what makes a great tool? What makes a tool set itself apart from another? Well, there is at least three things that we found from the many users that use crewAI that set tools apart from each other. The tools that are versatile, the tools, that are fault-tolerant, and the tools that implement caching. We're going to talk about each of those topics right now. So what it means for a tool to be versatile. Well first thing: the tool needs to be able to accept different kind of requests. The tool is the connection between the AI apps that have fuzzy inputs with the external world that have strong typed inputs. So your tool needs to be versatile enough so that it can handle the different things that the LLM might throw at them. So crewAI supports converting this arguments into the correct types, and they can handle the different nuances coming out of your agent. But if you're building it to yourself, you want to be sure that whatever the LLM sends your way, you want to treat it properly. You want to convert it to the appropriate type so that you can actually use it. So one big piece of making a great tool is making sure that it's versatile. It can handle different types of inputs. The second thing: is being fault-tolerant. This is a thing that a lot of people that were using AI agents early on realized that as your agent passes information to your tools, things might break and you going to get exceptions. If you get exceptions out of nowhere and you don't treat them right, you stop your crew right there because it stops the execution. And you don't want to do that. So you want to make sure that your tools can fail gracefully. So in case something goes wrong they can kind of self-heal crewAI actually implements that by default for you. So even if an exception happens when running a tool, instead of stopping the execution, it sends that message back to the agent so the agent can take action on that. Maybe it's the input. Maybe the agent should have sent a different kind of input. Maybe the agent had missed on a required argument, or maybe there was just another problem. But the important thing is that your tools should be self-healing and should fail gracefully in a way that doesn't stop your agent execution. This is something that we see a lot out there. When you deploy these agents at scale, especially in enterprise companies, you're going to have agents dealing with all sorts of documents and all sorts of sources for files and information. So you want to make sure that the tools are able to handle all that and able to handle when seeing something that they don't expect. We actually have seen this in some of our biggest users, where you're analyzing huge amounts of financial documents and sometimes the numbers might not be the easiest ones to read, or the text might not be the easiest one to parse. That aside, you want to make sure that your tools kind of work around that a little bit. All right. So you have a tool that is versatile and you have a tool that is fault-tolerant. That means that you got a lot of that job done. What about caching? Caching is key to making these tools worth it and usable in the real world. Whenever you have a tool, most of the times, that you is using to communicate it with the web. So it's going to call different APIs. It's going to call different services. Sometimes it's going to be internal services. Others are going to be external services. And whenever that call happens, you want to make sure that you're being mindful about taking the time to do the request and also not doing the request unless necessary. So having a caching layer that prevents unnecessary requests from happening is crucial to make sure that you're building optimal crews. So you want to make sure that you have not only cache but you have a smart cache. So in crewAI we offer cross-agent caching. What that means is that if one agent tried to use a tool with a given set of arguments, and another agent try to use the same tool with the same set of arguments, even if they're different agents, they're going to actually use a cache layer. So the second time they try to use a tool, they're not going to do that API call. That makes a lot of difference. That prevents unnecessary requests, that prevents hitting rate limits, unnecessary consumptions, and also saving the execution time. Making sure that you're crews in your multiple agent systems run faster. So caching is super important when you're building crews that you need to run at scale. What are some examples of tools? Well, there's a bunch that we can talk about. There are the simple ones like search the internet or scrape a website, tools that we actually have used ourselves but goes beyond that. You also can connect to a database. You can call an API, you can send notification and many, many more. So you can see here how tools are such a cornerstone. And that is the case for all the frameworks out there, including crewAI. Showing, crewAI tools are such an important piece that crew offers a bunch of them out of the gate that you can use. So whenever you have the time in the future when building your own tools, make sure to check crewAI's documentation where you're going to find all the documentation for all the existing tools in there. Also, another thing that's important to highlight is that crewAI supports all LangChain tools, so LangChain can also offer a huge set of existing tools and you can use them right away. We share crews using crewAI. So just another thing to highlight. But enough of that. Let's jump into some code and see how we can build some tools together.