{ "cells": [ { "cell_type": "markdown", "id": "f1390152", "metadata": {}, "source": [ "# MRKL\n", "\n", "This notebook showcases using an agent to replicate the MRKL chain." ] }, { "cell_type": "markdown", "id": "39ea3638", "metadata": {}, "source": [ "This uses the example Chinook database.\n", "To set it up follow the instructions on https://database.guide/2-sample-databases-sqlite/, placing the `.db` file in a notebooks folder at the root of this repository." ] }, { "cell_type": "code", "execution_count": 1, "id": "ac561cc4", "metadata": {}, "outputs": [], "source": [ "from langchain import LLMMathChain, OpenAI, SerpAPIChain, SQLDatabase, SQLDatabaseChain\n", "from langchain.agents import initialize_agent, Tool" ] }, { "cell_type": "code", "execution_count": 2, "id": "07e96d99", "metadata": {}, "outputs": [], "source": [ "llm = OpenAI(temperature=0)\n", "search = SerpAPIChain()\n", "llm_math_chain = LLMMathChain(llm=llm, verbose=True)\n", "db = SQLDatabase.from_uri(\"sqlite:///../../../notebooks/Chinook.db\")\n", "db_chain = SQLDatabaseChain(llm=llm, database=db, 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", " Tool(\n", " name=\"FooBar DB\",\n", " func=db_chain.run,\n", " description=\"useful for when you need to answer questions about FooBar. Input should be in the form of a question\"\n", " )\n", "]" ] }, { "cell_type": "code", "execution_count": 3, "id": "a069c4b6", "metadata": {}, "outputs": [], "source": [ "mrkl = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)" ] }, { "cell_type": "code", "execution_count": 4, "id": "e603cd7d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "What is the age of Olivia Wilde's boyfriend raised to the 0.23 power?\n", "Thought:\u001b[32;1m\u001b[1;3m I need to find the age of Olivia Wilde's boyfriend\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 the age of Harry Styles\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 to the 0.23 power\n", "Action: Calculator\n", "Action Input: 28^0.23\u001b[0m\n", "\n", "\u001b[1m> Entering new chain...\u001b[0m\n", "28^0.23\u001b[32;1m\u001b[1;3m\n", "\n", "```python\n", "print(28**0.23)\n", "```\n", "\u001b[0m\n", "Answer: \u001b[33;1m\u001b[1;3m2.1520202182226886\n", "\u001b[0m\n", "\u001b[1m> Finished 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: 2.1520202182226886\u001b[0m" ] }, { "data": { "text/plain": [ "'2.1520202182226886'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mrkl.run(\"What is the age of Olivia Wilde's boyfriend raised to the 0.23 power?\")" ] }, { "cell_type": "code", "execution_count": 5, "id": "a5c07010", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Who recently released an album called 'The Storm Before the Calm' and are they in the FooBar database? If so, what albums of theirs are in the FooBar database?\n", "Thought:\u001b[32;1m\u001b[1;3m I need to find an album called 'The Storm Before the Calm'\n", "Action: Search\n", "Action Input: \"The Storm Before the Calm album\"\u001b[0m\n", "Observation: \u001b[36;1m\u001b[1;3mThe Storm Before the Calm (stylized in all lowercase) is the tenth (and eighth international) studio album by Canadian-American singer-songwriter Alanis ...\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I need to check if Alanis is in the FooBar database\n", "Action: FooBar DB\n", "Action Input: \"Does Alanis Morissette exist in the FooBar database?\"\u001b[0m\n", "\n", "\u001b[1m> Entering new chain...\u001b[0m\n", "Does Alanis Morissette exist in the FooBar database?\n", "SQLQuery:\u001b[32;1m\u001b[1;3m SELECT * FROM Artist WHERE Name = 'Alanis Morissette'\u001b[0m\n", "SQLResult: \u001b[33;1m\u001b[1;3m[(4, 'Alanis Morissette')]\u001b[0m\n", "Answer:\u001b[32;1m\u001b[1;3m Yes\u001b[0m\n", "\u001b[1m> Finished chain.\u001b[0m\n", "\n", "Observation: \u001b[38;5;200m\u001b[1;3m Yes\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I need to find out what albums of Alanis's are in the FooBar database\n", "Action: FooBar DB\n", "Action Input: \"What albums by Alanis Morissette are in the FooBar database?\"\u001b[0m\n", "\n", "\u001b[1m> Entering new chain...\u001b[0m\n", "What albums by Alanis Morissette are in the FooBar database?\n", "SQLQuery:\u001b[32;1m\u001b[1;3m SELECT Album.Title FROM Album JOIN Artist ON Album.ArtistId = Artist.ArtistId WHERE Artist.Name = 'Alanis Morissette'\u001b[0m\n", "SQLResult: \u001b[33;1m\u001b[1;3m[('Jagged Little Pill',)]\u001b[0m\n", "Answer:\u001b[32;1m\u001b[1;3m Jagged Little Pill\u001b[0m\n", "\u001b[1m> Finished chain.\u001b[0m\n", "\n", "Observation: \u001b[38;5;200m\u001b[1;3m Jagged Little Pill\u001b[0m\n", "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n", "Final Answer: The album is by Alanis Morissette and the albums in the FooBar database by her are Jagged Little Pill\u001b[0m" ] }, { "data": { "text/plain": [ "'The album is by Alanis Morissette and the albums in the FooBar database by her are Jagged Little Pill'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mrkl.run(\"Who recently released an album called 'The Storm Before the Calm' and are they in the FooBar database? If so, what albums of theirs are in the FooBar database?\")" ] }, { "cell_type": "code", "execution_count": null, "id": "d7c2e6ac", "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.7.6" } }, "nbformat": 4, "nbformat_minor": 5 }