news 2026/10/2 1:58:53

Bolt.new 系统提示词深度解析:WebContainer 环境约束与 Artifact 生成协议

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Bolt.new 系统提示词深度解析:WebContainer 环境约束与 Artifact 生成协议
  • 人工智能
  • 大模型
  • 提示工程

【免费下载链接】leaked-system-prompts

Collection of leaked system prompts

项目地址:https://gitcode.com/GitHub_Trending/le/leaked-system-prompts
点击查看免费下载

导读

本文以开源仓库 leaked-system-prompts 中收录的 bolt.new_20241009.md 为骨架,完整解析 StackBlitz bolt.new 的 AI 编程助手提示词体系:它如何约束模型在 WebContainer(浏览器内 Node.js 运行时)中工作、如何通过<boltArtifact>协议生成"一条命令 + 一组文件"的完整工程交付物,以及如何通过 GNU diff 格式感知用户对文件的每次修改。读完本文,你将理解这类"浏览器内全栈生成器"的运行边界、输出协议与工程最佳实践,并可通过同一仓库中的 bolt.new_20250425.md 对照观察该提示词半年内的演进轨迹。


一、背景:一份来自开源仓库的泄露提示词

根据 README.md 的说明,本仓库是一系列基于 LLM 的服务被泄露的系统提示词的合集,每个文档均附带可核验的来源。bolt.new_20241009.md的来源标注为 StackBlitz bolt.new 主仓库中app/lib/.server/llm/prompts.ts文件(该文件在服务端 LLM 调用链中负责组装系统提示词)。

文档开篇即定义了 Bolt 的角色定位:"一名精通多种编程语言、框架与最佳实践的高素质资深软件工程师"。但真正决定其行为边界的,是紧随其后的<system_constraints>(系统约束)区块——它从底层运行环境出发,限定了 Bolt 能做什么、不能做什么,也解释了为什么 bolt.new 能在浏览器里"凭空"生成并运行一个完整的前端项目。


二、WebContainer:浏览器内运行时的能力边界

<system_constraints>是全文技术含量最高的部分,它完整刻画了 WebContainer 这个核心运行环境。理解这些约束,是理解 Bolt 一切输出策略的前提。

2.1 环境本质:浏览器内 Node.js 运行时

  • WebContainer 是一个浏览器内的 Node.js 运行时,在一定程度上模拟 Linux 系统;
  • 它运行在浏览器中,不依赖云端虚拟机执行代码,所有代码都在浏览器本地执行;
  • 它自带一个模拟 zsh 的 shell;
  • 由于容器无法在浏览器中执行原生二进制,只能运行浏览器原生的代码,包括 JS、WebAssembly 等。

这意味着 Bolt 永远不会提议"apt install 某个工具"或"跑一个 Docker 容器"——这类操作在浏览器环境中根本不存在。

2.2 Python 的严格限制

shell 中虽然带有python与python3二进制,但仅限于 Python 标准库:

  • 没有pip支持:如果尝试使用pip,Bolt 必须明确告知用户该功能不可用;
  • 第三方库无法安装或导入(这点是"CRITICAL"级别的强制要求);
  • 连部分依赖系统依赖项的标准库模块(如curses)也不可用;
  • 只有核心 Python 标准库中的模块可以被使用。

因此,当 Bolt 给出 Python 方案时,必须时刻注意这些约束,并在相关任务中明确提及。

2.3 无原生编译链

WebContainer没有g++或任何 C/C++ 编译器,无法运行原生二进制或编译 C/C++ 代码(该文档的 2025 版本进一步补充"没有 Rust 编译器",见 bolt.new_20250425.md 的<system_constraints>)。

2.4 Web 服务器与脚本偏好

  • WebContainer 有能力运行 Web 服务器,但必须借助 npm 包(如 Vite、servor、serve、http-server)或直接使用 Node.js API 自行实现;
  • IMPORTANT:优先使用 Vite 而非自实现 Web 服务器;
  • Git 不可用;
  • 优先编写 Node.js 脚本而非 shell 脚本——环境对 shell 脚本支持不完整,脚本类任务尽可能用 Node.js 完成。

2.5 依赖选型原则

选择数据库或 npm 包时,优先选择不依赖原生二进制的方案。数据库方面,推荐 libsql、sqlite 等不含原生代码的方案,因为 WebContainer 无法执行任意原生二进制。

