Install
openclaw skills install @thcjp/explain-code-tool-freeopenclaw skills install @thcjp/explain-code-tool-free代码解释工具免费版为开发者提供直观的代码理解辅助能力。工具通过日常类比、ASCII可视化图表、逐行遍历解读和常见误区提示,帮助开发者快速理解不熟悉的代码逻辑。
本版本适合学习新代码库、新成员入门和技术学习场景。所有解释均以自然语言配合图表呈现,降低代码理解门槛。
将代码概念与日常生活中的事物进行比较,降低理解难度。
解释原则:
类比示例:
| 代码概念 | 日常类比 |
|---|---|
| 变量 | 标了标签的盒子,里面装数据 |
| 函数 | 一台加工机器,输入原料,输出产品 |
| 数组 | 一排编号的抽屉 |
| 对象 | 一个工具箱,里面有工具和说明书 |
| 循环 | 重复做同一件事直到满足条件 |
| 条件判断 | 十字路口的路标,根据条件选路 |
| 递归 | 俄罗斯套娃,每层打开里面还有一层 |
| 回调函数 | 留个电话,事情办完打给我 |
| Promise | 餐厅取餐器,响了就能取餐 |
| 闭包 | 背包,函数随身带着自己的变量 |
输入: 用户提供类比解释法所需的指令和必要参数。 处理: 按照skill规范执行类比解释法操作,遵循单一意图原则。 输出: 返回类比解释法的执行结果,包含操作状态和输出数据。
使用 ASCII art 展示代码执行流程和数据结构。
流程图示例:
用户请求 → [路由器] → [控制器] → [服务层] → [数据库]
↓ ↓ ↓
参数验证 业务逻辑 数据查询
↓ ↓ ↓
格式校验 权限检查 结果返回
↓ ↓ ↓
失败←────────失败←───────失败
↓
返回错误
数据结构可视化:
数组: [10, 20, 30, 40, 50]
索引: 0 1 2 3 4
对象:
┌─────────────────────┐
│ user │
├─────────────────────┤
│ name: "张三" │
│ age: 25 │
│ email: "z@e.com" │
│ skills: [...] │
└─────────────────────┘
调用栈可视化:
调用栈(从下往上):
┌─────────────────────┐
│ main() │ ← 程序入口
├─────────────────────┤
│ calculateTotal() │ ← 计算总价
├─────────────────────┤
│ applyDiscount() │ ← 应用折扣
├─────────────────────┤
│ validateCoupon() │ ← 验证优惠券 ← 当前执行
└─────────────────────┘
输入: 用户提供ASCII 可视化图表所需的指令和必要参数。 处理: 按照skill规范执行ASCII 可视化图表操作,遵循单一意图原则。 输出: 返回ASCII 可视化图表的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作逐步解释代码执行过程。
def binary_search(arr, target):
"""
类比:在字典里找单词
- 字典是按字母排序的(数组已排序)
- 每次翻到中间页看是大了还是小了
- 不断缩小范围直到找到
"""
left, right = 0, len(arr) - 1
while left <= right:
mid = (left + right) // 2
if arr[mid] == target:
return mid
elif arr[mid] < target:
left = mid + 1
else:
right = mid - 1
return -1 # 翻完了都没找到
输入: 用户提供逐行代码遍历所需的指令和必要参数。 处理: 按照skill规范执行逐行代码遍历操作,遵循单一意图原则。 输出: 返回逐行代码遍历的执行结果,包含操作状态和输出数据。
input_params参数,支持创建/查询/导出操作指出代码中容易出错的地方。
详细代码示例已移至
references/detail.md
输入: 用户提供常见问题所需的指令和必要参数。 处理: 按照skill规范执行常见问题操作,遵循单一意图原则。 输出: 返回常见问题的执行结果,包含操作状态和输出数据。 能力覆盖范围:本skill的核心能力覆盖以下场景关键词:用可视化图表和类、比解释代码、帮助开发者快速理、解代码逻辑与结构、面向开发者的代码、理解辅助工具、通过类比、图表和逐步遍历帮、助理解代码逻辑、核心能力、日常类比解释代码、流程图展示执行逻、逐行代码遍历解读、常见问题与误区提、单文件代码解释等。这些关键词对应description中声明的使用场景,均已在上述能力点中提供对应的操作支持。
遇到不理解的代码时获取解释。
输入:请解释这段代码
const memoize = (fn) => {
const cache = {}
return (...args) => {
const key = JSON.stringify(args)
return key in cache
? cache[key]
: (cache[key] = fn(...args))
}
}
解释输出:
详细代码示例已移至
references/detail.md
在代码审查时理解他人代码意图。
输入:这段代码在做什么?
async function fetchWithRetry(url, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
const response = await fetch(url)
if (response.ok) return response
throw new Error(`HTTP ${response.status}`)
} catch (err) {
if (i === maxRetries - 1) throw err
await new Promise(r => setTimeout(r, 2 ** i * 1000))
}
}
}
解释输出:
类比:就像打电话没人接,等一会儿再打
- 这个函数会尝试请求一个URL
- 如果失败了,不会立刻放弃
- 而是等一会儿再试,最多试3次
- 每次等待时间会加倍(指数退避)
重试流程:
尝试1 → 失败 → 等1秒
↓
尝试2 → 失败 → 等2秒
↓
尝试3 → 失败 → 抛出错误(放弃了)
等待时间计算(2 ** i * 1000):
- i=0: 2^0 * 1000 = 1000ms (1秒)
- i=1: 2^1 * 1000 = 2000ms (2秒)
- i=2: 2^2 * 1000 = 4000ms (4秒)
这种"指数退避"策略的好处:
- 避免对方服务器被频繁重试压垮
- 给服务器恢复的时间
- 越往后等越久,减少无效重试
通过代码解释学习设计模式。
输入:请用代码示例解释观察者模式
解释输出:
类比:YouTube订阅功能
- 你订阅了一个频道(注册观察者)
- 频主发新视频时,所有订阅者都会收到通知
- 你可以随时取消订阅
结构图:
┌──────────────┐ 通知 ┌──────────────┐
│ Subject │ ──────────────────→ │ Observer A │
│ (频道主) │ ──────────────────→ │ Observer B │
│ │ ──────────────────→ │ Observer C │
│ observers[] │ └──────────────┘
│ subscribe() │
│ unsubscribe()│
│ notify() │
└──────────────┘
代码实现:
详细代码示例已移至
references/detail.md
在 AI Agent 中输入:
请解释 src/utils/auth.js 中的 verifyToken 函数
或者粘贴代码直接询问:
这段代码在做什么?
[粘贴代码]
Agent 会按照以下结构输出解释:
可以针对不理解的部分追问:
第15行的 reduce 操作能再详细解释一下吗?
version: "1.0"
style:
use_analogy: true # 使用类比
use_diagrams: true # 使用图表
detail_level: moderate # simple | moderate | detailed
language: zh-CN # 解释语言
output:
include_line_numbers: true
include_execution_flow: true
include_common_pitfalls: true
max_diagram_width: 80
supported_extensions:
- .js
- .ts
- .py
- .java
- .go
- .rs
- .cpp
这是一个电商系统的购物车计算逻辑,请解释...
请先解释这个模块的整体架构,然后深入核心函数
请画出这段代码的数据流向图
请比较 Promise.all 和 Promise.allSettled 的区别
免费版支持主流编程语言的代码解释,包括 JavaScript、TypeScript、Python、Java、Go、Rust、C++ 等。对于小众语言可能解释质量稍降。
建议将长代码拆分为函数级别逐个解释:
请先解释 main 函数的流程,然后解释 processData 函数
| 能力维度 | 免费版 | 专业版 |
|---|---|---|
| 代码范围 | 单文件 | 整个项目 |
| 分析深度 | 逐行解释 | 架构级分析 |
| 图表类型 | ASCII图 | Mermaid/UML |
| 批量解释 | 不支持 | 批量文档生成 |
| 历史记录 | 不支持 | 解释历史 |
| API文档生成 | 不支持 | 自动生成 |
可以要求更详细的解释:
请更详细地解释这段代码,包括每一步的执行过程和内存状态
| 依赖项 | 类型 | 是否必需 | 获取方式 |
|---|---|---|---|
| LLM API | API | 必需 | 由 Agent 内置 LLM 提供 |
| 错误场景 | 原因 | 处理方式 |
|---|---|---|
| 配置错误 | 参数缺失或格式错误 | 检查依赖说明中的配置要求 |
| 运行时错误 | 运行环境不满足 | 确认运行环境符合依赖说明 |
| 网络错误 | 连接超时或不可达 | 执行ping命令测试网络连通性,检查防火墙和代理设置连接后执行ping命令测试网络连通性,检查防火墙和代理设置连接后重新执行命令,参考国内替代方案 |
输入:用户提供操作指令和必要参数
输出:返回执行结果,包含操作状态和输出数据
用户: 执行核心功能
Skill: 正在执行核心功能...
Skill: 执行完成,结果如下: 操作成功