mirror of
				https://github.com/hwchase17/langchain.git
				synced 2025-11-04 10:10:09 +00:00 
			
		
		
		
	Add Multi-CSV/DF support in CSV and DataFrame Toolkits * CSV and DataFrame toolkits now accept list of CSVs/DFs * Add default prompts for many dataframes in `pandas_dataframe` toolkit Fixes #1958 Potentially fixes #4423 ## Testing * Add single and multi-dataframe integration tests for `pandas_dataframe` toolkit with permutations of `include_df_in_prompt` * Add single and multi-CSV integration tests for csv toolkit --------- Co-authored-by: Harrison Chase <hw.chase.17@gmail.com>
		
			
				
	
	
		
			252 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			252 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
{
 | 
						|
 "cells": [
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "id": "7094e328",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "# CSV Agent\n",
 | 
						|
    "\n",
 | 
						|
    "This notebook shows how to use agents to interact with a csv. It is mostly optimized for question answering.\n",
 | 
						|
    "\n",
 | 
						|
    "**NOTE: this agent calls the Pandas DataFrame agent under the hood, which in turn calls the Python agent, which executes LLM generated Python code - this can be bad if the LLM generated Python code is harmful. Use cautiously.**\n",
 | 
						|
    "\n"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 1,
 | 
						|
   "id": "827982c7",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "from langchain.agents import create_csv_agent"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 2,
 | 
						|
   "id": "caae0bec",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "from langchain.llms import OpenAI"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 4,
 | 
						|
   "id": "16c4dc59",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [],
 | 
						|
   "source": [
 | 
						|
    "agent = create_csv_agent(OpenAI(temperature=0), 'titanic.csv', verbose=True)"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 5,
 | 
						|
   "id": "46b9489d",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
 | 
						|
      "\u001b[32;1m\u001b[1;3mThought: I need to count the number of rows\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: df.shape[0]\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3m891\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
 | 
						|
      "Final Answer: There are 891 rows.\u001b[0m\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Finished chain.\u001b[0m\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "text/plain": [
 | 
						|
       "'There are 891 rows.'"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "execution_count": 5,
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "execute_result"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "agent.run(\"how many rows are there?\")"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 6,
 | 
						|
   "id": "a96309be",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
 | 
						|
      "\u001b[32;1m\u001b[1;3mThought: I need to count the number of people with more than 3 siblings\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: df[df['SibSp'] > 3].shape[0]\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3m30\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
 | 
						|
      "Final Answer: 30 people have more than 3 siblings.\u001b[0m\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Finished chain.\u001b[0m\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "text/plain": [
 | 
						|
       "'30 people have more than 3 siblings.'"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "execution_count": 6,
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "execute_result"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "agent.run(\"how many people have more than 3 siblings\")"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 7,
 | 
						|
   "id": "964a09f7",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
 | 
						|
      "\u001b[32;1m\u001b[1;3mThought: I need to calculate the average age first\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: df['Age'].mean()\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3m29.69911764705882\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I now need to calculate the square root of the average age\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: math.sqrt(df['Age'].mean())\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3mNameError(\"name 'math' is not defined\")\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I need to import the math library\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: import math\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3m\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I now need to calculate the square root of the average age\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: math.sqrt(df['Age'].mean())\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3m5.449689683556195\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
 | 
						|
      "Final Answer: 5.449689683556195\u001b[0m\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Finished chain.\u001b[0m\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "text/plain": [
 | 
						|
       "'5.449689683556195'"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "execution_count": 7,
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "execute_result"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "agent.run(\"whats the square root of the average age?\")"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "markdown",
 | 
						|
   "id": "09539c18",
 | 
						|
   "metadata": {},
 | 
						|
   "source": [
 | 
						|
    "### Multi CSV Example\n",
 | 
						|
    "\n",
 | 
						|
    "This next part shows how the agent can interact with multiple csv files passed in as a list."
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": 3,
 | 
						|
   "id": "15f11fbd",
 | 
						|
   "metadata": {},
 | 
						|
   "outputs": [
 | 
						|
    {
 | 
						|
     "name": "stdout",
 | 
						|
     "output_type": "stream",
 | 
						|
     "text": [
 | 
						|
      "\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Entering new AgentExecutor chain...\u001b[0m\n",
 | 
						|
      "\u001b[32;1m\u001b[1;3mThought: I need to compare the age columns in both dataframes\n",
 | 
						|
      "Action: python_repl_ast\n",
 | 
						|
      "Action Input: len(df1[df1['Age'] != df2['Age']])\u001b[0m\n",
 | 
						|
      "Observation: \u001b[36;1m\u001b[1;3m177\u001b[0m\n",
 | 
						|
      "Thought:\u001b[32;1m\u001b[1;3m I now know the final answer\n",
 | 
						|
      "Final Answer: 177 rows in the age column are different.\u001b[0m\n",
 | 
						|
      "\n",
 | 
						|
      "\u001b[1m> Finished chain.\u001b[0m\n"
 | 
						|
     ]
 | 
						|
    },
 | 
						|
    {
 | 
						|
     "data": {
 | 
						|
      "text/plain": [
 | 
						|
       "'177 rows in the age column are different.'"
 | 
						|
      ]
 | 
						|
     },
 | 
						|
     "execution_count": 3,
 | 
						|
     "metadata": {},
 | 
						|
     "output_type": "execute_result"
 | 
						|
    }
 | 
						|
   ],
 | 
						|
   "source": [
 | 
						|
    "agent = create_csv_agent(OpenAI(temperature=0), ['titanic.csv', 'titanic_age_fillna.csv'], verbose=True)\n",
 | 
						|
    "agent.run(\"how many rows in the age column are different?\")"
 | 
						|
   ]
 | 
						|
  },
 | 
						|
  {
 | 
						|
   "cell_type": "code",
 | 
						|
   "execution_count": null,
 | 
						|
   "id": "f2909808",
 | 
						|
   "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"
 | 
						|
  }
 | 
						|
 },
 | 
						|
 "nbformat": 4,
 | 
						|
 "nbformat_minor": 5
 | 
						|
}
 |