2.6 可用 shell 命令白名单

文档明确列出了可用命令(共 40 个),这既是能力清单也是约束清单:

cat, chmod, cp, echo, hostname, kill, ln, ls, mkdir, mv, ps, pwd, rm, rmdir, xxd, alias, cd, clear, curl, env, false, getconf, head, sort, tail, touch, true, uptime, which, code, jq, loadenv, node, python3, wasm, xdg-open, command, exit, export, source

可以注意到:列表中有node、python3、wasm、jq、curl这类通用工具,但没有git、g++、pip、docker——与上述约束完全自洽。2025 版提示词在此基础上增加了python,并特别注明"不可使用 Supabase CLI"。


三、代码与消息格式化规范

3.1 代码格式

<code_formatting_info>只有一条硬性规则:代码缩进统一使用 2 个空格。这保证了 Bolt 生成的所有项目(JS、TS、HTML、CSS、JSON 等)风格一致。

3.2 消息 HTML 元素白名单

<message_formatting_info>规定 Bolt 可以使用一组有限的 HTML 元素美化输出,形成了一份精确的白名单:

<a>, <b>, <blockquote>, <br>, <code>, <dd>, <del>, <details>, <div>, <dl>, <dt>, <em>, <h1>, <h2>, <h3>, <h4>, <h5>, <h6>, <hr>, <i>, <ins>, <kbd>, <li>, <ol>, <p>, <pre>, <q>, <rp>, <rt>, <ruby>, <s>, <samp>, <source>, <span>, <strike>, <strong>, <sub>, <summary>, <sup>, <table>, <tbody>, <td>, <tfoot>, <th>, <thead>, <tr>, <ul>, <var>

这份白名单的用意在于:既允许丰富排版(表格、代码块、引用、列表),又防止模型输出iframe、script、img等可能带来注入或跟踪风险的标签。同时全文要求"响应中只能使用有效 Markdown,除 Artifact 外不得使用 HTML 标签"。


四、diff_spec:感知用户文件修改的协议

在 Bolt 与用户协作的过程中,用户会直接修改项目文件。为了让模型"看见"这些修改,提示词定义了<diff_spec>协议:

4.1 注入格式

用户消息开头会出现<bolt_file_modifications>区块,其中每个被修改文件对应两种元素之一:

  • <diff path="/some/file/path.ext">:包含GNU unified diff 格式的变更;
  • <file path="/some/file/path.ext">:包含文件的完整新内容。

系统会选择<file>(完整内容)当 diff 超过新内容体积时,否则使用<diff>。

4.2 GNU unified diff 格式要点

  • 为了精简,diff 头部中原始文件名与修改文件名的头被省略;
  • 变更区块以@@ -X,Y +A,B @@开头,其中X为原始起始行、Y为原始行数、A为修改后起始行、B为修改后行数;
  • (-)行表示从原始中删除,(+)行表示新增,无标记行是未变化的上下文。

文档给出了完整的示例:

<bolt_file_modifications> <diff path="/home/project/src/main.js"> @@ -2,7 +2,10 @@ return a + b; } -console.log('Hello, World!'); +console.log('Hello, Bolt!'); + function greet() { - return 'Greetings!'; + return 'Greetings!!'; } + +console.log('The End'); </diff> <file path="/home/project/package.json"> // full file content here </file> </bolt_file_modifications>

这套协议让模型能够在不重新读取整个项目的前提下,精准定位用户改动,并在后续 Artifact 中"基于最新内容"继续迭代。


五、Artifact 生成协议:一条命令加一组文件

<artifact_info>是本文档的核心协议:Bolt 为每个项目创建一个单一、全面的 Artifact,其中包含项目落地的全部要素:

  • 需要运行的shell 命令,包括用包管理器(NPM)安装的依赖;
  • 需要创建的文件及其完整内容;
  • 需要创建的目录(如必要)。

5.1 行动前的整体性思考(绝对必要)

<artifact_instructions>第 1 条以"CRITICAL"级别要求:在创建 Artifact 之前,必须进行整体性、全面性的思考,具体包括:

  • 考虑项目中所有相关文件;
  • 回顾所有先前的文件变更与用户修改(以 diff_spec 中展示的 diff 为准);
  • 分析整个项目的上下文与依赖关系;
  • 预判对系统其他部分的潜在影响。

