当前位置: 首页 > article >正文

[Deep Agents:LangChain的Agent Harness-03]FilesystemMiddleware:赋能Agent读写文件及管理长上下文

通过“构建抽象的文件系统”我们知道Deep Agents的文件系统是建立在一个利用BackendProtocol协议抽象的文件系统之上的使得Agent能够以统一的方式进行文件操作无论底层存储是本地磁盘、云端S3、数据库还是内存。这种设计不仅提供了极大的灵活性还使得Agent能够适应不同的应用场景从而实现更复杂的数据管理和交互能力。这个文件系统是通过FilesystemMiddleware赋予Agent的。1. 提供文件操作工具集在Deep Agents框架中FilesystemMiddleware不仅仅是提供了简单的文件读写工具更是实现长程任务和上下文工程的核心基础设施。它通过将文件系统抽象为AI的外部工作记忆解决了大模型在处理复杂任务时因上下文窗口溢出而导致的健忘问题。它赋予Agent存储与计算分离能力为Agent自动注入了一套标准化的文件操作工具集ls列出目录read_file读取内容write_file写入文件edit_file精确编辑内容glob模式匹配查找grep文本搜索execute代码执行仅限于可作为沙箱的后端存储FilesystemMiddleware提供了自动上下文卸载Context Offloading的能力。为了防止Agent被海量的工具输出如超长的搜索结果或日志淹没FilesystemMiddleware实现了自动化调度阈值触发默认情况下当工具调用结果超过20,000个tokens可配置时会自动将结果保存到文件系统中引用替换Agent的对话历史中不会保留原始巨量数据对应的内容被替换为一个指向文件路径的指针动态加载Agent可以根据需要通过read_file的offset和limit参数实现分页读取仅获取当前推理所需的片段从而极大地节省了Context消耗与其说FilesystemMiddleware为Agent缔造了一个文件系统不如说它提供了一套工具集以文件系统的方式来操作各种后端存储。FilesystemMiddleware默认提供了七个工具ls、read、write、edit、glob、grep和execute它们会调用对应后端的接口来实现文件的列出、读取、写入、编辑、模式匹配和命令执行等功能。通过这些工具Agent可以以文件系统的方式来访问和操作不同类型的存储从而实现更复杂的数据管理和交互能力。如下面的代码片段所示当我们调用__init__方法创建FilesystemMiddleware实例时可以利用backend参数来指定一个后端实例或者直接传入一个后端工厂函数BackendFactory来动态创建后端。如果采用StateBackend作为默认后端文件内容和元数据的FileData对象最终会写入名为files的状态字段中。表示状态Schema类型的state_schema字段返回的类型是FilesystemState唯一的状态成员files返回的字典模拟存储的文件。BackendFactory:TypeAliasCallable[[ToolRuntime],BackendProtocol]BACKEND_TYPESBackendProtocol|BackendFactoryclassFilesystemMiddleware(AgentMiddleware[FilesystemState,ContextT,ResponseT]):state_schemaFilesystemStatedef__init__(self,*,backend:BACKEND_TYPES|NoneNone,system_prompt:str|NoneNone,custom_tool_descriptions:dict[str,str]|NoneNone,tool_token_limit_before_evict:int|None20000,max_execute_timeout:int3600,)-None:self.backendbackendifbackendisnotNoneelse(StateBackend)self._custom_system_promptsystem_prompt self._custom_tool_descriptionscustom_tool_descriptionsor{}self._tool_token_limit_before_evicttool_token_limit_before_evict self._max_execute_timeoutmax_execute_timeout self.tools[self._create_ls_tool(),self._create_read_file_tool(),self._create_write_file_tool(),self._create_edit_file_tool(),self._create_glob_tool(),self._create_grep_tool(),self._create_execute_tool(),]def_create_ls_tool(self)-BaseTooldef_create_read_file_tool(self)-BaseTooldef_create_write_file_tool(self)-BaseTooldef_create_edit_file_tool(self)-BaseTooldef_create_glob_tool(self)-BaseTooldef_create_grep_tool(self)-BaseTooldef_create_execute_tool(self)-BaseTool__init__方法中除了backend参数外还提供了以下几个可选参数system_prompt用于定制文件系统工具的系统提示语帮助Agent更好地理解工具的用途和使用方法custom_tool_descriptions一个字典用于定制每个工具的描述信息键是工具名称值是对应的描述文本tool_token_limit_before_evict一个整数指定在工具调用历史中当累计的工具调用参数的token数量超过这个限制时应该开始逐步淘汰旧的工具调用记录以节省上下文空间max_execute_timeout一个整数指定execute工具的最大执行时间以秒为单位防止Agent执行长时间运行的命令导致资源占用与其说FilesystemMiddleware为Agent缔造了一个文件系统不如说它提供了一套工具集以文件系统的方式来操作各种后端存储。它默认提供了七个工具ls、read、write、edit、glob、grep和execute它们会调用对应后端的接口来实现文件的列出、读取、写入、编辑、模式匹配和命令执行等功能。通过这些工具Agent可以以文件系统的方式来访问和操作不同类型的存储从而实现更复杂的数据管理和交互能力。2. 看看工具描述AI编程对程序员的自然语言的文字驾驭能力提出了更高的要求而这是程序最欠缺的能力也是很多人不屑的地方。对于LLM来说提示词是唯一的输入而工具描述是组成提示词的重要部分。即使你将定义工具的函数写得再完美没有一份清晰、准确、详细的工具描述LLM也无法正确地理解工具的功能和使用方法更无法在实际调用中正确地传递参数和处理返回值。工具描述就像是工具的使用说明书只有当LLM能够正确地理解和使用这些说明书中的信息才能发挥工具的最大效用。正如我一贯主张通过阅读知名框架的源码而不是阅读大量的书籍来学习架构设计一样我主张通过阅读知名框架中的提示词来学习如何撰写提示词而不是阅读一本又一本关于提示词工程的书籍。因为框架是高复用率的程序如果框架本身被验证是成功的那们证明其设计的提示词具有很高的质量。我们来看一下FilesystemMiddleware的工具描述是如何设计的也许我们就能从中学到一些撰写工具描述的技巧。lsLists all files in a directory. This is useful for exploring the filesystem and finding the right file to read or edit. You should almost ALWAYS use this tool before using the read_file or edit_file tools.read_fileReads a file from the filesystem. Assume this tool is able to read all files. If the User provides a path to a file assume that path is valid. It is okay to read a file that does not exist; an error will be returned. Usage: - By default, it reads up to 100 lines starting from the beginning of the file - **IMPORTANT for large files and codebase exploration**: Use pagination with offset and limit parameters to avoid context overflow - First scan: read_file(path, limit100) to see file structure - Read more sections: read_file(path, offset100, limit200) for next 200 lines - Only omit limit (read full file) when necessary for editing - Specify offset and limit: read_file(path, offset0, limit100) reads first 100 lines - Results are returned using cat -n format, with line numbers starting at 1 - Lines longer than 5,000 characters will be split into multiple lines with continuation markers (e.g., 5.1, 5.2, etc.). When you specify a limit, these continuation lines count towards the limit. - You have the capability to call multiple tools in a single response. It is always better to speculatively read multiple files as a batch that are potentially useful. - If you read a file that exists but has empty contents you will receive a system reminder warning in place of file contents. - Image files (.png, .jpg, .jpeg, .gif, .webp) are returned as multimodal image content blocks (see https://docs.langchain.com/oss/python/langchain/messages#multimodal). For image tasks: - Use read_file(file_path...) for .png/.jpg/.jpeg/.gif/.webp - Do NOT use offset/limit for images (pagination is text-only) - If image details were compacted from history, call read_file again on the same path - You should ALWAYS make sure a file has been read before editing it.write_fileWrites to a new file in the filesystem. Usage: - The write_file tool will create the a new file. - Prefer to edit existing files (with the edit_file tool) over creating new ones when possible.edit_filePerforms exact string replacements in files. Usage: - You must read the file before editing. This tool will error if you attempt an edit without reading the file first. - When editing, preserve the exact indentation (tabs/spaces) from the read output. Never include line number prefixes in old_string or new_string. - ALWAYS prefer editing existing files over creating new ones. - Only use emojis if the user explicitly requests it.globFind files matching a glob pattern. Supports standard glob patterns: * (any characters), ** (any directories), ? (single character). Returns a list of absolute file paths that match the pattern. Examples: - **/*.py - Find all Python files - *.txt - Find all text files in root - /subdir/**/*.md - Find all markdown files under /subdir - data_??.csv - Find files like data_01.csv, data_A1.csv, etc.grepSearch for a text pattern across files. Searches for literal text (not regex) and returns matching files or content based on output_mode. Special characters like parentheses, brackets, pipes, etc. are treated as literal characters, not regex operators. Examples: - Search all files: grep(patternTODO) - Search Python files only: grep(patternimport, glob*.py) - Show matching lines: grep(patternerror, output_modecontent) - Search for code with special chars: grep(patterndef __init__(self):) - Search for a pattern that includes glob special chars: grep(patterndata_*.csv, globdata_*.csv)executeExecutes a shell command in an isolated sandbox environment. Usage: Executes a given command in the sandbox environment with proper handling and security measures. Before executing the command, please follow these steps: 1. Directory Verification: - If the command will create new directories or files, first use the ls tool to verify the parent directory exists and is the correct location - For example, before running mkdir foo/bar, first use ls to check that foo exists and is the intended parent directory 2. Command Execution: - Always quote file paths that contain spaces with double quotes (e.g., cd path with spaces/file.txt) - Examples of proper quoting: - cd /Users/name/My Documents (correct) - cd /Users/name/My Documents (incorrect - will fail) - python /path/with spaces/script.py (correct) - python /path/with spaces/script.py (incorrect - will fail) - After ensuring proper quoting, execute the command - Capture the output of the command Usage notes: - Commands run in an isolated sandbox environment - Returns combined stdout/stderr output with exit code - If the output is very large, it may be truncated - For long-running commands, use the optional timeout parameter to override the default timeout (e.g., execute(commandmake build, timeout300)) - A timeout of 0 may disable timeouts on backends that support no-timeout execution - VERY IMPORTANT: You MUST avoid using search commands like find and grep. Instead use the grep, glob tools to search. You MUST avoid read tools like cat, head, tail, and use read_file to read files. - When issuing multiple commands, use the ; or operator to separate them. DO NOT use newlines (newlines are ok in quoted strings) - Use when commands depend on each other (e.g., mkdir dir cd dir) - Use ; only when you need to run commands sequentially but dont care if earlier commands fail - Try to maintain your current working directory throughout the session by using absolute paths and avoiding usage of cd Examples: Good examples: - execute(commandpytest /foo/bar/tests) - execute(commandpython /path/to/script.py) - execute(commandnpm install npm test) - execute(commandmake build, timeout300) Bad examples (avoid these): - execute(commandcd /foo/bar pytest tests) # Use absolute path instead - execute(commandcat file.txt) # Use read_file tool instead - execute(commandfind . -name *.py) # Use glob tool instead - execute(commandgrep -r pattern .) # Use grep tool instead Note: This tool is only available if the backend supports execution (SandboxBackendProtocol). If execution is not supported, the tool will return an error message.3. 指导LLM调用文件操作工具的系统提示词FilesystemMiddleware的__init__方法提供了系统提示词作为使用工具的说明书提示词的应用是通过重写的wrap_model_call/awrap_model_call方法来实现的。如果tool_token_limit_before_evict不为空在工具返回内容超过设置的这个阈值时为了避免上下文过载FilesystemMiddleware会将其内容以文件形式存储到后端并返回一个新的工具调用结果并返回文件的路径。由于tool_token_limit_before_evict参数设置的阈值以Token作为单位在进行阈值计算的时候会从返回的ToolMessage中提取文本内容并按照每个字符平均4个token的经验值来估算总的token数量。此项工作是通过重写的wrap_tool_call/awrap_tool_call方法来实现的。classFilesystemMiddleware(AgentMiddleware[FilesystemState,ContextT,ResponseT]):defwrap_model_call(self,request:ModelRequest[ContextT],handler:Callable[[ModelRequest[ContextT]],ModelResponse[ResponseT]],)-ModelResponse[ResponseT]asyncdefawrap_model_call(self,request:ModelRequest[ContextT],handler:Callable[[ModelRequest[ContextT]],Awaitable[ModelResponse[ResponseT]]],)-ModelResponse[ResponseT]defwrap_tool_call(self,request:ToolCallRequest,handler:Callable[[ToolCallRequest],ToolMessage|Command],)-ToolMessage|Commandasyncdefawrap_tool_call(self,request:ToolCallRequest,handler:Callable[[ToolCallRequest],Awaitable[ToolMessage|Command]],)-ToolMessage|Command如下所示的是FilesystemMiddleware提供的系统提示词看看我们能否撰写出同样质量的提示词来指导LLM正确地调用工具## Following Conventions - Read files before editing — understand existing content before making changes - Mimic existing style, naming conventions, and patterns ## Filesystem Tools ls, read_file, write_file, edit_file, glob, grep You have access to a filesystem which you can interact with using these tools. All file paths must start with a /. Follow the tool docs for the available tools, and use pagination (offset/limit) when reading large files. - ls: list files in a directory (requires absolute path) - read_file: read a file from the filesystem - write_file: write to a file in the filesystem - edit_file: edit a file in the filesystem - glob: find files matching a pattern (e.g., **/*.py) - grep: search for text within files ## Large Tool Results When a tool result is too large, it may be offloaded into the filesystem instead of being returned inline. In those cases, use read_file to inspect the saved result in chunks, or use grep within /large_tool_results/ if you need to search across offloaded tool results and do not know the exact file path. Offloaded tool results are stored under /large_tool_results/tool_call_id.如果涉及execute工具的使用还会加上如下这段## Execute Tool execute You have access to an execute tool for running shell commands in a sandboxed environment. Use this tool to run commands, scripts, tests, builds, and other shell operations. - execute: run a shell command in the sandbox (returns output and exit code)4. 让Agent操作你的本地文件如下的这个演示程序充分体现了FilesystemMiddleware的功能。我们创建了一个Agent并在其中注册了FilesystemMiddleware。通过调用Agent来执行一系列文件系统操作包括创建目录、写入文件、列出目录内容和读取文件内容。Agent通过FilesystemMiddleware提供的工具来与后端存储进行交互实现了一个完整的文件系统操作流程。fromlangchain.agentsimportcreate_agentfromdeepagents.middleware.filesystemimportFilesystemMiddlewarefromdeepagents.backends.local_shellimportLocalShellBackendfromlangchain_openaiimportChatOpenAIfromdotenvimportload_dotenvimportasyncio load_dotenv()agentcreate_agent(modelChatOpenAI(modelgpt-5.2-chat),middleware[FilesystemMiddleware(backendLocalShellBackend(virtual_modeTrue))],)prompt\ Execute following operations: - Remove the test_dir directory if it already exists, and then create a new empty one; - Change the current working directory to such a newly created directory; - Create a file called hello.py inside it with the content print(Hello World); - Create three files in the newly created directory: file1.txt, file2.txt, and file3.txt with any content of your choice; - List the files of the directory; - Read the content of hello.py. asyncdefmain():resultawaitagent.ainvoke(input{messages:[{role:user,content:prompt}]})result[messages][-1].pretty_print()asyncio.run(main())输出 Ai Message ✅ All requested operations have been completed. Here are the results step by step: ### Directory Setup - The directory **test_dir** was removed (if it existed) and recreated as a new empty directory. ### Files Created Inside test_dir - **hello.py** python print(Hello World) - **file1.txt** – contains: content 1 - **file2.txt** – contains: content 2 - **file3.txt** – contains: content 3 ### Directory Listing The contents of test_dir are: file1.txt file2.txt file3.txt hello.py ### Contents of hello.py print(Hello World) If you’d like to run hello.py, modify any files, or perform more filesystem operations, just let me know!

相关文章:

[Deep Agents:LangChain的Agent Harness-03]FilesystemMiddleware:赋能Agent读写文件及管理长上下文

通过“构建抽象的文件系统”我们知道,Deep Agents的文件系统是建立在一个利用BackendProtocol协议抽象的文件系统之上的,使得Agent能够以统一的方式进行文件操作,无论底层存储是本地磁盘、云端S3、数据库还是内存。这种设计不仅提供了极大的灵…...

6条Claude Code实践中的经验与思考

Claude Code系列回顾 目前在实践和应用Claude Code,顺便分享一些在实践过程中的经验,没想竟然写成一个系列了。如果你也对Claude Code感兴趣,可以先回顾一下之前的文章,然后开始今天的文章。 第1篇:《国内环境下的Cl…...

OpenPicoRTOS:ARM Cortex-M微控制器上的极简实时操作系统设计与实战

1. 项目概述:一个为微控制器而生的实时操作系统如果你在嵌入式领域摸爬滚打过几年,尤其是在资源极其受限的微控制器(MCU)上开发过复杂应用,那你一定对“实时性”和“资源占用”这对矛盾深有体会。商业RTOS(…...

从白炽灯到LED:家庭节日照明升级的技术原理、选购与实战指南

1. 从白炽灯到LED:一个拖延了三年才完成的家庭照明升级 每年一到这个时候,看着邻居家窗户上闪烁的彩灯,再看看自家车库里那几箱缠成一团、每年都要花半天时间测试维修的旧灯串,我就下定决心:今年一定要换成LED的。这个…...

基于React与Vite的现代化开源仪表盘开发实战指南

1. 项目概述:一个面向开发者的开源仪表盘解决方案最近在折腾一个内部监控系统,需要快速搭建一个数据可视化的前端界面。找了一圈现成的方案,要么太重,要么定制化程度不够,要么就是设计风格过于陈旧。直到在GitHub上发现…...

苏州沃虎电子(VOOHU)功率线用共模电感WHACM07A40R101产品介绍

苏州沃虎电子科技有限公司(品牌:VOOHU)供应的 WHACM07A40R101 是一款高性能功率线用共模电感,采用紧凑的7.06.04.0mm封装,专为电源线电磁干扰(EMI)抑制设计。该产品具备大电流承载能力和优异的共…...

面向零基础初学者,从环境搭建到发布上线,手把手教你开发第一个微信小程序(第5章-WXSS入门)

5.1 WXSS是什么? WXSS(WeiXin Style Sheets)是微信小程序的样式语言,类似于网页开发中的CSS。 WXSS vs CSS对比CSSWXSS选择器支持完整选择器支持大部分选择器单位px, em, remrpx, px布局flex, grid主要用flex最大的区别&#xff1…...

AI编码助手效率革命:ai-codex工具如何通过静态分析生成项目索引

1. 项目概述:为AI编码助手打造“即时上下文”如果你和我一样,每天都在和Claude Code、Cursor或者GitHub Copilot这类AI编码助手打交道,那你肯定也经历过这个“启动成本”的烦恼:每次开启一个新对话,助手做的第一件事就…...

30个客户,30本定制手册:文档团队的噩梦

上周,一家做大型设备的文档主管给我算了一笔账。他们有30个大客户,每个客户都要求专属手册。A客户要求LOGO换成他们的,操作界面术语用他们的内部叫法;B客户要求删除某些技术参数,只保留操作步骤;C客户要求所…...

技能迁移器:构建个人开发环境一键迁移框架的设计与实践

1. 项目概述:技能迁移器的核心价值最近在GitHub上看到一个挺有意思的项目,叫“skill-migrator”。光看名字,你可能会联想到数据迁移或者系统迁移,但它的核心其实是关于“人”的——如何将一个人的技能、知识、乃至工作习惯&#x…...

ECHO框架:语言驱动机器人控制的边缘-云协同技术

1. ECHO框架:语言驱动人形机器人控制的边缘-云协同架构在机器人控制领域,如何让机器人理解并执行自然语言指令一直是个关键挑战。传统方法要么受限于硬件计算能力,要么面临语义理解与实时控制的矛盾。ECHO框架通过创新的边缘-云协同架构&…...

【STM32】启动过程分析

本文记录一下STM32F4系列的启动过程,也就是从STM32芯片上电复位执行的第一条指令,到执行用户编写的main函数这之间的过程。1.启动模式上电复位,硬件复位和软件复位。当产生复位,并且离开复位状态后,CM4 内核做的第一件…...

OpenClaw任务控制中心:构建自动化工作流的轻量级调度平台

1. 项目概述与核心价值最近在折腾一些自动化任务时,发现很多开源工具虽然功能强大,但往往需要自己写胶水代码来串联,或者需要一个统一的界面来管理和监控。这让我想起了以前在运维和开发中经常遇到的痛点:脚本分散、日志难查、状态…...

总结“从输入URL到展示出页面“ 过程发生了什么

当我们在浏览器地址栏输入URL并按下回车后,背后会经历一系列复杂的步骤,最终将网页内容呈现在眼前,整个过程可以分为以下几个阶段:一、URL解析与处理浏览器首先会判断输入的内容是否为合法URL,如果是域名(如…...

javassit使用过程的坑

https://segmentfault.com/a/1190000044154053 https://blog.csdn.net/Kingairy/article/details/104003524 经过不断的试错和研究&#xff0c;总结如下&#xff1a; 以CtMethod#setBody 方法为例 不要在代码中使用范型&#xff0c;哪怕是定义List<Object>这样基础范型…...

L-system与硬件补偿技术在自动钢琴音乐生成中的应用

1. L-system与硬件补偿技术概述L-system&#xff08;Lindenmayer系统&#xff09;作为一种形式化语法&#xff0c;最初由生物学家Aristid Lindenmayer于1968年提出&#xff0c;用于模拟植物的生长过程。其核心机制是通过字符串重写规则生成具有自相似性的复杂结构。在音乐生成领…...

从零构建团队专属CLI工具:自动化项目脚手架与代码生成实践

1. 项目概述&#xff1a;一个命令行工具的诞生与价值最近在整理自己的工具链&#xff0c;发现一个挺有意思的现象&#xff1a;很多开发者&#xff0c;包括我自己&#xff0c;都习惯性地把一些高频、重复的脚本操作散落在各个项目的根目录下&#xff0c;或者干脆写个简陋的Makef…...

实战入口:Claude 到底在哪用?网页版、桌面端与多端场景全解

最近在 se.zzmax.cn 上直接体验 Claude 各型号&#xff0c;发现很多同学第一次想用 Claude&#xff0c;卡住的往往不是“怎么问”&#xff0c;而是“从哪儿进”。Anthropic 目前提供了多个官方入口&#xff0c;不同入口适配的使用场景、能力和 workflow 集成深度并不一样。下面…...

MCP协议赋能Ollama:本地大模型工具调用的标准化实践

1. 项目概述&#xff1a;当MCP遇上Ollama&#xff0c;本地AI工作流的“最后一公里” 如果你和我一样&#xff0c;是个喜欢折腾本地大模型的开发者&#xff0c;那你肯定对Ollama不陌生。它让在本地运行Llama、Mistral、Qwen这些开源大模型变得像 ollama run llama3.2 一样简单…...

redis 8.6.3 最新版重磅发布:安全修复、核心 Bug 修复与模块优化全面升级

2026年5月5日&#xff0c;Redis 8.6.3 正式发布。 这是一个非常值得关注的版本&#xff0c;因为官方明确标注了 Update urgency: SECURITY&#xff0c;说明本次更新包含安全修复&#xff0c;建议尽快升级。 从发布内容来看&#xff0c;8.6.3 不只是一次常规的小版本迭代&#x…...

2026-05-09:不同元素和至少为 K 的最短子数组长度。用go语言,给定一个整数数组 nums 和一个整数 k。你需要在数组中找一个连续的非空子数组,使得这个子数组里不同元素的种类数对应的取值之

2026-05-09&#xff1a;不同元素和至少为 K 的最短子数组长度。用go语言&#xff0c;给定一个整数数组 nums 和一个整数 k。你需要在数组中找一个连续的非空子数组&#xff0c;使得这个子数组里不同元素的种类数对应的取值之和&#xff08;也就是&#xff1a;每个数只算一次&am…...

【Python实战】告别杂乱脚本!基于SOLID原则与策略模式的 PDF转Word 批量处理系统

&#x1f4dd; 前言&#xff1a;为什么要造这个“轮子”&#xff1f; 在日常的学习和开发中&#xff0c;我们经常遇到需要将大量 PDF 转换为 Word 文档的场景。市面上的在线工具要么满屏广告&#xff0c;要么限制文件大小和数量&#xff1b;而网上的 Python 脚本往往是简单的“…...

告别冗余!Linux软件卸载命令全攻略,让你的系统焕然一新

还在为Linux系统软件残留烦恼吗&#xff1f;本攻略汇集APT、YUM、DNF、RPM等主流包管理器的卸载命令&#xff0c;并提供手动安装软件的清理方法。告别臃肿&#xff0c;轻松卸载&#xff0c;让你的Linux系统告别卡顿&#xff0c;运行如飞。在Linux系统中&#xff0c;卸载软件的方…...

【线性代数笔记】秩、线性相关性与等价向量组的核心逻辑总结

博主简介&#xff1a;05后理工男&#xff0c;CSDN 技术博主。目前正在攻读计算机专业&#xff0c;同步复习 408 及数学基础。 笔记说明&#xff1a;本文为线性代数关于“秩”与“向量组相关性”的学习笔记&#xff0c;重点记录了判定方法与核心定理。一、 线性表示与方程组解的…...

Cursor AI编程效率追踪器:本地化数据采集与可视化分析实践

1. 项目概述&#xff1a;一个为开发者量身定制的效率追踪器最近在GitHub上看到一个挺有意思的项目&#xff0c;叫cursor-usage-tracker。光看名字&#xff0c;你可能觉得这又是一个平平无奇的“使用情况追踪器”。但如果你是一位深度使用Cursor&#xff08;那个集成了AI能力的现…...

BarTender如何取消激活和重新激活

一、取消激活1、多台电脑、服务端取消激活方法A、打开Administration ConsoleB、许可—选中当前许可证—右键选择取消激活许可证C、点击下一步D、取消激活中E、取消激活成功&#xff0c;许可证没有处于激活的状态2、只安装了单台电脑的情况取消激活可以按照上述取消激活方式进行…...

OpenClaw三层记忆系统:为AI助手构建可检索的长期知识库

1. 项目概述如果你和我一样&#xff0c;长期与各种AI助手打交道&#xff0c;无论是编程、写作还是日常任务规划&#xff0c;最头疼的问题之一就是“记忆”。每次对话都像是一次全新的邂逅&#xff0c;助手记不住你昨天提到的项目细节&#xff0c;也忘了上周讨论过的技术方案。这…...

WebMCP:连接Web应用与AI模型的统一协议服务器实践

1. 项目概述&#xff1a;一个连接Web应用与AI模型的“万能适配器”最近在折腾一些AI应用开发时&#xff0c;我遇到了一个挺典型的痛点&#xff1a;手头有各种功能强大的大语言模型&#xff08;LLM&#xff09;&#xff0c;比如OpenAI的GPT、Anthropic的Claude&#xff0c;或者开…...

Aegis-Veil:轻量级可编程应用安全中间件实战指南

1. 项目概述&#xff1a;一个面向开发者的安全防护工具 最近在梳理自己项目的安全配置时&#xff0c;又想起了之前用过的一个挺有意思的工具——Aegis-Veil。这名字听起来就很有“盾与面纱”的意味&#xff0c;直指其核心&#xff1a;为你的应用或服务提供一层坚固的防护&#…...

实测对比:用Python+Azure语音服务做个桌面小工具,通义灵码和Claude3谁更省心?

PythonAzure语音服务实战&#xff1a;通义灵码与Claude3在桌面工具开发中的深度对比 最近在开发者社区里&#xff0c;关于AI编程助手的讨论越来越热烈。作为一个经常需要快速实现原型工具的Python开发者&#xff0c;我决定亲自测试两款热门AI编程助手——通义灵码和Claude3&…...