写文档教 AI 用代码

为什么必须写文档教 AI 用代码

这是 LLM 插件和传统开发最本质的区别,我用你输入的这个命令做完整演示,保证你看完立刻懂。


一、先搞清楚一个核心事实

你输入的/understand C:\xxx\aus-life-java,根本不是直接运行的脚本命令 。 它只是你发给 Claude 的一句 "自然语言指令",Claude 收到后,会自己去读project-scanner.md这个文档,然后自己生成真正要执行的脚本命令,再在后台偷偷运行。

project-scanner.md不是给人看的,是给 Claude 写的 "操作手册"。Claude 只会严格按照手册里写的步骤来做,手册里没写的,它绝对不会做。


二、你输入的命令,到底发生了什么

你输入的:

plaintext

复制代码
/understand C:\Users\Administrator\Desktop\zyf\aus-life-java

Claude 看到后,会立刻打开project-scanner.md,看到你写的:

调用扫描脚本的格式是:

bash

运行

复制代码
node scan-project.mjs "$PROJECT_ROOT" "$OUTPUT_PATH"

其中:

  • $PROJECT_ROOT = 用户输入的项目路径
  • $OUTPUT_PATH = 固定为 $PROJECT_ROOT/.understand-anything/tmp/ua-scan-files.json

然后 Claude 会自己生成真正执行的命令:

bash

运行

复制代码
node scan-project.mjs 
  "C:\Users\Administrator\Desktop\zyf\aus-life-java" 
  "C:\Users\Administrator\Desktop\zyf\aus-life-java\.understand-anything\tmp\ua-scan-files.json"

然后 Claude 在后台运行这个命令,你完全看不到。


三、传入路径和输出路径分别是干什么的

1. 第一个参数:传入路径($PROJECT_ROOT

就是你要分析的项目的根目录

  • 扫描脚本会从这个目录开始,遍历所有文件
  • 所有的相对路径(比如tests/src/)都是相对于这个目录计算的
  • 就是你输入的C:\Users\Administrator\Desktop\zyf\aus-life-java

2. 第二个参数:输出路径($OUTPUT_PATH

扫描脚本生成的 "文件清单 JSON" 的保存位置。 这是整个流程最关键的中间产物:

  • 扫描脚本遍历完所有文件,过滤掉不需要的之后,会生成一个 JSON 文件
  • 这个 JSON 里包含了所有要分析的文件的路径、语言、行数、分类等信息
  • 后面所有的 LLM 文件分析、知识图谱构建,都是基于这个 JSON 文件来做的
  • 这个路径是 Claude 自动生成的,不需要你输入,固定在项目的.understand-anything/tmp/目录下

四、为什么你加的那两行文档是必须的

现在你输入带--exclude的命令:

plaintext

复制代码
/understand C:\xxx\aus-life-java --exclude "target/*,bin/*"

如果没有你加的那两行文档:

Claude 看到--exclude参数,但它去读project-scanner.md,发现手册里只写了要传两个参数,根本没提--exclude这回事。 所以它会完全忽略这个参数,生成的命令还是:

bash

运行

复制代码
node scan-project.mjs "C:\xxx\aus-life-java" "C:\xxx\...\ua-scan-files.json"

没有--exclude,你前面写的所有代码都白写了。

有了你加的那两行文档之后:

Claude 再读手册,就会看到:

如果用户输入里有--exclude参数,记得在调用脚本时把它加在输出路径的后面,格式是--exclude "a/*,b/*"

所以它生成的命令就变成了:

bash

运行

复制代码
node scan-project.mjs 
  "C:\xxx\aus-life-java" 
  "C:\xxx\...\ua-scan-files.json" 
  --exclude "target/*,bin/*"

这时候你的代码才会真正生效。


五、用 Java 开发者最熟悉的类比

表格

传统 Java 开发 LLM 插件开发
你写了一个 Controller 接口 你写了一个脚本函数
你需要写 Swagger 文档告诉前端怎么调用这个接口 你需要写 Markdown 文档告诉 Claude 怎么调用这个脚本
前端只会按照 Swagger 文档里写的参数来传 Claude 只会按照 Markdown 文档里写的参数来传
Swagger 里没写的参数,前端不会传 Markdown 里没写的参数,Claude 不会传

你加的那两行文档,就相当于在 Swagger 里给接口新增了一个exclude参数。没有这两行,就相当于接口加了参数但没更新 Swagger,前端永远不会传这个参数。

这就是为什么说 "如果不改这个文件,你前面所有代码都白写了"。

相关推荐
aqi0039 分钟前
15天学会AI应用开发(九)利用Chroma持久化向量数据
人工智能·python·大模型·ai编程·ai应用
金銀銅鐵44 分钟前
借助 Pygame 探索最大公约数的规律
python·数学·游戏
ServBay18 小时前
9 个 Python 第三方库推荐,不用 AI 都好像多出一个团队
后端·python
用户83562907805118 小时前
如何使用 Python 添加和管理 Excel 批注(完整示例)
后端·python
用户83562907805118 小时前
使用 Python 管理 Excel 工作表:创建、复制、删除与重命名
后端·python
荣码1 天前
LangGraph多Agent协作:3个Agent干活比1个强,但我踩了4个坑
java·python
用户8356290780512 天前
Python 操作 PDF 附件:添加、查看与管理指南
后端·python
宇宙之一粟2 天前
乐企版式文件生成平台
java·后端·python
学测绘的小杨3 天前
CompassFusion:一个从 GNSS 到 GNSS/INS 组合导航的独立工程包
python