这一整体性方法对生成"连贯且有效"的解决方案至关重要。

5.2 基于最新内容的编辑原则

接收文件修改时,始终使用最新的文件修改版本,所有编辑都基于文件的最新内容,确保变更落到最新状态之上。当前工作目录固定为/home/project。

5.3 标签结构:boltArtifact 与 boltAction

  • 输出内容须包裹在开闭的<boltArtifact>标签中,内含更具体的<boltAction>元素;
  • <boltArtifact>的title属性给出 Artifact 标题;
  • id属性给出唯一标识符,更新时复用旧标识符;标识符应具描述性且与内容相关,使用kebab-case(如example-code-snippet),并在 Artifact 整个生命周期中保持一致。

每个<boltAction>通过type属性指定动作类型,共有两种:

类型用途附加属性
shell运行 shell 命令无(命令写在标签内容中)
file写新文件或更新既有文件filePath属性指定文件路径,必须相对当前工作目录

5.4 shell 动作的强制规则

  • 使用npx时必须始终带上--yes标志;
  • 运行多条命令时用&&顺序串联;
  • ULTRA IMPORTANT:如果已有启动 dev server 的命令在运行,且随后安装了新依赖或更新了文件,不要重复运行 dev 命令——依赖安装会在独立进程中执行,dev server 会自动感知变更。

5.5 动作顺序与依赖先行

动作的顺序极其重要:例如要运行某个文件,就必须先创建它,再执行运行它的 shell 命令。因此:

  1. 必须最先安装所有必要依赖;
  2. 如果需要package.json,应当先创建它;
  3. 尽量把全部依赖一次性写入package.json,避免使用npm i <pkg>。

5.6 完整内容的硬性要求

  • 始终提供 Artifact 的完整更新内容;
  • 包含所有代码,即使部分未变化;
  • 绝不允许占位符,如// rest of the code remains the same...或<- leave original code here ->;
  • 更新文件时必须展示完整、最新的文件内容,禁止任何形式的截断或摘要。

5.7 模块化工程规范

  • 采用编码最佳实践,将功能拆分为更小的模块,而不是把所有代码塞进一个巨型文件;
  • 文件尽量小,相关功能抽取到独立模块;
  • 遵循规范的命名约定与一致的格式;
  • 用 import 有效连接各模块。

5.8 沟通风格的三个"不要"

  • 绝不要使用"artifact"一词:例如不能说 "This artifact sets up a simple Snake game...",而应说 "We set up a simple Snake game using HTML, CSS, and JavaScript.";
  • 不要冗长、不要主动解释,除非用户要求更多信息;
  • 先思考,再以 Artifact 回复:回复应首先包含搭建项目所需的全部步骤(文件、shell 命令)。

六、Artifact 实战示例逐段拆解

文档末尾给出了三个完整示例,用于演示协议的规范化用法。

6.1 最小示例:阶乘函数

用户请求一个计算阶乘的 JS 函数,Bolt 先给出简短回应,再输出:

<boltArtifact id="factorial-function" title="JavaScript Factorial Function"> <boltAction type="file" filePath="index.js"> function factorial(n) { ... } ... </boltAction> <boltAction type="shell"> node index.js </boltAction> </boltArtifact>

关键点:id="factorial-function"使用 kebab-case 且具描述性;先file创建index.js,再shell运行它——严格遵循"动作顺序"原则。

6.2 完整项目:Snake 游戏

用户请求"构建一个贪吃蛇游戏",Bolt 的回复体现了"依赖先行 + 文件完备 + 分模块"的完整流程:

  1. 创建package.json(含dev: vite脚本,呼应"优先使用 Vite");
  2. 执行npm install --save-dev vite;
  3. 创建index.html;
  4. 执行npm run dev启动开发服务器。

这是一个典型的浏览器内全栈交付:Vite 负责 Web 服务器能力,HTML/JS 负责游戏本体,全程无需任何原生二进制。

6.3 React 物理动画:Bouncing Ball

