【从零手写 ClaudeCode:learn-claude-code 项目实战笔记】(2)Tool Use (工具使用)

简介: 本章详解如何为AI Agent添加专用工具(如read/write/edit_file),通过dispatch map机制实现“加工具只加handler”,无需改动主循环;引入safe_path路径沙箱提升安全性与鲁棒性,告别bash滥用。配套代码清晰易懂,新手友好。

第二章 Tool Use (工具使用)

s01 > [ s02 ] s03 > s04 > s05 > s06 | s07 > s08 > s09 > s10 > s11 > s12

“本专栏基于开源项目 learn-claude-code 的官方文档。原文档非常硬核,为了方便像我一样的新手小白理解,我对文档进行了逐行精读,并加入了很多中文注释、大白话解释和踩坑记录。希望这套‘咀嚼版’教程能帮你推开 AI Agent 开发的大门。”

项目地址:shareAI-lab/learn-claude-code: Bash is all you need - A nano Claude Code–like agent, built from 0 to 1

"加一个工具, 只加一个 handler" -- 循环不用动, 新工具注册进 dispatch map 就行。

一、问题-Robustness (鲁棒性)Security (安全性)

只有 bash 时, 所有操作都走 shell。如果你的 Agent 只有一个工具 bash,那么无论它想做什么(读取文件、写入文件、修改内容),它必须通过执行 shell 命令来完成。

  • 想读文件?它得执行 cat filename
  • 想写文件?它得执行 echo "content" > filename
  • 想改文件?它得执行 sed 命令。

cat 截断不可预测, sed 遇到特殊字符就崩, 每次 bash 调用都是不受约束的安全面。专用工具 (read_file, write_file) 可以在工具层面做路径沙箱。

关键洞察: 加工具不需要改循环。

二、解决方案

+--------+      +-------+      +------------------+
|  User  | ---> |  LLM  | ---> | Tool Dispatch    |
| prompt |      |       |      | {                |
+--------+      +---+---+      |   bash: run_bash |
                    ^           |   read: run_read |
                    |           |   write: run_wr  |
                    +-----------+   edit: run_edit |
                    tool_result | }                |
                                +------------------+

The dispatch map is a dict: {tool_name: handler_function}.
One lookup replaces any if/elif chain.

1.引入专用工具,替代滥用 Bash

s02 不再让模型什么都用 bash 解决,而是提供了 read_file, write_file, edit_file 这三个专用函数。

2.强制实施路径沙箱 (safe_path)

这是 s02 最重要的安全升级。所有涉及文件操作的专用工具(read, write, edit),在执行前都会先通过 safe_path 函数进行检查。

三、工作原理

  1. 每个工具有一个处理函数。路径沙箱防止逃逸工作区。
def safe_path(p: str) -> Path:
    #解析为绝对路径,并消除 .. 和 .
    path = (WORKDIR / p).resolve() 

    #检查路径是否在工作目录内,防止用户访问非法路径。
    if not path.is_relative_to(WORKDIR): 
        raise ValueError(f"Path escapes workspace: {p}")
    return path

