AI 编程助手到底在用哪些工具?(Claude Code、Codex CLI、Aider 深度解析)

AI 编程助手到底在用哪些工具?

Claude Code、Codex CLI、Aider 如何读取文件、搜索代码库、运行测试并提交代码——深入底层


AI 编程助手用起来像魔法一样。你输入"在 dashboard 页面加一个登录表单",工具就能找到正确的文件、写好组件、检查编译是否通过、跑完测试,然后把 git diff 展示给你。

但这里没有任何魔法——只是一个不断循环调用同一批 Unix shell 工具的过程,而这些工具在你的电脑上已经存在几十年了。

本文将详细拆解 AI 编程助手工作时究竟运行了哪些程序,这对性能和安全意味着什么,以及如果你想自己构建一个这样的工具需要了解什么。

适合人群:已经在使用 Claude Code、GitHub Copilot 或 Cursor 的开发者,希望深入理解其工作原理。


AI 编程助手如何运作:智能体循环

所有主流编程助手——Claude Code、OpenAI Codex CLI、Aider、Cline、Cursor——都遵循相同的基本智能体循环:

1. 接收你的提示词
2. 思考:我需要哪些上下文?
3. 调用工具(rg, cat, git, npm...)
4. 观察输出结果
5. 思考:下一步是什么?
6. 重复,直到任务完成

LLM 是大脑,shell 工具是双手。助手做的事情,你在终端里手动也能做到——它只是做得更快,不需要每一步都问你。

理解这些工具,整个系统就不再神秘。


1. 搜索工具:AI 如何读懂你的代码库

AI 编程助手在写任何一行代码之前,需要先理解现有的代码。它使用的正是开发者每天都在用的搜索工具。

ripgrep(rg)——主力搜索工具

Ripgrep 是几乎所有编程助手中调用最频繁的工具。速度极快,能识别 .gitignore,处理大型代码库也不会变慢。

# 查找包含某函数的所有文件
rg "authenticate" --type ts

# 查找函数定义
rg "^export function" src/ -n

# 带上下文的搜索
rg "handleLogin" -C 3

# 只列出匹配的文件名
rg "useAuth" -l

当你说"给登录函数加上错误处理",助手会先跑 rg 定位登录逻辑在哪里——然后才会动任何文件。

fd ——快速文件查找

按文件名模式查找文件,而非按内容。

fd -e test.ts          # 所有 TypeScript 测试文件
fd "*.config.js"       # 配置文件
fd -t f -name "*.env"  # 环境变量文件

find ——标准备用方案

在没有 fd 的环境中仍被广泛使用。

find src/ -name "*.py" -newer requirements.txt

grep ——通用备用方案

没有安装 rg 时,grep -r 能完成同样的工作,只是速度较慢。

性能小贴士:安装 ripgrep(brew install ripgrep / apt install ripgrep),你的 AI 编程助手在大型代码库中的搜索速度会有明显提升。


2. 文件读取工具:摸清现有代码

定位到正确文件后,助手会用最简单的命令读取文件。

cat ——读取完整文件

cat src/auth/login.tsx
cat src/lib/api.ts

head / tail ——读取文件片段

适合大文件、长日志,或者只需了解文件结构而不用全部加载的场景。

head -50 src/api/routes.ts    # 前 50 行
tail -100 logs/app.log        # 日志最后 100 行

wc ——先确认文件大小

助手通常会先检查行数,再决定是否读取完整文件。

wc -l src/models/user.py

ls / tree ——了解目录结构

ls -la src/components/
tree src/ --depth 2

3. 文件写入与编辑工具:动手修改

这里才是真正生成代码的地方。AI 根据变更范围选择不同的编辑策略。

创建新文件

从零编写新文件:

cat > src/components/LoginForm.tsx << 'EOF'
import React, { useState } from 'react'
// ... 生成的代码
EOF

patch ——应用结构化差异

用于精确、可审查的编辑:

patch src/auth/login.tsx < changes.patch

sed ——原地查找替换

用于跨文件的精准替换:

sed -i 's/oldFunctionName/newFunctionName/g' src/utils.ts

内联 Python / Node 脚本

用于复杂的 JSON、YAML 或配置文件转换:

python3 -c "
import json
with open('config.json') as f:
    data = json.load(f)
data['featureFlag'] = True
with open('config.json', 'w') as f:
    json.dump(data, f, indent=2)
"

4. 代码执行与测试工具:验证结果

设计良好的 AI 编程助手不只是写代码——它还会验证代码能否正常运行。编辑-编译-测试的循环会自动进行。

测试运行器

# Python(Django / FastAPI 项目常用)
pytest tests/ -v
pytest tests/test_auth.py::test_login -x   # 遇到第一个失败即停止

# JavaScript / TypeScript
npm test
npx jest src/auth/login.test.ts

# Go(微服务场景常用)
go test ./...

# Rust
cargo test

类型检查器

npx tsc --noEmit    # TypeScript,不生成输出文件
mypy src/           # Python 类型检查

代码检查与格式化

npx eslint src/ --fix
ruff check src/
npx prettier --write src/

构建验证

npm run build
cargo build
go build ./...
make

整个流程是:写代码 → 测试 → 读取错误输出 → 修复 → 再测试。AI 执行的是和开发者完全一样的循环,只是不需要喝咖啡休息。


5. Git 工具:理解历史记录并保存工作

Git 在编程助手的工作流中处于核心位置。既用于在修改之前理解上下文,也用于在修改之后保存工作。

读取状态与历史

git status                          # 发生了哪些变化
git diff                            # 具体的行级变更
git log --oneline -20               # 近期提交历史
git log main..HEAD --oneline        # 当前分支的变更
git blame src/auth/login.ts         # 谁在什么时候改了什么

