DeepAgents--02--文件后端(Backend)系统
提示文章写完后目录可以自动生成如何生成可参考右边的帮助文档文章目录文件后端Backend系统1、Backend系统概述2、StateBackend (临时状态后端)3、FilesystemBackend (本地磁盘后端)4、LocalShellBackend (本地Shell后端)5、StoreBackend (LangGraph 存储后端)6、CompositeBackend (复合/路由后端)7、自定义后端8、文件后端和checkpointer、store的关系文件后端Backend系统1、Backend系统概述2、StateBackend (临时状态后端)3、FilesystemBackend (本地磁盘后端)# 创建一个临时目录作为Agent的“沙盒”temp_workspace./agent_workspaceos.makedirs(temp_workspace,exist_okTrue)agentcreate_deep_agent(modelllm,tools[web_search],checkpointercheckpointer,backendFilesystemBackend(root_dirtemp_workspace,virtual_modeTrue# 关键防止Agent使用 ../../ 跳出跟目录),system_prompt你是一个助手请根据用户输入的指令进行相应的操作。)4、LocalShellBackend (本地Shell后端)# 创建一个临时目录作为Agent的“沙盒”temp_workspace./agent_workspaceos.makedirs(temp_workspace,exist_okTrue)# 本地沙箱backendLocalShellBackend(root_dirtemp_workspace,virtual_modeTrue,timeout30,# 命令执行超时时间秒max_output_bytes50000,# 命令输出最大字节数# 设置环境变量包含编码相关的配置env{# 获取当前Python解释器的完整路径PATH:f{os.path.dirname(sys.executable)};{os.environ.get(PATH,)},},)agentcreate_deep_agent(modelllm,tools[web_search],checkpointercheckpointer,backendbackend,system_prompt你是一个助手请根据用户输入的指令进行相应的操作。)5、StoreBackend (LangGraph 存储后端)# 案例2-4配置一个具有持久化记忆的Agentfromdeepagents.backendsimportStoreBackendfromdeepagentsimportcreate_deep_agentfromlanggraph.store.memoryimportInMemoryStore agentcreate_deep_agent(modelgpt-4o,backendlambdart:StoreBackend(rt),storeInMemoryStore()# 使用内存存储进程重启后丢失。生产环境可用RedisStore等。)# Agent写入 /memories/ 下的文件在后续的新对话中仍可读取。6、CompositeBackend (复合/路由后端)# 定义复合后端默认用StateBackend但/memories/路径下的操作路由到StoreBackendcomposite_backendlambdart:CompositeBackend(defaultStateBackend(rt),# 默认后端用于临时文件routes{/memories/:StoreBackend(rt),# 持久化路径})agentcreate_deep_agent(modelgpt-4o,backendcomposite_backend,storeInMemoryStore())# 现在Agent对/scratch/plan.md的读写是临时的而对/memories/user_pref.json的读写是持久的。composite_backendlambdart:CompositeBackend(defaultStateBackend(rt),# 默认临时存储routes{/memories/:FilesystemBackend(root_dir/data/agent_memories,virtual_modeTrue),/shared_docs/:FilesystemBackend(root_dir/company/docs,virtual_modeTrue),},)agentcreate_deep_agent(backendcomposite_backend)# 路径解析# /scratch/temp.txt - StateBackend# /memories/2025/note.md - 本地文件 /data/agent_memories/2025/note.md# /shared_docs/api.md - 本地文件 /company/docs/api.md# ls / 命令会聚合来自所有后端的结果。7、自定义后端设计一个极简的“内存字典”后端示例fromdeepagents.backends.protocolimportBackendProtocol,WriteResult,EditResultfromdeepagents.backends.utilsimportFileInfo,GrepMatchfromdatetimeimportdatetimeimportreclassDictBackend(BackendProtocol):一个将文件存储在内存字典中的简单后端。def__init__(self):self.files{}# 路径 - 内容self.metadata{}# 路径 - 元数据大小修改时间defls_info(self,path:str)-list[FileInfo]:# 列出以path为前缀的“文件”和“目录”result[]seen_dirsset()forfile_pathinself.files.keys():iffile_path.startswith(path):# 处理目录项remainingfile_path[len(path):]if/inremaining:dir_namepathremaining.split(/)[0]/ifdir_namenotinseen_dirs:seen_dirs.add(dir_name)result.append(FileInfo(pathdir_name,is_dirTrue))else:# 文件项metaself.metadata.get(file_path,{})result.append(FileInfo(pathfile_path,is_dirFalse,sizemeta.get(size,0),modified_atmeta.get(modified_at)))# result.sort(keylambda x: x.path)returnresultdefread(self,file_path:str,offset:int0,limit:int2000)-str:iffile_pathnotinself.files:returnfError: File {file_path} not foundcontentself.files[file_path]# 简单模拟分页按行处理linescontent.splitlines(keependsTrue)start_lineoffset end_linestart_linelimitiflimit0elselen(lines)selected_lineslines[start_line:end_line]result.join(f{start_linei1}:{line}fori,lineinenumerate(selected_lines))returnresultifresultelse(end of file)defwrite(self,file_path:str,content:str)-WriteResult:iffile_pathinself.files:returnWriteResult(errorfFile {file_path} already exists (create-only).)self.files[file_path]content self.metadata[file_path]{size:len(content),modified_at:datetime.now().isoformat()}# 对于自定义后端files_update 通常为 NonereturnWriteResult(pathfile_path,files_updateNone)# 注意为简洁起见省略了 grep_raw, glob_info, edit 的完整实现。# 一个完整的实现需要填充这些方法。defgrep_raw(self,pattern:str,path:str|NoneNone,glob:str|NoneNone)-list[GrepMatch]|str:# 简化实现仅在全文件搜索try:re.compile(pattern)exceptre.errorase:returnfInvalid regex pattern:{e}matches[]forfile_path,contentinself.files.items():fori,lineinenumerate(content.splitlines()):ifre.search(pattern,line):matches.append(GrepMatch(pathfile_path,linei1,textline))returnmatchesdefglob_info(self,pattern:str,path:str/)-list[FileInfo]:# 简化实现使用 fnmatchimportfnmatch all_files[FileInfo(pathp,is_dirFalse,sizeself.metadata[p][size],modified_atself.metadata[p][modified_at])forpinself.files.keys()ifp.startswith(path)]matched[fiforfiinall_filesiffnmatch.fnmatch(fi.path,path.rstrip(/)/pattern)]returnmatcheddefedit(self,file_path:str,old_string:str,new_string:str,replace_all:boolFalse)-EditResult:iffile_pathnotinself.files:returnEditResult(errorfFile {file_path} not found)contentself.files[file_path]ifreplace_all:new_contentcontent.replace(old_string,new_string)occurrencescontent.count(old_string)else:ifcontent.count(old_string)!1:returnEditResult(errorfFound{content.count(old_string)}occurrences of {old_string}. For safety, edit requires exactly one match unless replace_allTrue.)new_contentcontent.replace(old_string,new_string,1)occurrences1ifnew_contentcontent:returnEditResult(errorfString {old_string} not found.)self.files[file_path]new_content self.metadata[file_path][size]len(new_content)self.metadata[file_path][modified_at]datetime.now().isoformat()returnEditResult(pathfile_path,files_updateNone,occurrencesoccurrences)8、文件后端和checkpointer、store的关系

