{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# File System\n", "\n", "LangChain provides tools for interacting with a local file system out of the box. This notebook walks through some of them.\n", "\n", "**Note:** these tools are not recommended for use outside a sandboxed environment! " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First, we'll import the tools." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "tags": [] }, "outputs": [], "source": [ "from langchain.tools.file_management import (\n", " ReadFileTool,\n", " CopyFileTool,\n", " DeleteFileTool,\n", " MoveFileTool,\n", " WriteFileTool,\n", " ListDirectoryTool,\n", ")\n", "from langchain.agents.agent_toolkits import FileManagementToolkit\n", "from tempfile import TemporaryDirectory\n", "\n", "# We'll make a temporary directory to avoid clutter\n", "working_directory = TemporaryDirectory()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The FileManagementToolkit\n", "\n", "If you want to provide all the file tooling to your agent, it's easy to do so with the toolkit. We'll pass the temporary directory in as a root directory as a workspace for the LLM.\n", "\n", "It's recommended to always pass in a root directory, since without one, it's easy for the LLM to pollute the working directory, and without one, there isn't any validation against\n", "straightforward prompt injection." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[CopyFileTool(name='copy_file', description='Create a copy of a file in a specified location', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " DeleteFileTool(name='file_delete', description='Delete a file', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " FileSearchTool(name='file_search', description='Recursively search for files in a subdirectory that match the regex pattern', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " MoveFileTool(name='move_file', description='Move or rename a file from one location to another', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " ReadFileTool(name='read_file', description='Read file from disk', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " WriteFileTool(name='write_file', description='Write file to disk', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " ListDirectoryTool(name='list_directory', description='List files and directories in a specified folder', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug')]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "toolkit = FileManagementToolkit(\n", " root_dir=str(working_directory.name)\n", ") # If you don't provide a root_dir, operations will default to the current working directory\n", "toolkit.get_tools()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Selecting File System Tools\n", "\n", "If you only want to select certain tools, you can pass them in as arguments when initializing the toolkit, or you can individually initialize the desired tools." ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[ReadFileTool(name='read_file', description='Read file from disk', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " WriteFileTool(name='write_file', description='Write file to disk', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),\n", " ListDirectoryTool(name='list_directory', description='List files and directories in a specified folder', args_schema=, return_direct=False, verbose=False, callback_manager=, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug')]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "tools = FileManagementToolkit(\n", " root_dir=str(working_directory.name),\n", " selected_tools=[\"read_file\", \"write_file\", \"list_directory\"],\n", ").get_tools()\n", "tools" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'File written successfully to example.txt.'" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "read_tool, write_tool, list_tool = tools\n", "write_tool.run({\"file_path\": \"example.txt\", \"text\": \"Hello World!\"})" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'example.txt'" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# List files in the working directory\n", "list_tool.run({})" ] }, { "cell_type": "code", "execution_count": null, "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.12" } }, "nbformat": 4, "nbformat_minor": 4 }