结构与分隔
模型看到的是 一整段 token。人用标题、空白和颜色分区;模型需要你用 角色消息、标记语言、分隔符 把「指令」和「资料」切开。Anthropic 明确建议:指令、上下文、示例、可变输入混在一起时,用 XML 风格标签。OpenAI 建议:稳定前缀利于 prompt caching;动态内容放后面。
System 与 User
没有独立 system 通道的产品(部分聊天 UI)就把政策放在 最前面的固定段落,资料放在后面的标签里。效果类似:先政策,后材料,最后才是「现在请…」。
Cursor 的规则、Claude Code 的 CLAUDE.md、LangChain 的 system_prompt,本质上都是 system 合同。用户这一句才是 user 任务。
XML 标签(Anthropic 风格)
标签不需要是合法 XML,但名字要稳定、描述性强:<instructions>、<document>、<example>。嵌套用在「多篇资料」时:
好处:模型较少把资料里的「请忽略上面」误当成你的新政策(防御意识见 陷阱)。坏处:给三行小任务套十层标签是噪音。
Markdown 分节
Markdown 标题对 GPT 类模型同样好用,也方便人类维护:
代码用围栏代码块;CSV 用明确的列名行。分隔符的价值是 边界,不是神秘符号。
顺序与长度
推荐顺序(从稳到变):
- 政策 / 角色(可缓存前缀)
- 工具使用政策(若有工具)
- 示例
- 本轮资料
- 本轮问题与输出格式
资料只放 用得上的。上下文越长,指令越容易被淹没——见 评估 与 陷阱 的「过长上下文」。需要整本书时,用检索(本站 RAG / LangChain RAG),不要把提示词工程理解成「全贴进去」。