主题
文件读取
FileReadTool旨在从本地文件系统读取文件。
概述
NOTE
我们仍在改进这些工具,因此未来可能会出现意外行为或变更。
FileReadTool 从本地文件系统读取文件内容,并以文本形式返回。 它适用于批量文本文件处理、读取运行时配置文件,以及为分析导入数据。 它支持任何基于文本的文件格式,例如 .txt、.csv、.json 和 .md。 内容始终以纯文本形式返回——解析内容(例如对 .json 文件使用 json.loads)由智能体或你自己的代码负责。
对于大文件,start_line 和 line_count 只读取一个行窗口,而不是加载整个文件。
安装
要使用此前归属于 FileReadTool 的功能,请安装 crewai_tools 包:
shell
pip install 'crewai[tools]'用法示例
要开始使用 FileReadTool:
python
from crewai_tools import FileReadTool
# Initialize the tool to read any file the agent knows or learns the path for
file_read_tool = FileReadTool()
# OR
# Initialize with a specific file path, so the agent reads that file by default
file_read_tool = FileReadTool(file_path='path/to/your/file.txt')
# Read a window of lines (lines 100-149) instead of the whole file
partial_content = file_read_tool.run(
file_path='path/to/your/file.txt',
start_line=100,
line_count=50,
)参数
智能体在运行时提供这些参数:
file_path:(可选)要读取的文件路径。接受绝对路径和相对路径。请确保文件存在,并且你拥有访问它所需的权限。省略该参数时,将读取构造时配置的默认文件;如果没有默认文件,工具会报告未提供路径。start_line:(可选)开始读取的行号(从 1 开始计数)。默认为1。line_count:(可选)要读取的行数。省略时,从start_line读取到文件末尾。
在构造工具时设置这些参数:
file_path:(可选)当智能体不带任何参数调用工具时读取的默认文件。base_dir:(可选)运行时路径必须位于其中的目录。默认为当前工作目录。encoding:(可选)用于解码文件的文本编码。默认为utf-8。
允许的路径
由于文件路径通常由 LLM 在运行时选择,因此读取操作被限制在沙箱内:
- 运行时提供的路径解析后必须位于
base_dir内,该目录默认为当前工作目录。..片段和符号链接会在检查之前解析,因此无法用它们逃逸。 - 传给构造函数的
file_path属于开发者声明的意图,因此它始终可以绕过包含性检查——即使在base_dir之外。读取本身仍可能失败,例如文件不存在、是目录或没有权限。它在构建工具时即被固定,因此之后更改工作目录不会重新指向它,智能体可以通过省略file_path或使用工具描述中显示的名称来访问它。声明一个文件并不会暴露它的同级文件。
要允许智能体读取工作目录之外的目录树,请将 base_dir 指向该目录:
python
# The agent may read anything under /data, and nothing outside it
file_read_tool = FileReadTool(base_dir='/data')作为最后手段,设置 CREWAI_TOOLS_ALLOW_UNSAFE_PATHS=true 会禁用路径校验。该设置在整个进程范围内对所有 crewai-tools 工具生效,包括对 URL 抓取工具的 SSRF 防护,因此优先使用 base_dir。托管 worker 应设置 CREWAI_TOOLS_FORCE_SAFE_PATHS=true,这样租户就无法通过导出这个逃生开关来禁用这些检查。