forked from Archives/langchain
985496f4be
Big docs refactor! Motivation is to make it easier for people to find resources they are looking for. To accomplish this, there are now three main sections: - Getting Started: steps for getting started, walking through most core functionality - Modules: these are different modules of functionality that langchain provides. Each part here has a "getting started", "how to", "key concepts" and "reference" section (except in a few select cases where it didnt easily fit). - Use Cases: this is to separate use cases (like summarization, question answering, evaluation, etc) from the modules, and provide a different entry point to the code base. There is also a full reference section, as well as extra resources (glossary, gallery, etc) Co-authored-by: Shreya Rajpal <ShreyaR@users.noreply.github.com>
212 lines
7.3 KiB
Plaintext
212 lines
7.3 KiB
Plaintext
{
|
|
"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, SerpAPIWrapper, SQLDatabase, SQLDatabaseChain\n",
|
|
"from langchain.agents import initialize_agent, Tool"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 3,
|
|
"id": "07e96d99",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"llm = OpenAI(temperature=0)\n",
|
|
"search = SerpAPIWrapper()\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. You should ask targeted questions\"\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 containing full context\"\n",
|
|
" )\n",
|
|
"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 4,
|
|
"id": "a069c4b6",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"mrkl = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 5,
|
|
"id": "e603cd7d",
|
|
"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: \"Who is Olivia Wilde's boyfriend?\"\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mHarry Styles\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I need to find out Harry Styles' age\n",
|
|
"Action: Search\n",
|
|
"Action Input: \"How old is Harry Styles?\"\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",
|
|
"```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 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 is 28 years old and his age raised to the 0.23 power is 2.1520202182226886.'"
|
|
]
|
|
},
|
|
"execution_count": 5,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"mrkl.run(\"Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 6,
|
|
"id": "a5c07010",
|
|
"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 the artist's full name and then search the FooBar database for their albums.\n",
|
|
"Action: Search\n",
|
|
"Action Input: \"The Storm Before the Calm\" artist\u001b[0m\n",
|
|
"Observation: \u001b[36;1m\u001b[1;3mAlanis Morissette - the storm before the calm - Amazon.com Music.\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I now need to search the FooBar database for Alanis Morissette's albums.\n",
|
|
"Action: FooBar DB\n",
|
|
"Action Input: What albums of Alanis Morissette are in the FooBar database?\u001b[0m\n",
|
|
"\n",
|
|
"\u001b[1m> Entering new SQLDatabaseChain chain...\u001b[0m\n",
|
|
"What albums of Alanis Morissette are in the FooBar database? \n",
|
|
"SQLQuery:\u001b[32;1m\u001b[1;3m SELECT Title FROM Album WHERE ArtistId IN (SELECT ArtistId FROM Artist WHERE 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 The album 'Jagged Little Pill' by Alanis Morissette is in the FooBar database.\u001b[0m\n",
|
|
"\u001b[1m> Finished SQLDatabaseChain chain.\u001b[0m\n",
|
|
"\n",
|
|
"Observation: \u001b[38;5;200m\u001b[1;3m The album 'Jagged Little Pill' by Alanis Morissette is in the FooBar database.\u001b[0m\n",
|
|
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer.\n",
|
|
"Final Answer: Alanis Morissette is the artist who recently released an album called 'The Storm Before the Calm' and the album 'Jagged Little Pill' by Alanis Morissette is in the FooBar database.\u001b[0m\n",
|
|
"\u001b[1m> Finished AgentExecutor chain.\u001b[0m\n"
|
|
]
|
|
},
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"\"Alanis Morissette is the artist who recently released an album called 'The Storm Before the Calm' and the album 'Jagged Little Pill' by Alanis Morissette is in the FooBar database.\""
|
|
]
|
|
},
|
|
"execution_count": 6,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
}
|
|
],
|
|
"source": [
|
|
"mrkl.run(\"What is the full name of the artist 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": "af016a70",
|
|
"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.9"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|