Code2Prompt 文件过滤与命令行实战从 glob include/exclude 到 Token 计数与 Git 集成【免费下载链接】code2promptA CLI tool to convert your codebase into a single LLM prompt with source tree, prompt templating, and token counting.项目地址: https://gitcode.com/GitHub_Trending/co/code2promptCode2Prompt 是一款将代码库转换为单个 LLM 提示Prompt的 CLI 工具支持源码树展示、Handlebars 模板定制与 Token 计数。本文以 官方日文使用指南 为骨架结合include/excludeglob 过滤的设计文档与核心源码实现系统讲解文件筛选、Token 估算、输出控制与 Git 集成等完整用法读完即可在真实项目中精确控制哪些代码进入提示词。一、核心用法速览从代码库目录生成提示词是 Code2Prompt 最基本的操作code2prompt path/to/codebase命令会遍历path/to/codebase下的文件遵循.gitignore规则将其内容与源码树一并组装为提示词输出。若需要自定义模板可以传入 Handlebars 模板文件code2prompt path/to/codebase -t path/to/template.hbs内置模板位于仓库的 crates/code2prompt-core/templates 目录例如write-git-commit.hbs、write-github-pull-request.hbs、refactor.hbs、fix-bugs.hbs等覆盖代码改写、Bug 排查、文档编写、新功能实现等多种场景。二、glob 模式过滤文件include 与 exclude过滤是控制提示词内容规模最直接的手段。使用 glob 模式包含指定文件code2prompt path/to/codebase --include*.rs,*.toml使用 glob 模式排除指定文件code2prompt path/to/codebase --exclude*.txt,*.md也可以从源码树中剔除特定类型文件如数据文件code2prompt path/to/codebase --exclude*.npy,*.wav命令行参数定义可参见 args.rs-i, --include与-e, --exclude均接收可重复传入的字符串列表多个模式用逗号分隔两个列表彼此独立。过滤语义四个象限glob_pattern_filter 设计文档 用集合论精确定义了过滤行为。设A为匹配任一 include 模式的文件集合B为匹配任一 exclude 模式的文件集合Ω为整个项目树Include 列表Exclude 列表保留的文件A ∅B ∅Ω全部保留A ∅B ≠ ∅¬B黑名单A ≠ ∅B ∅A白名单A ≠ ∅B ≠ ∅A \ B白名单减去黑名单四种情形归纳为简单心智模型都不指定全部文件进入提示词仅 exclude作为黑名单剔除匹配排除模式的文件仅 include作为白名单只保留匹配包含模式的文件两者并存先按 include 白名单筛选再剔除命中 exclude 的文件。关键设计点是重叠区C A ∩ B默认丢弃当同一文件同时命中 include 与 exclude 时exclude 优先。这也是文档中明确说明--include-priority选项已被移除的原因——若包含优先其结果等价于只使用 include 列表即上面第 3 种情形该选项不提供额外表达能力。源码印证决策表与模式规范化过滤核心逻辑位于 filter.rs 的should_include_file函数其决策表与文档完全对应let result match (included, excluded) { (true, true) false, // 两者都命中 → 排除优先 (true, false) true, // 仅命中 include → 保留 (false, true) false, // 仅命中 exclude → 排除 (false, false) include_globset.is_empty(), // 未命中且无 include 规则 → 全部保留 };另外两点实现细节值得注意路径必须是相对路径注释明确要求传入相对基准目录的路径绝对路径会导致模式匹配不符合预期见 filter.rs。模式规范化build_globset在构建GlobSet时会自动为不含/的模式加上**/前缀例如*.rs会被规范化为**/*.rs从而递归匹配任意层级目录下的文件同时会展开{}花括号语法并忽略或警告非法模式见 filter.rs。过滤逻辑的测试用例可参见 filter_test.rs。上图以维恩图直观呈现 include/exclude 两个集合及其重叠区的关系——其中标注的include_priority对应文档中已被移除的旧选项当前实际行为是重叠区默认排除。三、glob 通配符语法速查要写出准确的过滤规则需要掌握 glob 通配符。以下语法完整收录于 glob_patterns 说明模式含义示例*匹配任意数量字符含 0 个*.txt匹配所有.txt文件?匹配恰好 1 个字符file?.txt匹配file1.txt、fileA.txt不匹配file10.txt[]匹配方括号内任意 1 个字符file[1-3].txt匹配file1.txt至file3.txt[!]或[^]匹配不在方括号内的任意字符file[!1-3].txt匹配file4.txt、fileA.txt**递归匹配任意层级目录**/*.txt匹配当前目录及所有子目录下的.txt文件{}匹配逗号分隔的任一模式file{1,2,3}.txt、*.{jpg,png}、{a,b}*.txt实用组合示例# 只看 Rust 与配置文件 code2prompt . --include*.rs,*.toml # 排除构建产物与数据文件 code2prompt . --exclude**/target/**,*.npy,*.wav # 只看 src 与 tests 下的源码 code2prompt . --includesrc/**,tests/** --exclude*.tmp四、Token 计数与 Tokenizer 选择生成的提示词要放进 LLM 上下文窗口Token 规模是关键指标。显示估算 Token 数code2prompt path/to/codebase --token-formatformat--token-format接受两种取值raw机器可读的纯数字与format人类可读、带单位格式对应源码中 tokenizer.rs 的TokenFormat枚举。指定 Token 化所使用的编码器code2prompt path/to/codebase --encodingp50ktokenizers 说明 列出的受支持编码及对应模型如下CLI 参数底层编码典型 OpenAI 模型cl100kcl100k_baseChatGPT 系列、text-embedding-ada-002p50kp50k_base代码模型、text-davinci-002、text-davinci-003p50k_editp50k_edittext-davinci-edit-001、code-davinci-edit-001等编辑模型r50kr50k_base即gpt2davinci等 GPT-3 模型实现层面tokenizer.rs 通过tiktoken-rs惰性加载对应的CoreBPE编码器cl100k_base、p50k_base、p50k_edit、r50k_base与 args.rs 中--encoding的可选值一致。重要提示文档明确指出展示的 Token 数是估算值。Code2Prompt 在处理完成并追加行号后对每个文件并行计数再累加模板开销并不会将完整提示词重新 Token 化。因此片段边界与模板转换可能导致实际数字不同该估算不保证是上限详见 tokenizers.md。五、输出控制文件、JSON 与格式选项写入输出文件code2prompt path/to/codebase --outputoutput.txtJSON 结构化输出code2prompt path/to/codebase --jsonJSON 输出结构如下{ prompt: 生成されたプロンプト, directory_name: codebase, token_count: 1234, model_info: ChatGPTモデル、text-embedding-ada-002, files: [] }即包含生成的提示词本体、目录名、Token 估算值、所用模型/编码信息以及文件清单files数组。数值字段名token_count保持稳定JSON 外层结构与序列化时的转义不计入 Token 计算。行号与代码块控制为源码代码块添加行号code2prompt path/to/codebase --line-numbers禁用 Markdown 代码块对代码的包裹适合无代码块约定的模板或纯文本场景code2prompt path/to/codebase --no-codeblock这两项分别对应 args.rs 的-l, --line-numbers与 args.rs 的--no-codeblock。六、Git 集成提交信息与 Pull RequestCode2Prompt 能基于 Git 变更直接生成提交信息与 PR 描述。针对已暂存staged文件生成提交信息code2prompt path/to/codebase --diff -t templates/write-git-commit.hbs基于分支比较生成 Pull Requestcode2prompt path/to/codebase --git-diff-branch main, development --git-log-branch main, development -t templates/write-github-pull-request.hbs--diff开关引入暂存区 diff--git-diff-branch与--git-log-branch各接收两个以逗号分隔的分支名num_args 2, value_delimiter ,见 args.rs分别生成两分支间的 diff 与提交日志。配合 write-git-commit.hbs 与 write-github-pull-request.hbs 模板即可得到结构化、可直接使用的文本。七、小结本文围绕 filter_files 使用指南 展开完整覆盖了 Code2Prompt 的常用命令链路基础生成 → glob 过滤-i/-e的四象限语义与源码决策表→ Token 估算与编码选择 → 文件/JSON 输出与格式微调 → Git 变更驱动的内容生成。掌握过滤语义是控制提示词质量与成本的关键include 列表一出现即成为白名单exclude 列表叠加为黑名单重叠区默认丢弃。配合--token-formatformat即时校验规模、--json做程序化消费、模板系统做场景化定制Code2Prompt 可以稳定嵌入代码 → 提示词 → LLM的开发工作流中。如需深入可继续阅读 glob_pattern_filter 设计文档、glob 语法说明 与 tokenizers 说明。【免费下载链接】code2promptA CLI tool to convert your codebase into a single LLM prompt with source tree, prompt templating, and token counting.项目地址: https://gitcode.com/GitHub_Trending/co/code2prompt创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考