以下是为 Prompt 设计领域定制的 DSL PromptScript,聚焦于结构化、可复用且精确的提示词描述:

核心理念

  • 角色分层:显式定义 AI 角色、用户角色、系统约束
  • 动态插值:支持变量与外部数据注入
  • 条件逻辑:根据上下文切换提示片段
  • 输出控制:强制指定格式(JSON/XML/自然语言)

语法定义(BNF 风格)

<Prompt>    ::= <Header> <Block>+
<Header>    ::= "# Config" <KeyValue>+
<Block>     ::= <RoleBlock> | <LogicBlock> | <FormatBlock>
<RoleBlock> ::= "["Role"]" ("System" | "User" | "AI") ":" <Content>
<LogicBlock> ::= "IF" <Condition> "{" <Block>+ "}" 
               | "SWITCH" <Variable> "{" ("CASE" <Value> ":" <Block>+)+ "}"
<FormatBlock>::= "->" ("JSON" | "XML" | "Markdown") "{" <Schema> "}"
<Content>   ::= (Text | <Variable> | <FunctionCall>)+
<Variable>  ::= "${" Identifier "}"
<FunctionCall> ::= "#{" FunctionName "(" (Argument ",")* ")" "}"

关键特性示例

1. 多角色对话结构

[Role] System:
  You are a sarcastic historian. Use emojis in responses.

[Role] User:
  Explain the French Revolution like I'm 5.

[Role] AI:  // 系统自动填充此角色
  ${sarcasticReply}  // 引用变量

2. 动态内容注入

# Config
  userName = "Alice"
  topic = "quantum physics"

[Role] User:
  Teach me ${topic} with ${userName}'s favorite animal analogy.

3. 条件逻辑分支

IF ${userLevel} == "beginner" {
  [Role] System:
    Use simple vocabulary under 100 words.
}
ELSE {
  [Role] System:
    Include equations and original papers.
}

4. 强制输出格式

-> JSON {
  "question": "${userQuery}",
  "options": ["A", "B", "C"],
  "correctAnswer": "#{getAnswer(${userQuery})}"  // 调用外部函数
}

复杂场景示例

交互式教育 Prompt

# Config
  studentAge = 12
  subject = "photosynthesis"

[Role] System:
  Adapt explanations to ${studentAge}-year-olds. Quiz every 3 sentences.

IF ${studentAge} < 10 {
  [Role] AI:
    Use talking animals in stories. Max sentence length: 8 words.
}

-> Markdown {
  ## Question: 
  #{generateQuestion(${subject})}

  ### Options:
  1. ${option1} 
  2. ${option2}
  3. #{generateDistractor(${subject})}
}

编译器实现建议

  1. 转译层

    graph LR
    PromptScript -->|Parser| AST[抽象语法树]
    AST -->|Generator| OpenAI-API-Calls
    AST -->|Validator| Error[规则检查]
  2. 开发工具

    • VSCode 插件:语法高亮 + 实时预览
    • 调试器:可视化变量替换路径
    • 分析器:提示词复杂度评分(词汇密度/模糊指令检测)

为何优于纯文本?

传统 PromptPromptScript
隐含逻辑易矛盾显式条件分支
修改需全文搜索变量一处定义全局生效
格式错误导致解析失败强类型输出约束
重复结构复制粘贴函数模板复用

设计哲学:让提示词从「艺术」变为「工程」,通过约束提升表达精确性,同时保留创作自由度。

标签:ai

你的评论