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

Learn Claude Code Agent 开发 | 2、插拔式工具系统:扩展功能不修改核心循环

Learn Claude Code Agent 开发 | 2、插拔式工具系统扩展功能不修改核心循环整体概述多工具分发核心实现是基础智能体循环的直接扩展核心思想就是“加一个工具, 只加一个 handler”– 循环不用动, 新工具注册进 dispatch map 就行。这是智能体工具分发机制的核心实现体现了 Harness 层最重要的设计原则扩展工具不修改核心循环。解决的核心问题单bash工具存在很多缺陷cat截断不可预测sed遇到特殊字符容易崩溃每次 bash 调用都是不受约束的安全面容易产生越权操作扩展工具需要修改核心循环代码违反开闭原则核心设计思想-------- ------- ------------------ | User | --- | LLM | --- | Tool Dispatch | | prompt | | | | { | -------- ------ | bash: run_bash | ^ | read: run_read | | | write: run_wr | ----------- edit: run_edit | tool_result | } | ------------------核心创新用**分发字典dispatch map**替代硬编码的工具调用实现工具的插拔式扩展。逐段解析1. 环境初始化WORKDIRPath.cwd()clientAnthropic(base_urlos.getenv(ANTHROPIC_BASE_URL))MODELos.environ[MODEL_ID]SYSTEMfYou are a coding agent at{WORKDIR}. Use tools to solve tasks. Act, dont explain.新增WORKDIR常量作为工作区根目录是路径沙箱的基础系统提示从 “Use bash” 改成 “Use tools”明确支持多工具2. 路径安全沙箱 ⭐ 核心安全机制defsafe_path(p:str)-Path:path(WORKDIR/p).resolve()ifnotpath.is_relative_to(WORKDIR):raiseValueError(fPath escapes workspace:{p})returnpath功能防止智能体访问工作目录之外的文件将输入路径解析为绝对路径校验路径是否在WORKDIR之下如果路径逃逸比如../etc/passwd直接抛出错误所有文件操作工具都会先调用这个函数做安全校验3. 工具实现提供了4个工具每个工具都是独立的处理函数1bash 工具和基础实现基本一致只是将cwd固定为WORKDIR提升安全性。2read_file 工具defrun_read(path:str,limit:intNone)-str:try:textsafe_path(path).read_text()linestext.splitlines()iflimitandlimitlen(lines):lineslines[:limit][f... ({len(lines)-limit}more lines)]return\n.join(lines)[:50000]exceptExceptionase:returnfError:{e}功能安全读取文件内容支持limit参数限制读取行数避免大文件撑爆上下文超过行数限制时会提示剩余行数更友好统一异常处理错误信息直接返回给模型3write_file 工具defrun_write(path:str,content:str)-str:try:fpsafe_path(path)fp.parent.mkdir(parentsTrue,exist_okTrue)fp.write_text(content)returnfWrote{len(content)}bytes to{path}exceptExceptionase:returnfError:{e}功能写入文件自动创建不存在的父目录返回写入结果给模型确认4edit_file 工具defrun_edit(path:str,old_text:str,new_text:str)-str:try:fpsafe_path(path)contentfp.read_text()ifold_textnotincontent:returnfError: Text not found in{path}fp.write_text(content.replace(old_text,new_text,1))returnfEdited{path}exceptExceptionase:returnfError:{e}功能精确替换文件内容只替换第一次出现的匹配文本避免误修改匹配不到内容时明确返回错误模型可以调整匹配文本重试4. 工具分发字典 ⭐ 核心扩展机制TOOL_HANDLERS{bash:lambda**kw:run_bash(kw[command]),read_file:lambda**kw:run_read(kw[path],kw.get(limit)),write_file:lambda**kw:run_write(kw[path],kw[content]),edit_file:lambda**kw:run_edit(kw[path],kw[old_text],kw[new_text]),}键是工具名值是对应的处理函数用 lambda 统一参数传递适配不同工具的参数差异加新工具只需要在这里加一行映射不需要修改其他代码5. 工具定义数组TOOLS[{name:bash,description:Run a shell command.,input_schema:{type:object,properties:{command:{type:string}},required:[command]}},{name:read_file,description:Read file contents.,input_schema:{type:object,properties:{path:{type:string},limit:{type:integer}},required:[path]}},{name:write_file,description:Write content to file.,input_schema:{type:object,properties:{path:{type:string},content:{type:string}},required:[path,content]}},{name:edit_file,description:Replace exact text in file.,input_schema:{type:object,properties:{path:{type:string},old_text:{type:string},new_text:{type:string}},required:[path,old_text,new_text]}},]给 LLM 提供的工具描述遵循 Anthropic 函数调用格式每个工具包含名称、功能描述、参数结构JSON SchemaLLM 根据这些描述决定调用什么工具、传递什么参数6. 核心智能体循环和基础智能体循环几乎完全一致只有工具调用部分做了修改defagent_loop(messages:list):whileTrue:responseclient.messages.create(modelMODEL,systemSYSTEM,messagesmessages,toolsTOOLS,max_tokens8000,)messages.append({role:assistant,content:response.content})ifresponse.stop_reason!tool_use:returnresults[]forblockinresponse.content:ifblock.typetool_use:# 从分发字典取处理函数替代硬编码调用handlerTOOL_HANDLERS.get(block.name)outputhandler(**block.input)ifhandlerelsefUnknown tool:{block.name}print(f{block.name}:{output[:200]})results.append({type:tool_result,tool_use_id:block.id,content:output})messages.append({role:user,content:results})关键变化去掉了硬编码的run_bash调用改为从TOOL_HANDLERS字典中根据工具名查找处理函数支持未知工具的错误提示鲁棒性更强核心循环逻辑完全不变实现了对扩展开放、对修改关闭的开闭原则7. 交互式主循环和基础实现完全一致仅提示符做了修改。基础版对比组件基础版s01多工具版s02工具数量1个仅 bash4个bash, read, write, edit工具调用方式硬编码 bash 调用TOOL_HANDLERS分发字典路径安全无safe_path()沙箱防护Agent 循环固定完全不变设计优势扩展性极强加新工具只需要两步写工具处理函数在TOOL_HANDLERS和TOOLS中注册核心循环不需要动一行代码安全性提升路径沙箱防止文件越权访问专用工具比 bash 更可控减少安全风险稳定性更高核心循环经过验证不需要修改减少出问题的概率工具之间独立修改一个工具不影响其他功能使用示例启动后可以测试这些指令python agents/s02_tool_use.py s02Read thefilerequirements.txtread_file:[文件内容]s02Create afilecalled greet.py with a greet(name)functionwrite_file: Wrote50bytes to greet.py s02Edit greet.py toadda docstring to thefunctionedit_file: Edited greet.py s02Read greet.py to verify the edit workedread_file:[修改后的文件内容]核心收获这个版本建立了 Harness 层最核心的设计范式循环永远不变变化的只有工具和分发规则后续的所有功能扩展都是在这个基础上扩展更多工具和机制核心循环始终保持稳定。这种设计思想也贯穿了整个 Claude Code 的架构。本内容参考开源项目 learn-claude-code