提交变更

git add src/components/LoginForm.tsx
git commit -m "feat: add login form component"

用 GitHub CLI(gh)处理 PR 工作流

gh pr diff 142                      # 获取 PR 差异用于审查
gh pr create --title "..." --body "..."
gh pr checks                        # 检查 CI 状态
gh issue view 88                    # 读取 Issue 上下文

6. 包管理器与运行时工具

具体调用哪些工具取决于你的技术栈。

JavaScript / TypeScript 项目

npm install
npm run dev
npx <tool>
bun install && bun run dev

Python 项目

pip install -r requirements.txt
python manage.py migrate
uvicorn main:app --reload

Docker 与容器

docker compose up -d
docker logs app_container
docker exec -it container_name bash

API 测试

curl -X POST http://localhost:8000/api/login \
  -H "Content-Type: application/json" \
  -d '{"email":"test@example.com","password":"pass"}'

实战案例:"在 /dashboard 添加发帖表单"

当你把这个提示词发给 Claude Code 这样的编程助手时,实际执行的 shell 命令序列如下:

# 第一步:了解项目结构
ls src/
tree src/pages --depth 2

# 第二步:找到 dashboard 页面
rg "dashboard" src/ --type tsx -l
cat src/pages/dashboard.tsx

# 第三步:寻找可复用的现有表单模式
rg "form" src/components/ -l
cat src/components/CommentForm.tsx

# 第四步:了解 API 调用方式
rg "fetch|axios|api" src/lib/ -l
cat src/lib/api.ts

# 第五步:确认现有的 post 相关接口
rg "POST" src/api/ -n

# 第六步:编写新组件
cat > src/components/PostForm.tsx << 'EOF'
...生成的组件代码...
EOF

# 第七步:在 dashboard 页面添加 import
sed -i "s/from '.\/CommentForm'/from '.\/CommentForm'\nimport { PostForm } from '.\/PostForm'/" \
  src/pages/dashboard.tsx

# 第八步:验证 TypeScript 编译通过
npx tsc --noEmit

# 第九步:运行相关测试
npm test -- --testPathPattern=dashboard

# 第十步:查看变更内容
git diff

每一步都是普通的 shell 命令。智能之处在于知道该跑哪些命令、按什么顺序、如何解读输出结果


为什么这对开发者很重要

理解底层工具层有四个实际意义。

性能:如果没有安装 rg,AI 会退回到 grep,在大型代码库中会慢很多。安装 ripgrep 是对任何 AI 编程助手免费的性能提升。

调试 AI 的错误:当助手做出错误编辑时,通常可以追溯到它读错了什么。问问自己:它搜索了什么,找到了什么?错误几乎总是在工具输出里,而不是在 AI 的推理逻辑中。

安全性:AI 调用的每个工具都以你的身份凭证在你的机器上运行。知道它会调用 gitnpmdockercurl,可以帮你清晰地判断它实际需要哪些权限,并通过白名单施加适当限制。

自己构建编程助手:如果想构建类似 Claude Code 或 Aider 的智能体,现在你已经了解了完整的工具面。LLM 层几乎是次要的——真正的工作在于围绕这些程序设计干净的工具接口。


AI 编程助手完整工具清单

类别 使用工具
内容搜索 rg(ripgrep)、grepawk
文件查找 fdfindlstree
文件读取 catheadtailwc
文件写入 / 编辑 patchsedtee、内联脚本
运行代码 pythonnodegocargoruby
运行测试 pytestjestvitestgo testcargo test
构建 npm run buildcargo buildmakegradle
代码检查 / 类型检查 eslinttscmypyruffprettier
版本控制 gitgh(GitHub CLI)
包管理器 npmpipcargobrewapt
基础设施 dockerdocker composekubectl
网络 / API curlwgethttpie

常见问题

所有 AI 编程助手用的工具都一样吗?
核心工具——rggitcat 和测试运行器——在 Claude Code、Codex CLI、Aider 和 Cline 中都有。具体的调用方式和顺序有所不同,但底层程序是相同的。

AI 能访问我整个文件系统吗?
默认情况下,可以访问工作目录及其子目录。Claude Code 等工具支持权限白名单(例如 "Bash(git *)")来限制可执行的命令。

AI 为什么用 rg 而不是直接读所有文件?
读取大型代码库的所有文件会超出 LLM 的上下文窗口,消耗过多 token。先用 rg 搜索,让 AI 能精准定位真正需要读的内容。

用这些工具能自己构建编程助手吗?
可以。核心架构就是:LLM + 工具定义(bash、read、write、grep)+ 智能体循环。Aider 这样的开源项目提供了具体参考。shell 工具本身无需额外配置。

缺少某个工具会怎样?
AI 通常会优雅降级——rggrepfdfind。像 gh 这样的工具是可选的,没有安装时助手会跳过与 PR 相关的步骤。


总结

AI 编程助手之所以强大,不是因为它发明了处理代码的新方法——而是因为它极其擅长编排(orchestrate)已有的工具。在 Claude Code 底层运行的 rggitnpmpatch 命令,和开发者多年来一直在用的那些完全相同。

AI 负责推理:该用哪个工具、搜索什么、如何解读输出。工具负责执行:实际地读取、写入和运行代码。

理解了这种分工,AI 编程助手就不再是黑盒。它变成了一个你可以推理、优化、调试,乃至自己动手构建的系统。


延伸阅读


觉得本文有帮助?深入学习的最佳方式是开启 verbose 日志运行编程助手,观察它发出了哪些命令。一次会话能让你学到的,远比任何文档都多。


Get in Touch with us

Chat with Us on LINE

iiitum1984

Speak to Us or Whatsapp

(+66) 83001 0222

Related Posts

Our Products