{ "cells": [ { "cell_type": "markdown", "id": "87455ddb", "metadata": {}, "source": [ "# Multi Input Tools\n", "\n", "This notebook shows how to use a tool that requires multiple inputs with an agent.\n", "\n", "The difficulty in doing so comes from the fact that an agent decides it's next step from a language model, which outputs a string. So if that step requires multiple inputs, they need to be parsed from that. Therefor, the currently supported way to do this is write a smaller wrapper function that parses that a string into multiple inputs.\n", "\n", "For a concrete example, let's work on giving an agent access to a multiplication function, which takes as input two integers. In order to use this, we will tell the agent to generate the \"Action Input\" as a comma separated list of length two. We will then write a thin wrapper that takes a string, splits it into two around a comma, and passes both parsed sides as integers to the multiplication function." ] }, { "cell_type": "code", "execution_count": 1, "id": "291149b6", "metadata": {}, "outputs": [], "source": [ "from langchain.llms import OpenAI\n", "from langchain.agents import initialize_agent, Tool" ] }, { "cell_type": "markdown", "id": "71b6bead", "metadata": {}, "source": [ "Here is the multiplication function, as well as a wrapper to parse a string as input." ] }, { "cell_type": "code", "execution_count": 2, "id": "f0b82020", "metadata": {}, "outputs": [], "source": [ "def multiplier(a, b):\n", " return a * b\n", "\n", "def parsing_multiplier(string):\n", " a, b = string.split(\",\")\n", " return multiplier(int(a), int(b))" ] }, { "cell_type": "code", "execution_count": 3, "id": "6db1d43f", "metadata": {}, "outputs": [], "source": [ "llm = OpenAI(temperature=0)\n", "tools = [\n", " Tool(\n", " name = \"Multiplier\",\n", " func=parsing_multiplier,\n", " description=\"useful for when you need to multiply two numbers together. The input to this tool should be a comma separated list of numbers of length two, representing the two numbers you want to multiply together. For example, `1,2` would be the input if you wanted to multiply 1 by 2.\"\n", " )\n", "]\n", "mrkl = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)" ] }, { "cell_type": "code", "execution_count": 4, "id": "aa25d0ca", "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 multiply two numbers\n", "Action: Multiplier\n", "Action Input: 3,4\u001b[0m\n", "Observation: \u001b[36;1m\u001b[1;3m12\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", "Final Answer: 3 times 4 is 12\u001b[0m\n", "\n", "\u001b[1m> Finished chain.\u001b[0m\n" ] }, { "data": { "text/plain": [ "'3 times 4 is 12'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mrkl.run(\"What is 3 times 4\")" ] }, { "cell_type": "code", "execution_count": null, "id": "7ea340c0", "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.9.1" }, "vscode": { "interpreter": { "hash": "b1677b440931f40d89ef8be7bf03acb108ce003de0ac9b18e8d43753ea2e7103" } } }, "nbformat": 4, "nbformat_minor": 5 }