Skip to main content

文件系统工具 (File System Tools)

LangChain提供了与本地文件系统交互的工具。本文将介绍其中的一些工具。

注意:不建议在非沙盒环境中使用这些工具!

首先,我们将导入这些工具。

from langchain.tools.file_management import (
ReadFileTool,
CopyFileTool,
DeleteFileTool,
MoveFileTool,
WriteFileTool,
ListDirectoryTool,
)
from langchain.agents.agent_toolkits import FileManagementToolkit
from tempfile import TemporaryDirectory

# 我们将创建一个临时目录以避免混乱
working_directory = TemporaryDirectory()

文件管理工具包 (The FileManagementToolkit)

如果您想为您的代理提供所有的文件工具,使用工具包非常简单。我们将临时目录作为根目录传递给LLM作为工作空间。

建议始终传入一个根目录,因为如果没有根目录,LLM很容易污染工作目录,并且没有根目录,就没有对简单提示注入的验证。

toolkit = FileManagementToolkit(
root_dir=str(working_directory.name)
) # 如果您不提供root_dir,操作将默认为当前工作目录
toolkit.get_tools()
    [CopyFileTool(name='copy_file', description='在指定位置创建文件的副本', args_schema=<class 'langchain.tools.file_management.copy.FileCopyInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
DeleteFileTool(name='file_delete', description='删除文件', args_schema=<class 'langchain.tools.file_management.delete.FileDeleteInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
FileSearchTool(name='file_search', description='在子目录中递归搜索与正则表达式模式匹配的文件', args_schema=<class 'langchain.tools.file_management.file_search.FileSearchInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
MoveFileTool(name='move_file', description='将文件从一个位置移动或重命名到另一个位置', args_schema=<class 'langchain.tools.file_management.move.FileMoveInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
ReadFileTool(name='read_file', description='从磁盘读取文件', args_schema=<class 'langchain.tools.file_management.read.ReadFileInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
WriteFileTool(name='write_file', description='将文件写入磁盘', args_schema=<class 'langchain.tools.file_management.write.WriteFileInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
ListDirectoryTool(name='list_directory', description='列出指定文件夹中的文件和目录', args_schema=<class 'langchain.tools.file_management.list_dir.DirectoryListingInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug')]

选择文件系统工具 (Selecting File System Tools)

如果您只想选择某些工具,可以在初始化工具包时将它们作为参数传递进去,或者可以单独初始化所需的工具。

tools = FileManagementToolkit(
root_dir=str(working_directory.name),
selected_tools=["read_file", "write_file", "list_directory"],
).get_tools()
tools
    [ReadFileTool(name='read_file', description='从磁盘读取文件', args_schema=<class 'langchain.tools.file_management.read.ReadFileInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
WriteFileTool(name='write_file', description='将文件写入磁盘', args_schema=<class 'langchain.tools.file_management.write.WriteFileInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug'),
ListDirectoryTool(name='list_directory', description='列出指定文件夹中的文件和目录', args_schema=<class 'langchain.tools.file_management.list_dir.DirectoryListingInput'>, return_direct=False, verbose=False, callback_manager=<langchain.callbacks.shared.SharedCallbackManager object at 0x1156f4350>, root_dir='/var/folders/gf/6rnp_mbx5914kx7qmmh7xzmw0000gn/T/tmpxb8c3aug')]
read_tool, write_tool, list_tool = tools
write_tool.run({"file_path": "example.txt", "text": "Hello World!"})
    '文件已成功写入 example.txt。'
# 列出工作目录中的文件
list_tool.run({})
    'example.txt'