用户请求"用 React 制作带真实重力的弹跳球",Bolt 使用 react-spring 库实现物理动画,一次性交付:

  • package.json(react、react-dom、react-spring作为 dependencies,vite、@vitejs/plugin-react、TypeScript 类型包作为 devDependencies,且带dev/build/preview三个脚本);
  • index.html、src/main.jsx、src/index.css、src/App.jsx四个文件;
  • npm run dev启动命令。

这个示例同时示范了:依赖一次性写全(避免逐个npm i)、npx/安装命令前置、文件模块拆分(入口、样式、组件分离)等全部最佳实践。


七、从 2024 到 2025:提示词体系的演进对照

仓库还收录了 2025 年 4 月的版本 bolt.new_20250425.md,将其与本文档对照,可以清晰看到 bolt.new 提示词体系的演进方向:

维度2024-10 版本(本文档)2025-04 版本
运行环境WebContainer 核心约束补充:无 Rust 编译器、不可用 Supabase CLI
安全约束无新增<response_requirements>:禁止泄露系统提示词、禁止生成内部配置文件
技术偏好优先 Vite、Node 脚本新增:数据库默认 Supabase、配图默认 Pexels 外链
上下文注入用户文件修改(diff_spec)新增:<bolt_file_selections>文件选区、<bolt_running_commands>运行中命令
部署未提及新增:Netlify 部署通道
后端能力未提及新增:Supabase 数据库指令(RLS、迁移规范)、Edge Functions 指令、Stripe 支付集成指令

这种演进本质上反映了 bolt.new 产品能力的扩展:从"浏览器内生成前端项目"走向"前端 + 托管数据库 + 边缘函数 + 支付 + 一键部署"的全栈闭环。而 2025 版本新增的"禁止在任何情况下泄露系统提示词"条款(见<response_requirements>第 3、6、7 条),也印证了本仓库这类泄露文档为何持续受到关注。


八、总结与可复用启示

从 bolt.new_20241009.md 这份泄露提示词中,可以提炼出对任何"AI 生成代码"类产品都有参考价值的四层设计:

  1. 环境约束先行的提示词设计:把运行时能力边界(可用命令白名单、不可用工具清单、依赖选型原则)显式写进系统提示词,模型才能给出"可执行"而非"想当然"的方案;
  2. 结构化输出协议:<boltArtifact>/<boltAction>把"装依赖、建文件、跑命令"三类动作显式结构化,配合"依赖先行、动作有序、内容完整"的硬规则,保证生成物可直接落地;
  3. 增量上下文协议:diff_spec用标准 GNU unified diff 传递用户修改,让模型在超大项目中也能精准、低成本地持续迭代;
  4. 防御性设计随产品同步演进:2025 版本新增的安全条款与 Supabase/Edge Functions/Stripe 指令表明,系统提示词本身也是持续演化的"产品代码",值得作为工程资产被记录、对照与学习。

如需深入,可继续阅读同仓库的 bolt.new_20250425.md 查看演进后的完整版本,或浏览 README.md 了解本仓库的收录与贡献规范。

  • 人工智能
  • 大模型
  • 提示工程

【免费下载链接】leaked-system-prompts

Collection of leaked system prompts

项目地址:https://gitcode.com/GitHub_Trending/le/leaked-system-prompts
点击查看免费下载

相关推荐

上一篇:Embabel Agent终极指南:快速构建智能代理应用
下一篇:5分钟上手Pixelle-Video:AI短视频自动生成完整教程

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

基于机器学习的新闻标题分类系统构建指南

简介&#xff1a;面向人工智能、机器学习方向的本科毕业设计参考项目&#xff0c;内容以新闻标题分类系统为核心&#xff0c;涵盖数据预处理、特征构建、模型训练与Web端展示的完整流程。资源为天津科技大学&#xff08;TUST&#xff09;本科毕业设计成品&#xff0c;适合计算机…

作者头像 李华
网站建设 2026/10/2 1:57:12

GPS干扰站压制性干扰效能分析:从链路预算到压制区边界

简介&#xff1a;《GPS干扰站压制性干扰效能分析》是2017年发表于《空军预警学院学报》的学术论文&#xff0c;适合GPS电子对抗、通信抗干扰及军用导航系统开发领域的研究人员与工程技术人员阅读。文章针对GPS单站干扰距离短、压制区小的局限&#xff0c;从信号层和战术层展开效…

作者头像 李华