{ "cells": [ { "cell_type": "markdown", "id": "5436020b", "metadata": {}, "source": [ "# Defining Custom Tools\n", "\n", "When constructing your own agent, you will need to provide it with a list of Tools that it can use. A Tool is defined as below.\n", "\n", "```python\n", "class Tool(NamedTuple):\n", " \"\"\"Interface for tools.\"\"\"\n", "\n", " name: str\n", " func: Callable[[str], str]\n", " description: Optional[str] = None\n", "```\n", "\n", "The two required components of a Tool are the name and then the tool itself. A tool description is optional, as it is needed for some agents but not all." ] }, { "cell_type": "code", "execution_count": 2, "id": "1aaba18c", "metadata": {}, "outputs": [], "source": [ "# Import things that are needed generically\n", "from langchain.agents import initialize_agent, Tool\n", "from langchain.llms import OpenAI\n", "from langchain import LLMMathChain, SerpAPIWrapper" ] }, { "cell_type": "markdown", "id": "8e2c3874", "metadata": {}, "source": [ "Initialize the LLM to use for the agent." ] }, { "cell_type": "code", "execution_count": 4, "id": "36ed392e", "metadata": {}, "outputs": [], "source": [ "llm = OpenAI(temperature=0)" ] }, { "cell_type": "code", "execution_count": 5, "id": "56ff7670", "metadata": {}, "outputs": [], "source": [ "# Load the tool configs that are needed.\n", "search = SerpAPIWrapper()\n", "llm_math_chain = LLMMathChain(llm=llm, verbose=True)\n", "tools = [\n", " Tool(\n", " name = \"Search\",\n", " func=search.run,\n", " description=\"useful for when you need to answer questions about current events\"\n", " ),\n", " Tool(\n", " name=\"Calculator\",\n", " func=llm_math_chain.run,\n", " description=\"useful for when you need to answer questions about math\"\n", " )\n", "]" ] }, { "cell_type": "code", "execution_count": 6, "id": "5b93047d", "metadata": {}, "outputs": [], "source": [ "# Construct the agent. We will use the default agent type here.\n", "# See documentation for a full list of options.\n", "llm = OpenAI(temperature=0)\n", "agent = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)" ] }, { "cell_type": "code", "execution_count": 7, "id": "6f96a891", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n", "\u001b[32;1m\u001b[1;3m I need to find out who Olivia Wilde's boyfriend is and then calculate his age raised to the 0.23 power.\n", "Action: Search\n", "Action Input: Olivia Wilde's boyfriend\u001b[0m\n", "Observation: \u001b[36;1m\u001b[1;3mOlivia Wilde started dating Harry Styles after ending her years-long engagement to Jason Sudeikis — see their relationship timeline.\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I need to find out Harry Styles' age.\n", "Action: Search\n", "Action Input: Harry Styles age\u001b[0m\n", "Observation: \u001b[36;1m\u001b[1;3m28 years\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I need to calculate 28 raised to the 0.23 power.\n", "Action: Calculator\n", "Action Input: 28^0.23\u001b[0m\n", "\n", "\u001b[1m> Entering new LLMMathChain chain...\u001b[0m\n", "28^0.23\u001b[32;1m\u001b[1;3m\n", "\n", "```python\n", "import math\n", "print(math.pow(28, 0.23))\n", "```\n", "\u001b[0m\n", "Answer: \u001b[33;1m\u001b[1;3m2.1520202182226886\n", "\u001b[0m\n", "\u001b[1m> Finished LLMMathChain chain.\u001b[0m\n", "\n", "Observation: \u001b[33;1m\u001b[1;3mAnswer: 2.1520202182226886\n", "\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n", "Final Answer: Harry Styles, Olivia Wilde's boyfriend, is 28 years old and his age raised to the 0.23 power is 2.1520202182226886.\u001b[0m\n", "\u001b[1m> Finished AgentExecutor chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "\"Harry Styles, Olivia Wilde's boyfriend, is 28 years old and his age raised to the 0.23 power is 2.1520202182226886.\"" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "agent.run(\"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\")" ] }, { "cell_type": "code", "execution_count": null, "id": "e7776981", "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.8" } }, "nbformat": 4, "nbformat_minor": 5 }