做 Agent 会用到的 Node API(1):路径与文件

发布时间:2026/9/23 14:18:17

做 Agent 会用到的 Node API(1):路径与文件 本系列讲实现 Agent harness 时脚下的 Node API按场景拆篇不当成 Node 全手册。示例仓库react-agent-mini若还不熟「Agent 主循环长什么样」可先看同仓库前作150 行搞懂 Agent 主循环本篇相关代码库工具 Read/Write · Agent Memory场景工具的手脚落在磁盘上Agent 要「读仓库、改文件、记偏好」最后都会碰到两件事路径怎么拼、怎么防逃出工作区文件怎么读、怎么写、写前要不要建目录在 Node 里这对应两个模块模块管什么node:path字符串层面的路径拼接、解析绝对路径、算相对关系node:fs/promises真正碰磁盘stat/readFile/writeFile/mkdir本篇只讲 Agent 里高频的那一小撮对照react-agent-mini的 Read / Write / Memory。1.path先把字符串变成「可信绝对路径」常用三个import{isAbsolute,relative,resolve,join,dirname}fromnode:pathresolve(cwd,inputPath)// 相对 → 绝对处理 . / ..relative(cwd,absolute)// 绝对相对 cwd 的相对串join(cwd,.agents,memory,MEMORY.md)// 纯拼接片段dirname(filePath)// 父目录给 mkdir 用Agent 里最关键的一招cwd 沙箱模型可能传../../etc/passwd。只靠「拼一下」不够要校验结果仍在工作区子树内export function resolvePathUnderCwd( inputPath: string, cwd process.cwd(), ): string { const absolute resolve(cwd, inputPath) const rel relative(cwd, absolute) if (rel.startsWith(..) || isAbsolute(rel)) { throw new Error(拒绝访问路径必须在当前工作目录内) } return absolute }要点resolve会消掉..所以必须再看relative结果rel.startsWith(..)还在往上爬isAbsolute(rel)Windows 上相对结果有时是另一盘符绝对路径也要拦Read / Write / Edit / Glob / Grep 都复用这一函数——路径规则写一次所有文件工具共用。Memory 则用join钉死约定路径不接受模型乱指join(cwd,.agents/memory/MEMORY.md)2.fs/promises异步读盘别阻塞事件循环Agent 一轮里可能连读多个文件用 Promise 版方便await进Tool.callimport{readFile,writeFile,stat,mkdir}fromnode:fs/promisesstat先问「是不是文件、有多大」constfileStatawaitstat(filePath)if(!fileStat.isFile())thrownewError(不是普通文件)if(fileStat.sizeMAX_READ_BYTES)thrownewError(文件过大)Read 在readFile之前做这件事避免把巨型二进制整份读进内存再报错。ENOENT不存在要转成对模型友好的文案而不是把堆栈塞进tool_resulttry{fileStatawaitstat(filePath)}catch(err){if(errtypeoferrobjectcodeinerrerr.codeENOENT){thrownewError(文件不存在:${args.file_path})}throwerr}readFile拿正文constcontentawaitreadFile(filePath,utf-8)指定utf-8得到string。Agent 文本工具几乎总是这么读二进制另议你们 MCP Resource 对 blob 是占位不塞 base64。writeFilemkdir写入与建父目录Write 的典型顺序awaitmkdir(dirname(filePath),{recursive:true})awaitwriteFile(filePath,args.content,utf-8)recursive: true父目录多层一次性建好Memory 启动时的ensureMemoryDirExists也是同一个mkdir(..., { recursive: true })方便模型直接 Write少一轮「先建目录」也可用stat判断「创建还是覆盖」给模型不同成功文案——但仍是覆盖写语义。3. 字节预算Buffer.byteLength截断「最多 32KB / 100KB」时不要用string.length那是 UTF-16 码元数。Memory 用的是Buffer.byteLength(content,utf-8)和readFile/writeFile的字节语义一致避免中文多字节把预算算爆。一张对照表Agent 需求Node API仓库里相对路径 → 绝对 防穿越resolverelativeisAbsoluteresolvePathUnderCwd约定死路径joinMemory / hooks / skills 发现父目录dirnameWrite 前 mkdir元信息 / 大小statRead 上限、mtime 刷新读文本readFile(..., utf-8)Read、加载 AGENTS/MEMORY写文本writeFileWrite、Edit 落盘建目录mkdir({ recursive: true })Write、ensure memory dir常见坑坑建议只resolve不校验模型可逃出 cwd必须relative检查用existsSync再读有竞态stat/readFile捕获ENOENT更干净同步fs.readFileSync塞进热路径拖住整条 Agent 事件循环工具里优先 promises用length当字节预算多字节字符不准用Buffer.byteLengthWindows 路径分隔符尽量交给path少手写/\拼接和主循环的关系主循环query()不关心磁盘工具层才碰path/fs。query → tool_use: Read → resolvePathUnderCwd → stat / readFile → tool_result 文本回模型所以学 Node 文件 API是在学Agent 的效应器不是在学 ReAct 本身。主循环仍是前作那 150 行本篇补的是「手脚怎么落地」。本系列下一篇预告2子进程Bash 与 Hooks 的壳——spawn、stdout/stderr、超时杀掉、跨平台 shell。你可以带走什么路径先沙箱再读写——resolverelative是文件类工具的安全带。promises 版 fs——和async call()同一套心智。先stat再读——类型、大小、是否存在一次问清。写入常配mkdir(recursive)——少让模型多走一轮建目录。预算按字节——Buffer.byteLength不是string.length。仓库与延伸GitHubreact-agent-mini本系列定位Agent 实现向的 Node API 笔记与 harness 设计系列分开前作主循环150 行搞懂 Agent 主循环相关实现ReadTool.ts · WriteTool.ts · memory/load.ts欢迎 Star、Issue 和 PR。本文为「做 Agent 会用到的 Node API」系列第 1 篇示例基于 react-agent-mini。
延伸阅读