相关文章:

Learn Claude Code Agent 开发 | 2、插拔式工具系统:扩展功能不修改核心循环

Learn Claude Code Agent 开发 | 2、插拔式工具系统:扩展功能不修改核心循环 整体概述 多工具分发核心实现是基础智能体循环的直接扩展,核心思想就是: “加一个工具, 只加一个 handler” – 循环不用动, 新工具注册进 dispatch map 就行。 …...

DHA之后,大脑营养进入GPC时代?

近年来,青少年脑健康逐渐成为家庭关注的重要议题。随着学习节奏加快、信息环境复杂,家长对于孩子专注力、记忆力以及学习效率的关注度不断提升。行业报告显示,国内DHA藻油相关产品市场规模持续扩大,预计2026年市场规模将达到超320…...

关于我使用MinMix创建了一个Tailwindcss学习网站

一、语言特性:Java 26 与模式匹配进化 1.1 Java 26 语言级别支持 IDEA 2026.1 EAP 最引人注目的变化之一,就是新增 Java 26 语言级别支持。这意味着开发者可以提前体验和测试即将在 JDK 26 中正式发布的语言特性。 其中最重要的变化是对 JEP 530 的全…...

gitru:一个由 Rust 打造的零依赖 Git 提交信息校验工具

gitru 基于 Git 的 commit-msg Hook 实现,用于在提交阶段自动校验提交信息格式。 在团队协作开发中,规范的 Git 提交信息是代码追溯、版本管理、自动生成变更日志的基础。 但现实往往是: 人工约束容易遗漏手动配置 Hook 繁琐提交信息格式随心…...

政务短信钓鱼攻击机理与防控研究 —— 以美国宾州 PennDOT 诈骗事件为例

摘要 2026 年 3 月 27 日,宾夕法尼亚州官方发布安全预警,提示公众警惕冒充 PennDOT(宾州交通局)的短信钓鱼诈骗。此类攻击以车辆管理、罚单缴费、证件状态异常为诱饵,通过仿冒政务身份诱导用户点击恶意链接&#xff0c…...

避坑指南:使用OverPy API获取OSM路网数据时常见的5个错误及解决方法

