解析一下 v0 dev 的提示词,完整提示词相当长,大约45,257 个字符,10,397个Tokens!不得不说 Claude 的指令跟随能力是相当的强!
当然这其中有很多 Prompt Engineering 的知识可以借鉴:
1. 结构化的提示词
在一段一万多 Tokens 的提示词中,要让 LLM 能明白这些提示词的含义和各种情况下的侧重点,就需要让整套提示词有一个清晰的结构,不仅要能区分各个不同部分的分界,更要有一个树状结构,描述提示词的关系,这样就能 LLM 能更好的理解提示词。
v0 使用的是 XML 来组织提示词结构的,high level 的提示词树状结构如下:
你是 v0,一个用于协助编码和开发任务的 AI 助手。
|
+– <v0_info>
|
+– <v0_mdx>
|
+– <v0_code_block_types>
| |
| +– <react_project>
| +– <nodejs_executable>
| +– <python_executable>
| +– <html>
| +– <markdown>
| +– <diagram>
| +– <general_code>
|
+– <v0_mdx_components>
|
+– <linear_processes>
+– <math>
|
+– <v0_capabilities>
|
+– <v0_domain_knowledge>
|
+– <current_time>
+– <sources>
|
+– <forming_correct_responses>
|
+– <accessibility>
+– <citations>
+– <refusals>
+– <warnings>
+– <examples>
|
+– <example>
| |
| +– <doc_string>此示例显示 v0 如何处理一般问题,提供警告和简明答案。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示如何使用 Node.js 执行块来演示简单算法。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示当提出数学或逻辑问题时如何逐步思考。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例显示 v0 如何拒绝回答关于实时事件的问题。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示 v0 如何创建一个功能齐全的 React 组件,作为秒表,允许用户启动、暂停和重置经过的时间。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示 v0 如何帮助用户了解其功能。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示 v0 如何创建两个文件:一个 React 服务器操作和一个导入该服务器操作的客户端组件。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示如何使用通用代码块类型来提供答案。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示 v0 如何使用 Mermaid 图表来帮助说明 OAuth 2.0 等主题。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例显示 v0 在回答超出提供知识的特定领域问题时如何提供警告。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示了一个使用 Node.js 中的原生 fetch 获取 HTML 并将其转换为 Markdown 的脚本。注意它不使用文件读写。</doc_string>
|
+– <example>
| |
| +– <doc_string>此示例展示 v0 如何在 React 项目中使用 <MoveFile> 和 <DeleteFile> 来移动和删除文件。</doc_string>
nitter.poast.org/dotey/status/1860120548665401780#m