更多相关文章

2026/9/21 19:04:07

AI算力盒子与DMA:从数据传输到边缘AI部署的技术解析

最近在技术社区和硬件圈子里,一个词被反复提及——“AI算力盒子”。乍一看,这似乎又是一个被热炒的概念,让人联想到那些层出不穷的“智能硬件”和“边缘计算盒子”。但当你深入去看,会发现很多讨论都把它和另一个经典的技术名词“…

2026/9/23 14:17:52

电商高并发场景下的JVM调优与多线程实践

1. 电商高并发场景的技术挑战电商大促期间的系统压力与普通场景存在本质区别。去年双11某头部电商平台的峰值数据显示,核心交易接口QPS突破50万,订单创建服务集群的瞬时线程数达到8000,内存中同时存活的订单对象超过2000万个。这种量级的并发…

2026/9/22 3:17:08

Inter字体:重新定义数字时代的文字可读性标准

Inter字体:重新定义数字时代的文字可读性标准 【免费下载链接】inter The Inter font family 项目地址: https://gitcode.com/gh_mirrors/in/inter 在像素密度日益增长的屏幕世界里,文字不再是简单的信息载体,而是用户体验的核心组成部…

2026/9/23 14:14:05

RC裂相电路实验:从理论推导到Multisim仿真与误差分析

简介:这份资源是南京理工大学电子电工综合实验的裂相(分相)电路实验论文,面向电气、电力电子及自动化专业学生与实验教学参考者,解决单相交流电源如何通过阻容移相网络分裂为相位差90两相电源及120三相电源的设计与验证…

2026/9/23 14:14:05

裂相电路实验全解析:从RC移相原理到论文数据处理

简介:这份资源是南京理工大学电子电工综合实验的裂相(分相)电路实验论文,面向电气、电力电子及自动化专业学生与实验教学参考者,用于理解如何通过阻容移相网络将单相交流电源转换为相位差90的两相电源和相位差120的三相…

2026/9/23 14:14:05

同态滤波图像增强:原理、NumPy实现与参数调优指南

简介:这份资源面向计算机视觉与图像处理方向的学习者和研究者,针对拍摄过程中因光照不均导致图像局部过亮或过暗、细节难以观察的问题,提供基于同态滤波的图像增强实现方案。同态滤波在频率域中分离亮度与光照分量,分别施加高通与…

2026/9/23 14:08:59

PyTorch RNNCell 手写实践:让隐藏状态真正记住时间序列

简介:本资源是一份面向机器学习初学者与时间序列建模实践者的RNN入门级Python实现,聚焦于用循环神经网络解决实际预测问题。项目提供从数据生成、模型搭建(含多层SimpleRNN与Dropout正则化)、训练评估到结果可视化的完整闭环代码&…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码