news 2026/9/16 14:25:45

Code2Prompt 实战:用「菜谱数据库」示例看懂源码转 LLM Prompt 的完整生成流程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Code2Prompt 实战:用「菜谱数据库」示例看懂源码转 LLM Prompt 的完整生成流程

Code2Prompt 实战:用「菜谱数据库」示例看懂源码转 LLM Prompt 的完整生成流程

【免费下载链接】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

本篇技术指南以 Code2Prompt 仓库自带的my_recipes(菜谱数据库)示例为线索,完整讲解 CLI 工具如何把一个结构化目录(含 Source Tree 与每个文件全文)打包成一份可直接投喂给大模型的 Prompt。读完本文,你将掌握 code2prompt 生成结果的字段结构、Goal + Format + Context提示词组织框架,以及如何用过滤、自定义模板、输出格式等命令参数把任意"非代码类"文本项目变成高质量 LLM 上下文。

示例概览:一个等待被 LLM 读取的菜谱数据库

Code2Prompt 的核心定位是"把代码库转换成单个 LLM Prompt 的上下文工程工具"。它不只处理编程语言源码,同样适用于笔记、文档、配置乃至结构化文本数据。仓库在 website/src/assets/examples/my_recipes/ 目录下内置了三个演示场景,其中my_recipes被 Section0.astro 归类为 "Recipes Database 🧑‍🍳",与 "Codebase 👨‍💻"(node_app)和 "Personal Notes 📖"(history_notes)并列,用于官网首页的交互式演示。

该示例的原始目录结构如下:

my_recipes ├── pantry │ └── my_ingredients.txt └── recipes ├── pasta.txt ├── pizza.txt ├── salad.txt └── soup.txt