def run_read(path: str, limit: int = None) -> str:
    text = safe_path(path).read_text()
    lines = text.splitlines()
    if limit and limit < len(lines):
        lines = lines[:limit]
    return "\n".join(lines)[:50000]
  1. dispatch map 将工具名映射到处理函数。
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 kw`**:这是一个匿名函数,作为中间层,负责接收大模型发来的任意参数。

  1. 循环中按名称查找处理函数。循环体本身与 s01 完全一致。
for block in response.content:
    if block.type == "tool_use":
        handler = TOOL_HANDLERS.get(block.name)
        output = handler(**block.input) if handler \
            else f"Unknown tool: {block.name}"
        results.append({
   
            "type": "tool_result",
            "tool_use_id": block.id,
            "content": output,
        })

加工具 = 加 handler + 加 schema。循环永远不变。

四、相对 s01 的变更

组件 之前 (s01) 之后 (s02)
Tools 1 (仅 bash) 4 (bash, read, write, edit)
Dispatch 硬编码 bash 调用 TOOL_HANDLERS 字典
路径安全 safe_path() 沙箱
Agent loop 不变 不变

五、试一试

cd learn-claude-code
python agents/s02_tool_use.py

试试这些 prompt (英文 prompt 对 LLM 效果更好, 也可以用中文):

  1. Read the file requirements.txt
  2. Create a file called greet.py with a greet(name) function
  3. Edit greet.py to add a docstring to the function
  4. Read greet.py to verify the edit worked

六、其他

这里的tool其实就是函数调用,但不止于此

在 Claude 的 Messages API 中,tools 参数确实可以包含你定义的函数(客户端工具),也可以包含来自 MCP(Model Context Protocol)服务器的工具,还可以包含由 Anthropic 提供的服务器端工具。

相关文章
|
机器学习/深度学习 Python
处理不平衡数据的十大Python库
数据不平衡是机器学习中一个常见的挑战,其中一个类的数量明显超过其他类,这可能导致有偏见的模型和较差的泛化。有各种Python库来帮助有效地处理不平衡数据。在本文中,我们将介绍用于处理机器学习中不平衡数据的十大Python库,并为每个库提供代码片段和解释。
461 2
|
23小时前
|
机器学习/深度学习 人工智能 JSON
AI 术语满天飞?90% 的人只懂名词,不懂为什么!
本文不堆砌概念,只讲前因后果:从大模型底层逻辑,到 Context、RAG、Function Calling、MCP、Skills 的核心关联,拆解所有面试高频考点,让你告别 “名词解释”,吃透原理,面试直接碾压面试官!
AI 术语满天飞?90% 的人只懂名词,不懂为什么!
|
21小时前
|
人工智能 安全 API
OpenClaw(Clawdbot)云端/本地部署+阿里云百炼API配置+安全 Skill 清单,恶意插件零接触指南
OpenClaw(原Clawdbot)的Skill生态已进入爆发期,ClawHub平台汇聚的5700+技能插件覆盖办公、开发、创作等全场景需求,让AI助手的能力边界无限延伸。但光鲜背后暗藏致命陷阱:Koi Security报告显示,约12%的Skill存在恶意行为,近期曝光的ClawHavoc供应链攻击中,黑客将恶意代码伪装成“加密钱包追踪器”,导致超1000名用户的API密钥被窃取、设备植入后门。
62 9
|
1天前
|
人工智能 自然语言处理 安全
保姆级图文教学!OpenClaw(Clawdbot)阿里云与本地部署与必装 Skills 精选及避坑指南
OpenClaw 是由 PSPDFKit 创始人 Peter Steinberger 于 2025 年 11 月推出的开源 AI Agent,其核心特性在于本地运行保障数据隐私,同时支持 WhatsApp、Telegram、Slack 等 12 个主流平台接入,后端可灵活适配 Claude、GPT-4o 或本地 Ollama 模型,不绑定任何云服务商。2026 年 1 月,该项目因商标纠纷在四天内完成两次更名(Clawdbot → Moltbot → OpenClaw),创始人加入 OpenAI 后项目移交开源基金会维护,截至 2026 年 3 月,GitHub Star 数已突破 220,0
117 8
|
23小时前
|
人工智能 Linux API
保姆级OpenClaw(Clawdbot)部署手册:阿里云一键部署、本地部署、百炼API配置与避坑指南
OpenClaw(曾用名Clawdbot/Moltbot)是一款面向任务自动化与工具调用的开源AI智能体框架,支持通过自然语言完成文件处理、代码编写、数据分析、系统管理、信息检索等自动化操作,可在云端与本地环境稳定运行。2026年版本进一步优化了部署流程、模型兼容与国内网络适配,尤其完善了对阿里云轻量服务器与阿里云百炼大模型的原生支持。本文基于2026年最新版本,提供**零基础可直接复制执行**的阿里云部署、本地部署、阿里云百炼API配置流程,附带完整代码命令、服务管理指令与高频问题解决方案,不涉及其他云平台信息,满足新手快速搭建与稳定使用需求。
102 2
|
19小时前
|
人工智能 安全 Linux
OpenClaw(Clawdbot)喂饭级指南:阿里云/本地部署、百炼API配置、核心Skill获取、实用技巧与避坑手册
OpenClaw(原Clawdbot,俗称“小龙虾”)作为2026年热门的开源AI Agent框架,其设计核心是“基础框架+第三方技能”的模块化架构——官方仅提供基础交互能力,真正的智能性需通过安装适配场景的Skills实现。多数用户部署后觉得“不够智能”,核心问题并非工具本身,而是未掌握技能拓展与使用技巧。
103 0
|
Linux 网络安全 网络虚拟化
|
3天前
|
人工智能 JavaScript 测试技术
保姆级教程:OpenClaw阿里云及本地部署+Claude Code集成,打造全能 AI 编程助手
在AI编程工具百花齐放的2026年,Anthropic推出的Claude Code凭借72.5%的SWE-bench测试高分、25倍于GitHub Copilot的上下文窗口,成为开发者追捧的智能编程助手。但单一工具仍有局限——Claude Code擅长代码生成与审查,却缺乏灵活的部署与自动化执行能力;而OpenClaw(前身为Clawdbot)作为开源AI代理框架,能完美弥补这一短板,通过云端与本地双部署,实现“代码开发-测试-部署”全流程自动化。
1792 13
|
机器学习/深度学习 开发框架 .NET
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)
4716 0
YOLOv5的Tricks | 【Trick6】学习率调整策略(One Cycle Policy、余弦退火等)