code2prompt - 满足「这是怎么做到的」好奇心的小工具


我发现自己经常对着一个有趣的 Github Repo 思考:「这看起来真不错!但是究竟是怎么做到的?」。但很多时候我无法满足我的好奇心。要么是这个项目并没有自带一个「How it works / 工作原理」的介绍(在我看来这应该是每个项目 README 的必备),要么是我没有时间或者耐心在层层叠叠的文件树或者错综复杂的调用链里自己找到答案。得益于近来 LLM 的上下文窗口增长,让 LLM 来帮我回答这一问题似乎是个不错的选择。即使 LLM 回答给出的答案可能有错误或者不完整,但至少能给出一些探索方向,让我自己的理解更有效率。然而在通常的对话窗口里复制粘贴代码有些烦人,更别提无法在文件数多的项目里应用了。为此,我(让 LLM)帮我写了一个小工具,让我能更方便的从代码生成发送给 LLM 的 prompt。

如何使用

具体使用起来很简单:

  1. 在GitHub项目页面,点击右上角"Code"→“Download Zip"下载代码
  2. 打开工具页面,点击"选择文件"并上传刚下载的zip包
  3. 根据文件数量或token大小进行筛选(比如排除test/、vendor/或package-lock.json等无关文件)
  4. 点击"Generate"生成提示词
  5. 点击"Copy"复制到剪贴板,然后粘贴到你喜欢的LLM对话工具中

还有一些其他特性:

  1. 文件树可以一次选中/取消选中整个文件夹
  2. 每个文件旁标记了该文件的大小和 token 预估
  3. 点击文件,可以直接展示该文件的内容(monaco editor)

实现原理

  1. 解析zip文件(jszip 库)
  2. 计算每个文件的token占用(用的是 gpt-tokenizer,基于 cl100k 计算,也就是 gpt-3.5-turbo 的分词器)
  3. 展示文件列表和占用空间最大的文件,并根据选择更新
  4. 最后用文件内容填充预设的提示模板

使用技巧

开发

可能的后续方向

其他方案对比