相关新闻

3步掌握darktable批量导出:告别重复操作,提升摄影工作流效率

3步掌握darktable批量导出:告别重复操作,提升摄影工作流效率

3步掌握darktable批量导出:告别重复操作,提升摄影工作流效率 【免费下载链接】darktable darktable is an open source photography workflow application and raw developer 项目地址: https://gitcode.com/GitHub_Trending/da/darktable 你是否…

2026/10/25 8:51:39 阅读更多 →
Czkawka终极指南:免费开源的跨平台磁盘清理神器

Czkawka终极指南:免费开源的跨平台磁盘清理神器

Czkawka终极指南:免费开源的跨平台磁盘清理神器 【免费下载链接】czkawka Multi functional app to find duplicates, empty folders, similar images etc. 项目地址: https://gitcode.com/GitHub_Trending/cz/czkawka 还在为电脑磁盘空间不足而烦恼吗&#…

2026/10/25 6:20:45 阅读更多 →
10分钟上手Apify MCP Server:从安装到第一个数据提取任务

10分钟上手Apify MCP Server:从安装到第一个数据提取任务

10分钟上手Apify MCP Server:从安装到第一个数据提取任务 【免费下载链接】apify-mcp-server The Apify MCP server enables your AI agents to extract data from social media, search engines, maps, e-commerce sites, or any other website using thousands of…

2026/10/24 1:34:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/25 11:19:54 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/24 17:47:00 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/24 18:34:36 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/25 10:02:42 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/25 3:12:30 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/24 21:09:59 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 10:02:43 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/25 7:47:32 阅读更多 →