@ 文件提及功能允许你在对话中直接引用项目文件,Blade 会自动读取文件内容并作为上下文发送给 AI。
在消息中使用 @ 引用文件:
请帮我分析 @src/agent/Agent.ts 中的错误处理逻辑
输入 @ 后会自动显示文件建议列表,使用方向键选择,Tab 确认。
| 语法 | 说明 | 示例 |
|---|---|---|
@path |
裸路径 | @src/index.ts |
@"path" |
带引号路径(有空格) | @"my file.ts" |
@path#L10 |
单行引用 | @config.json#L5 |
@path#L10-20 |
行范围引用 | @agent.ts#L100-150 |
@directory/ |
目录引用 | @src/utils/ |
帮我分析 @src/agent/Agent.ts 中的错误处理逻辑
解释 @src/agent/Agent.ts#L100-150 这段代码的作用
对比 @src/agent/Agent.ts 和 @src/agent/ExecutionEngine.ts 的实现差异
分析 @src/utils/ 目录下的工具函数
基于 @package.json 和 @tsconfig.json 的配置,帮我优化 @src/index.ts 的导入语句
相对于当前工作目录解析:
@src/agent.ts → /project/src/agent.ts
必须在工作区内:
@/Users/you/project/src/agent.ts → ✅ 允许(在工作区内)
@/etc/passwd → ❌ 拒绝(在工作区外)
禁止使用 .. 跳出工作区:
@../../etc/passwd → ❌ 拒绝
以下路径被禁止访问:
| 路径 | 原因 |
|---|---|
.git/ |
Git 仓库目录 |
.blade/ |
Blade 配置目录 |
node_modules/ |
依赖包目录 |
.env, .env.local |
环境变量文件 |
| 限制项 | 默认值 |
|---|---|
| 最大文件大小 | 1 MB |
| 最大行数 | 2000 行 |
| 最大目录文件数 | 50 个 |
超过限制会自动截断或省略。
使用行号引用时,Blade 会:
- 自动添加行号前缀
- 验证行号范围是否有效
- 在文件内容前显示元数据
输出示例:
<file path="src/agent.ts" range=" (lines 100-150)">
100: export class Agent {
101: private config: Config;
102: ...
150: }
</file>一次对话中可以引用多个文件:
基于 @package.json 和 @tsconfig.json 的配置,
帮我优化 @src/index.ts 的导入语句
Blade 会按顺序读取所有文件,并将内容一起发送给 AI。
Blade 会缓存读取的文件内容(60 秒):
- ✅ 同一文件在 60 秒内重复引用会命中缓存
- ✅ 不同行号范围会重新读取
- ✅ 文件修改后下次引用会自动刷新
blade --permission-mode plan
# 然后在对话中:
基于 @README.md 的说明,制定一个实现计划读取 @src/config.ts,然后使用 Write 工具创建一个类似的配置模板
可能原因:
- 文件不存在 - 检查路径拼写
- 在受限目录 - 尝试访问
.git、node_modules等 - 路径遍历 - 使用了
..跳出工作区 - 文件过大 - 超过 1 MB 限制
使用双引号包裹路径:
@"my folder/my file.ts"
文件内容会追加到消息中,Token 消耗取决于文件大小:
- 粗略估算:1 Token ≈ 4 字符
- 建议:使用行号范围引用减少 Token 消耗
不支持。Blade 只能读取文本文件。
出于性能考虑,目录引用限制为最多 50 个文件。建议:
- 引用更具体的子目录
- 直接引用需要的文件
@ 提及处理后的消息格式:
原始消息内容
<system-reminder>
The following files were mentioned with @ syntax:
<file path="src/agent.ts" range=" (lines 100-150)">
100: export class Agent {
101: ...
</file>
</system-reminder>如果某个文件读取失败:
- 继续处理其他文件
- 在消息末尾追加错误信息
- 不会中断对话流程