@ -21,7 +21,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 1 ,
"execution_count": 8 ,
"id": "ac561cc4",
"id": "ac561cc4",
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
@ -32,7 +32,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 2 ,
"execution_count": 9 ,
"id": "07e96d99",
"id": "07e96d99",
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
@ -43,16 +43,16 @@
"db = SQLDatabase.from_uri(\"sqlite:///../../../notebooks/Chinook.db\")\n",
"db = SQLDatabase.from_uri(\"sqlite:///../../../notebooks/Chinook.db\")\n",
"db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)\n",
"db_chain = SQLDatabaseChain(llm=llm, database=db, verbose=True)\n",
"tools = [\n",
"tools = [\n",
" Tool(\n",
"# Tool(\n",
" name = \"Search\",\n",
"# name = \"Search\",\n",
" func=search.run,\n",
"# func=search.run,\n",
" description=\"useful for when you need to answer questions about current events\"\n",
"# description=\"useful for when you need to answer questions about current events\"\n",
" ),\n",
"# ),\n",
" Tool(\n",
"# Tool(\n",
" name=\"Calculator\",\n",
"# name=\"Calculator\",\n",
" func=llm_math_chain.run,\n",
"# func=llm_math_chain.run,\n",
" description=\"useful for when you need to answer questions about math\"\n",
"# description=\"useful for when you need to answer questions about math\"\n",
" ),\n",
"# ),\n",
" Tool(\n",
" Tool(\n",
" name=\"FooBar DB\",\n",
" name=\"FooBar DB\",\n",
" func=db_chain.run,\n",
" func=db_chain.run,\n",
@ -63,7 +63,7 @@
},
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 3 ,
"execution_count": 10 ,
"id": "a069c4b6",
"id": "a069c4b6",
"metadata": {},
"metadata": {},
"outputs": [],
"outputs": [],
@ -71,6 +71,153 @@
"mrkl = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)"
"mrkl = initialize_agent(tools, llm, agent=\"zero-shot-react-description\", verbose=True)"
]
]
},
},
{
"cell_type": "code",
"execution_count": 11,
"id": "356a1396",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"\u001b[1m> Entering new chain...\u001b[0m\n",
"What was our total number of sales and total revenue in 2013?\n",
"Thought:\u001b[32;1m\u001b[1;3m I need to find out how many sales and how much revenue we had in 2013\n",
"Action: FooBar DB\n",
"Action Input: sales 2013\u001b[0m\n",
"\n",
"\u001b[1m> Entering new chain...\u001b[0m\n",
"sales 2013\n",
"SQLQuery:\u001b[32;1m\u001b[1;3m SELECT SUM(Total) FROM Invoice WHERE InvoiceDate BETWEEN '2013-01-01' AND '2013-12-31'\u001b[0m\n",
"SQLResult: \u001b[33;1m\u001b[1;3m[(450.58000000000027,)]\u001b[0m\n",
"Answer:\u001b[32;1m\u001b[1;3m 450.58\u001b[0m\n",
"\u001b[1m> Finished chain.\u001b[0m\n",
"\n",
"Observation: \u001b[36;1m\u001b[1;3m 450.58\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I need to find out how many sales and how much revenue we had in 2013\n",
"Action: FooBar DB\n",
"Action Input: revenue 2013\u001b[0m\n",
"\n",
"\u001b[1m> Entering new chain...\u001b[0m\n",
"revenue 2013\n",
"SQLQuery:\u001b[32;1m\u001b[1;3m SELECT SUM(Total) FROM Invoice WHERE strftime('%Y', InvoiceDate) = '2013'\u001b[0m\n",
"SQLResult: \u001b[33;1m\u001b[1;3m[(450.58000000000027,)]\u001b[0m\n",
"Answer:\u001b[32;1m\u001b[1;3m 450.58\u001b[0m\n",
"\u001b[1m> Finished chain.\u001b[0m\n",
"\n",
"Observation: \u001b[36;1m\u001b[1;3m 450.58\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
"Final Answer: We had 450.58 sales and 450.58 revenue in 2013\u001b[0m\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'We had 450.58 sales and 450.58 revenue in 2013'"
]
},
"execution_count": 11,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"mrkl.run(\"What was our total number of sales and total revenue in 2013?\")"
]
},
{
"cell_type": "code",
"execution_count": 18,
"id": "4e9c9b23",
"metadata": {},
"outputs": [],
"source": [
"from langchain.agents import ZeroShotAgent\n",
"from langchain import PromptTemplate\n",
"from langchain import LLMChain\n",
"TEMPLATE = \"\"\"You are a data engineer answering questions using a SQL database.\n",
"\n",
"Given an input question, first create a syntactically correct {dialect} query to run, then look at the results of the query and return the answer. If a previous query produced an error, do NOT try it again.\n",
"\n",
"Only use the following tables:\n",
"\n",
"{table_info}\n",
"\n",
"Use the following format:\n",
"\n",
"Question: the input question you must answer\n",
"Thought: you should always think about what to do\n",
"Action: SQLDB\n",
"Action Input: the query to run against the SQL database\n",
"Observation: the result of the action\n",
"... (this Thought/Action/Action Input/Observation can repeat N times)\n",
"Thought: I now know the final answer\n",
"Final Answer: the final answer to the original input question\n",
"\n",
"Begin!\n",
"\n",
"Question: {{input}}\"\"\".format(**{\n",
" \"dialect\": db.dialect,\n",
" \"table_info\": db.table_info})\n",
"prompt = PromptTemplate(template=TEMPLATE, input_variables=[\"input\"])"
]
},
{
"cell_type": "code",
"execution_count": 19,
"id": "a6fb1b4f",
"metadata": {},
"outputs": [],
"source": [
"llm_chain = LLMChain(llm=llm, prompt=prompt)\n",
"tools = [\n",
" Tool(\"SQLDB\", db.run, \"foo\")\n",
"]\n",
"agent = ZeroShotAgent(llm_chain=llm_chain, tools=tools, verbose=True)"
]
},
{
"cell_type": "code",
"execution_count": 20,
"id": "64578802",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"\n",
"\u001b[1m> Entering new chain...\u001b[0m\n",
"What was our total number of sales and total revenue in 2013?\n",
"Thought:\u001b[32;1m\u001b[1;3m I need to find the total number of sales and total revenue\n",
"Action: SQLDB\n",
"Action Input: SELECT SUM(Total) AS \"Total Sales\", SUM(Total) AS \"Total Revenue\" FROM Invoice WHERE InvoiceDate LIKE '2013%'\u001b[0m\n",
"Observation: \u001b[36;1m\u001b[1;3m[(450.58000000000027, 450.58000000000027)]\u001b[0m\n",
"Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
"Final Answer: 450.58\u001b[0m\n",
"\u001b[1m> Finished chain.\u001b[0m\n"
]
},
{
"data": {
"text/plain": [
"'450.58'"
]
},
"execution_count": 20,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"agent.run(\"What was our total number of sales and total revenue in 2013?\")"
]
},
{
{
"cell_type": "code",
"cell_type": "code",
"execution_count": 4,
"execution_count": 4,