OverPy API实战避坑指南:5个高频错误与专业解决方案 当开发者第一次接触OverPy API与OpenStreetMap数据时,往往会陷入一些看似简单却影响深远的陷阱。我曾在一个城市交通分析项目中连续三天被边界框坐标顺序问题困扰,直到发现查询结果中道路片…...

3000份绝密文件外泄!Anthropic“核弹级”AI Mythos一夜封神,AGI防盗门被敲碎

Anthropic“防盗门”被敲了三下,声音来自自家后院。 一次配置失误,近3000份内部文档裸奔,把尚未出生的Mythos(对外昵称Capybara)推到了聚光灯下。 它有多强?一句话:在软件编程、学术推理、网络安…...

三步搞定!用bilidown轻松下载B站8K超清视频的完整指南

三步搞定!用bilidown轻松下载B站8K超清视频的完整指南 【免费下载链接】bilidown 哔哩哔哩视频解析下载工具,支持 8K 视频、Hi-Res 音频、杜比视界下载、批量解析,可扫码登录,常驻托盘。 项目地址: https://gitcode.com/gh_mirr…...

ArduPilot开源飞控之飞行模式切换机制解析

1. ArduPilot飞行模式概述 第一次接触ArduPilot时,最让我震撼的就是它丰富的飞行模式。就像开车时有手动挡、自动挡、运动模式一样,无人机也需要根据不同的飞行场景选择合适的"驾驶模式"。举个例子,新手练习时用Stabilize模式就像开…...

全网最全!网络安全全岗位解析(2026版)

全网最全!网络安全全岗位解析(2026版) 摘要:随着数字化转型加速,网络安全已成为企业、政务、互联网大厂的核心刚需,人才缺口持续扩大,2026年国内网络安全人才缺口已突破327万,全球缺…...

从零到上线:手把手教你用LLaMA-Factory + Python脚本自动化微调Qwen2.5模型

从零到上线:手把手教你用LLaMA-Factory Python脚本自动化微调Qwen2.5模型 在AI模型开发领域,微调预训练模型已成为快速适配特定任务的主流方法。然而,传统微调流程往往需要开发者反复手动调整配置文件、执行训练命令、监控训练过程&#xff…...

运维面试别再背八股文了!这15道高频笔试题,我用真实排错案例给你讲透

运维面试突围指南:用真实故障案例拆解15道高频技术题 去年冬天的一个凌晨,我接到了一通紧急电话——某电商平台的支付系统突然瘫痪,每分钟损失超过六位数。当我顶着寒风赶到机房时,发现这只是因为一个简单的NTP时间不同步问题。这…...

LangChain4j向量化实战避坑:OpenAI、本地模型、Qdrant选哪个?我的踩坑记录

LangChain4j向量化实战避坑指南:OpenAI、本地模型与Qdrant的深度抉择 当Java开发者尝试构建基于大语言模型的应用时,LangChain4j框架中的向量化组件往往成为技术栈选型的第一个分水岭。我在三个实际项目中分别尝试了不同组合方案后,发现每个…...

小产后吃什么恢复快?科学修护助力身体回归健康

小产对女性身体的损伤不容忽视,气血亏虚、子宫损伤等问题若调理不当,可能留下长期健康隐患。当前,小产后修护已成为女性健康领域的重要关注点,如何通过科学方式实现高效恢复,避免浅层调理带来的后续问题,是…...

C语言数组操作:3种移除元素方法实战对比(附LeetCode真题解析)

C语言数组操作:3种移除元素方法实战对比(附LeetCode真题解析) 在算法面试和日常编程中,数组操作是最基础也最常考察的技能点之一。移除数组中特定元素这类看似简单的任务,却能很好地检验程序员对内存管理、算法效率和…...

重新定义开源RTS体验:Beyond All Reason深度技术解析

重新定义开源RTS体验:Beyond All Reason深度技术解析 【免费下载链接】Beyond-All-Reason www.beyondallreason.info 项目地址: https://gitcode.com/gh_mirrors/be/Beyond-All-Reason Beyond All Reason是一款基于Spring引擎开发的开源实时战略游戏&#xf…...

彻底禁用fmt库文件系统依赖:从编译到代码的全链路方案

彻底禁用fmt库文件系统依赖:从编译到代码的全链路方案 【免费下载链接】fmt A modern formatting library 项目地址: https://gitcode.com/GitHub_Trending/fm/fmt 在C项目中,fmt库是一个现代格式化库,它提供了高效的类型安全格式化功…...

从RS232到112G SerDes:高速串行接口的‘逆袭’简史与FPGA工程师的生存指南

