做 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。

相关新闻

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

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

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

2026/8/4 18:49:27 阅读更多 →
电商高并发场景下的JVM调优与多线程实践

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

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

2026/8/4 18:49:27 阅读更多 →
基于Godot引擎的跨设备分布式3D渲染架构设计与工程实践

基于Godot引擎的跨设备分布式3D渲染架构设计与工程实践

1. 项目概述:当你的手机、平板和电脑决定“合体”打游戏几年前,我在一个游戏开发聚会上,听到一个朋友抱怨:他花大价钱配的台式机跑最新的3D大作特效全开毫无压力,但一出门,就只能用性能孱弱的笔记本&#x…

2026/8/4 18:48:27 阅读更多 →

最新新闻

AI做数学题到底靠不靠谱?实测17款工具后,这5个隐藏陷阱90%学生都踩过!

AI做数学题到底靠不靠谱?实测17款工具后,这5个隐藏陷阱90%学生都踩过!

更多请点击: https://kaifayun.com 第一章:AI做数学题到底靠不靠谱?实测17款工具后,这5个隐藏陷阱90%学生都踩过! 我们对主流AI数学助手(含ChatGPT-4o、Claude 3.5 Sonnet、Gemini 2.0、通义千问Qwen3、K…

2026/8/4 19:42:51 阅读更多 →
AI渐变纹理生成失效?3步定位GPU内存溢出、色彩空间错配与噪声频谱失衡三大致命瓶颈

AI渐变纹理生成失效?3步定位GPU内存溢出、色彩空间错配与噪声频谱失衡三大致命瓶颈

更多请点击: https://codechina.net 第一章:AI生成渐变纹理 AI生成渐变纹理正迅速成为UI设计、游戏资产创作与数字艺术工作流中的关键环节。借助扩散模型与隐式神经表示(如NeRF或SIREN),系统可从文本提示或草图输入中…

2026/8/4 19:42:51 阅读更多 →
Elasticsearch Analyzer(分析器)详解

Elasticsearch Analyzer(分析器)详解

Java学习讨论群:725562382 一、Analyzer(分析器)概述 无论是内置的分析器(analyzer),还是自定义的分析器(analyzer),都由三种构件块组成:character filters(字符过滤器)、tokenizers(分词器)、token filters(token过滤器)。 内置的analyzer将这些构建块预先…

2026/8/4 19:42:51 阅读更多 →
酒吧挂账管理:手动操作与收银软件流程对比

酒吧挂账管理:手动操作与收银软件流程对比

周末夜间高峰期的结账排队与跨零点账目混乱,是许多门店在酒吧挂账管理中面临的现实难题。手工记账在极小微单店初期确实零门槛,但随着客流与订单量的双重增长,隐性成本会迅速攀升。通过直观对比手动操作与专业收银软件的效率与成本差异&#…

2026/8/4 19:42:51 阅读更多 →
PVZ Toolkit技术深度解析:植物大战僵尸一代PC版内存修改器架构实践

PVZ Toolkit技术深度解析:植物大战僵尸一代PC版内存修改器架构实践

PVZ Toolkit技术深度解析:植物大战僵尸一代PC版内存修改器架构实践 【免费下载链接】pvztoolkit 植物大战僵尸 PC 版综合修改器 项目地址: https://gitcode.com/gh_mirrors/pv/pvztoolkit PVZ Toolkit是一款基于C17开发的植物大战僵尸一代PC版开源综合修改器…

2026/8/4 19:42:51 阅读更多 →
SpringBoot+Vue兼职平台全栈开发实践

SpringBoot+Vue兼职平台全栈开发实践

1. 项目背景与核心价值 这个SpringBootVue兼职平台项目是当前企业级全栈开发的典型实践案例。去年我在为本地高校搭建实习对接平台时,正是采用了类似的技术架构。这种前后端分离的模式,既能发挥Java强大的业务处理能力,又能利用Vue的响应式特…

2026/8/4 19:41:51 阅读更多 →

日新闻

AI Agent白手起家26: 使用标准事件驱动大模型实践

AI Agent白手起家26: 使用标准事件驱动大模型实践

纲要 练习目标:掌握大模型标准事件的调用回顾 LangChain 中的核心标准事件 invokestreambatchastream_eventswith_structured_output 环境准备实战代码:多种事件调用对比 同步调用与流式输出批量处理异步事件流监听结构化输出 运行说明与预期结果总结与扩…

2026/8/4 0:00:40 阅读更多 →
dealsea是什么?跨境卖家必知的美国deal站入门指南

dealsea是什么?跨境卖家必知的美国deal站入门指南

说实话,第一次听说美国这个老牌折扣网站的跨境卖家,十个有八个会问同一个问题:这个平台到底是干嘛的?我见过一个做家居出口的朋友,他在亚马逊上月销二十万美金,却从来没用过它。我给他看了首页——一屏一屏…

2026/8/4 0:01:40 阅读更多 →
清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

清华大学重磅EST:植物自导电闪蒸焦耳热600°C/2600°C两步法!稀土超积累植物秒级转化为CeO₂-石墨烯电催化剂!

通讯作者:邓兵、刘建国通讯单位:清华大学DOI:https://doi.org/10.1021/acs.est.6c00603研究背景稀土元素(REEs)是清洁能源技术与电子器件不可或缺的核心原料,然而传统提取方式依赖能耗高、排放大的采矿与强…

2026/8/4 0:01:40 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/4 13:24:41 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/4 11:41:39 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/4 5:26:40 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/4 13:38:24 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/4 11:09:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/4 13:38:40 阅读更多 →