整个示例由两类纯文本文件构成:

  • pantry/my_ingredients.txt:冰箱里现有的食材清单;
  • recipes/*.txt:四道菜谱,每份包含 Ingredients(食材)与 Instructions(步骤)。

这正是"把日常数据目录交给 LLM 做个性化推荐"的典型场景:目标文件既不是代码也不是 Markdown,但借助 code2prompt 的文件遍历与格式化能力,它们能被原样、结构清晰地送入模型上下文。

code2prompt 生成结果的完整字段结构

运行code2prompt my_recipes后,工具生成的 Prompt 包含三个层次,prompt.md 正是它的真实输出样例。

第一层:Project Path 与 Source Tree

Prompt 以项目标识开头,紧接着是完整的目录树:

Project Path: my_recipes Source Tree: ```txt my_recipes ├── pantry │ └── my_ingredients.txt └── recipes ├── pasta.txt ├── pizza.txt ├── salad.txt └── soup.txt
这段 Source Tree 由工具在遍历文件系统时自动生成,其作用有两点:一是让模型"看见"整个项目的组织方式,理解文件之间的层级关系;二是为模型提供路径索引,便于后续引用具体文件。从源码结构看,Code2Prompt 会将遍历结果与过滤后的实际文件集对齐——被 `--include`/`--exclude` 规则过滤掉的文件/目录默认会从目录树中剪除(`--full-directory-tree` 可保留完整树形),确保树与正文内容始终一致。 ### 第二层:逐文件全文注入 目录树之后,每个文件按"相对路径 + 代码块"的格式依次排列: ```txt `my_recipes/pantry/my_ingredients.txt`: ```txt Available: pasta, tomato sauce, cheese

my_recipes/recipes/pasta.txt:

Ingredients: pasta, tomato sauce, garlic, basil Instructions: Boil pasta, heat sauce, mix, serve.

my_recipes/recipes/pizza.txt:

Ingredients: flour, tomato sauce, cheese, oregano Instructions: Make dough, add toppings, bake.

my_recipes/recipes/salad.txt:

Ingredients: lettuce, tomato, cucumber, olive oil Instructions: Chop ingredients, mix, drizzle oil.

my_recipes/recipes/soup.txt:

Ingredients: carrots, potatoes, chicken broth, onions Instructions: Boil broth, add vegetables, simmer.
这一层是 Prompt 的主体。值得注意的细节是: - 每个文件都带反引号包裹的相对路径标题,模型能据此将内容与 Source Tree 中的位置一一对应; - 文件内容包裹在独立的代码块中,与路径标题、相邻文件之间形成明确分隔,避免模型混淆多个文件的内容边界; - 纯文本文件无需任何预处理,其内容被完整保留——这正是 Code2Prompt "Automatic Code Processing" 能力的体现,它默认将任意文本/代码文件统一包装为可读、可解析的 Prompt 片段。 至此,一份"Context"(上下文)就绪:模型手里既有全局目录结构,也有每个文件的完整内容。 ## Goal + Format:把 Context 变成一次具体任务 有了上下文还不够,要让模型输出符合预期,还需在 Context 之外给出任务目标与输出格式要求。Code2Prompt 官网将该框架归纳为 **Goal + Format + Context** 三段式。示例配套的 [question.txt](https://link.gitcode.com/i/06a34e4ff28eb111237fbeb37a5e256a) 提供了前两段: ```txt Goal: Suggest a recipe I can cook tonight based on my available ingredients Format: Provide a personalized recommendation with: - Recipe name and brief description - Ingredient checklist (what I have vs. what I need) - Step-by-step cooking instructions - Estimated prep and cooking time

三者的分工是:

组成内容来源作用
Goal用户自定义(如 question.txt)明确本次任务要达成的目标,本例为"基于现有食材推荐今晚的菜谱"
Format用户自定义规定输出结构,本例要求给出菜名、食材核对清单、分步步骤与预估时间
Contextcode2prompt 自动生成(prompt.md)提供模型作答所需的全部事实材料,本例为食材清单与四道菜谱

把两者拼合后,交给模型的就是一段"目标明确、格式约束、材料齐全"的完整 Prompt:模型读到 Goal 知道要干什么,读到 Format 知道怎么输出,读到 Context 里的Available: pasta, tomato sauce, cheese与各菜谱的食材清单,就能自行推理出"现有食材可做 pasta 与 pizza"这类结论,并按指定结构给出个性化推荐。这一设计同样体现在官网首页组件中——Section0.astro 会把 question.txt 拆成 Goal(蓝色块)与 Format(绿色块)分别展示,与紫色块标注的 Context(prompt.md 全文)并排呈现,直观演示"任务 + 材料"的组装逻辑。

从示例到实战:生成这类 Prompt 的 CLI 操作

my_recipes示例本身就是官网演示中code2prompt my_recipes这一命令的运行产物(见 Section0.astro 中渲染的 Command 区块)。围绕它,可以派生出完整、可复用的实操命令集(均以菜谱目录为例,参照 CLI 使用指南):

基础生成与输出

# 生成 Prompt 并打印到标准输出 code2prompt my_recipes # 生成并复制到剪贴板 code2prompt my_recipes -c # 保存为文件 code2prompt my_recipes -O output.txt # 输出结构化 JSON(含 prompt、directory_name、token_count 等字段) code2prompt my_recipes -F JSON

用过滤控制"喂给模型"的内容

如果只想让模型基于菜谱作答而不需要它看到食材清单,或者想临时排除某类文件:

# 只包含 recipes 下的 txt 文件 code2prompt my_recipes --include="recipes/*.txt" # 排除 pantry 目录 code2prompt my_recipes --exclude="pantry/*" # 保留完整目录树(默认过滤掉的路径会从树中剪除) code2prompt my_recipes --full-directory-tree

自定义模板与附加信息

# 使用自定义 Handlebars 模板 code2prompt my_recipes -t my_template.hbs # 为代码块添加行号,便于模型精确引用 code2prompt my_recipes --line-numbers # 关闭代码块包裹 code2prompt my_recipes --no-codeblock

统计与 Git 集成

# 查看 token 估算(可选 tokenizer:cl100k、p50k、p50k_edit、r50k_bas) code2prompt my_recipes --token-format=format code2prompt my_recipes --encoding=p50k # 对 Git 仓库可附加 diff / 分支对比信息 code2prompt path/to/codebase --diff -t templates/write-git-commit.hbs

结合仓库源码理解生成链路

从仓库结构可以进一步印证上述流程的实现层次:

  • 入口与参数解析:CLI 的参数(--include--exclude-t-F-O等)定义于 crates/code2prompt/src/args.rs,由 main.rs 驱动完整生成流程;
  • 核心上下文组装:文件遍历、过滤、排序、Source Tree 构建与模板渲染等逻辑集中在 crates/code2prompt-core/src/(如selection.rsfilter.rssort.rstemplate.rs),其中lib.rs对外暴露会话级接口;
  • 智能文件读取:除纯文本外,file_processor模块(csv.rsjsonl.rsipynb.rstsv.rs等)会在注入前把 CSV、JSONL、Notebook 等格式转换为对 LLM 更友好的表示,这正是"任何规模代码库都能变成可读 Prompt"的底层支撑;
  • 模板体系:内置的 Markdown/XML 默认模板位于 crates/code2prompt-core/src/default_template_md.hbs 与 crates/code2prompt-core/src/default_template_xml.hbs,另有 templates/ 下的十多个场景模板(如write-git-commit.hbsfix-bugs.hbsrefactor.hbs),my_recipes这类纯文本项目的处理路径与代码项目完全一致。

延伸:同一框架下的其他场景

my_recipes并非孤例,仓库还提供了两个同构示例,可直接验证这套流程的可迁移性:

  • node_app 示例:把包含src/index.jssrc/utils.jsdata/sample.json与 README 的真实代码库(含 JSON 数据文件)打包成 Prompt,对应官网分类 "Codebase 👨‍💻",可用于代码审查、重构等任务;
  • history_notes 示例:把历史笔记(中世纪、文艺复兴、二战)与复习目标打包,对应 "Personal Notes 📖",可用于备考复习等个人知识管理场景。

三个示例共享同一套"Source Tree + 逐文件全文"的 Prompt 骨架,区别仅在文件类型与任务目标,印证了 Code2Prompt 作为通用上下文工程工具的定位——无论是代码、笔记还是菜谱数据库,一条命令即可转换为结构化的 LLM Prompt。对个人开发者而言,最直接的收获是:把my_recipes/prompt.mdmy_recipes/question.txt拼接后形成的完整提示词,就是一套可复用的"数据目录 → 个性化推荐"模板;把它推广到自己的项目,即可用 code2prompt 快速搭建"代码 + 任务 + 格式约束"的 AI 协作流水线。

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/16 14:25:43

基于Java的医院预约挂号排队叫号系统:状态管理与实时推送实践

简介:这是一个基于Java的医院预约挂号排队叫号系统设计源码,面向需要学习医院业务流程与Java Web开发的学生或初级开发者,可用于毕业设计、课程项目或实际系统改造参考。工程围绕预约挂号、分诊排队、叫号显示与后台管理展开,涵盖…

作者头像 李华
网站建设 2026/9/16 14:25:35

音乐治疗与情感记忆:解码歌曲背后的神经机制与应用

1. 音乐叙事的情感密码解析当耳机里传来那首特定的旋律时,你是否也经历过瞬间被拉回某个记忆场景的奇妙体验?这种现象在心理学上被称为"音乐诱发的自传体记忆",每首承载特殊意义的歌曲本质上都是一个加密的情感容器。作为从业十五年…

作者头像 李华
网站建设 2026/9/16 14:22:52

红黑树核心原理与工程实践详解

1. 红黑树学习中的典型困惑解析第一次接触红黑树时,我被那五条性质规则和复杂的旋转操作彻底绕晕了。记得当时盯着"黑色高度平衡"这个概念发了半小时呆,完全不明白为什么非要这样设计。后来在实现插入操作时,更是被各种case的分支判…

作者头像 李华