从RS232到112G SerDes:高速串行接口的技术革命与工程师转型指南 在数字通信领域,接口技术的演进犹如一场静默的革命。二十年前,工程师们还在为并行总线的布线复杂度和时钟偏移问题头疼不已;而今天,单通道112G PAM4 Ser…...

BoltDB vs Redis 读性能对比:实测表现与原理差异

一、前言 BoltDB(bbolt)与 Redis 都是高并发场景下常见的键值存储,但存储架构、存储介质、并发模型完全不同,导致两者在读性能、延迟、并发扩展性上呈现巨大差异。 本文从原理、延迟、并发读能力、资源开销四个维度对比两者的读性…...

Sora.FM零基础部署指南:3步上手AI视频生成工具的Linux实践方案

Sora.FM零基础部署指南:3步上手AI视频生成工具的Linux实践方案 【免费下载链接】sorafm 项目地址: https://gitcode.com/GitHub_Trending/so/sorafm Sora.FM是一款基于Sora AI技术的开源视频生成平台,支持通过文本描述创建高质量AI视频。本指南专…...

如何用JavaScript高效处理PSD文件:Ag-PSD库的完整技术指南

如何用JavaScript高效处理PSD文件:Ag-PSD库的完整技术指南 【免费下载链接】ag-psd Javascript library for reading and writing PSD files 项目地址: https://gitcode.com/gh_mirrors/ag/ag-psd 在当今Web应用开发中,处理Photoshop文档&#xf…...

3大突破!零门槛掌握资源嗅探:猫抓插件全平台使用指南

3大突破!零门槛掌握资源嗅探:猫抓插件全平台使用指南 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 一、为什么你需要专业的资源嗅探工具? 场景化痛点直击 作为…...

遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析

遥感项目实战:用SNAP高效处理Sentinel-2多景影像进行地表覆盖分析 当我们需要对大面积区域进行地表覆盖分析时,单景Sentinel-2影像往往无法满足需求。这时,多景影像的拼接与处理就成为关键步骤。本文将带您深入了解如何利用SNAP软件高效处理S…...

JS逆向新手也能搞定:手把手教你用Node.js补全ali140滑块canvas环境(附完整代码)

JS逆向新手也能搞定:手把手教你用Node.js补全ali140滑块canvas环境(附完整代码) 第一次接触JS逆向时,看到那些复杂的加密逻辑和环境检测代码,确实让人望而生畏。特别是遇到canvas这种需要模拟浏览器环境的场景&#xf…...

Lean 4:用数学证明构建高可靠软件的革命性工具

Lean 4:用数学证明构建高可靠软件的革命性工具 【免费下载链接】lean4 Lean 4 programming language and theorem prover 项目地址: https://gitcode.com/GitHub_Trending/le/lean4 问题:当系统崩溃成为不可承受之重 2024年3月,某医疗…...

3大突破性功能:Koodo Reader重塑你的跨平台数字阅读体验

3大突破性功能:Koodo Reader重塑你的跨平台数字阅读体验 【免费下载链接】koodo-reader A modern ebook manager and reader with sync and backup capacities for Windows, macOS, Linux and Web 项目地址: https://gitcode.com/GitHub_Trending/koo/koodo-reade…...

每日算法练习:LeetCode 151. 反转字符串中的单词 ✅

大家好,我是你们的算法小伙伴。今天我们来练习一道字符串处理的经典中等题 ——LeetCode 151. 反转字符串中的单词。这道题考察对空格和单词边界的处理,是面试中高频的字符串操作题。题目描述给你一个字符串 s,请你反转字符串中单词的顺序。单…...

STM32架构解析:哈佛与冯·诺依曼的工程实践

STM32处理器架构解析:哈佛结构与冯诺依曼结构的工程实践 1. 计算机体系结构基础 1.1 冯诺依曼体系结构 冯诺依曼体系结构(Von Neumann architecture)是现代计算机的基础设计范式,其核心特征包括: 统一存储结构 &am…...

Halcon角度计算双雄对比:orientation_region和smallest_rectangle2到底该用哪个?

Halcon角度计算双雄对比:orientation_region与smallest_rectangle2的实战抉择 在工业视觉检测中,区域角度计算是定位、对齐和测量的基础操作。Halcon作为机器视觉领域的标杆工具,提供了orientation_region和smallest_rectangle2两个核心算子来…...

C语言和C++有啥区别?孩子学编程该选哪个

C乃是当下国内信息学奥赛所指定的语言,它还是现今最为流行的编程语言当中的一种,所以不少孩子于选择编程语言去学习时,会挑选C这种编程语言。从C的名字不难看出,它跟老牌语言C语言之间有着颇深的关系。那么,C与C语言的…...