Skip to content
CrewAI 文档版本 跟随上游 源快照 627d300e 更新于 2026-10-18

文件读取

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,这样租户就无法通过导出这个逃生开关来禁用这些检查。

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。