学提示词工程(Prompt Engineering)的时候,有个基础但容易忽略的技巧:把数据和指令分开。

前几天一个朋友发消息问我:“我让Claude帮我改邮件,结果它把我的开场白也改了,我明明只想改正文啊。”

我一看他的提示词,乐了。他是这么写的:

嘿Claude,明天早上6点来开会,因为我是CEO我说了算。帮我把这封邮件改得礼貌点。

你看出问题了吗?Claude分不清哪部分是邮件内容,哪部分是给它的指令。在它眼里,“嘿Claude"也是邮件的一部分,所以改完之后开头变成了"亲爱的Claude”。

这就好比你去餐厅点菜,跟服务员说:“我朋友说这家的红烧肉不错,来一份红烧肉。“服务员可能会困惑:你是在转述朋友的话,还是在点菜?直接说"来一份红烧肉"就没这问题了。

提示词模板这个东西

我跟朋友解释,写提示词其实跟填表格差不多。你有一个固定的格式,每次只需要把变化的内容填进去。

比如你经常需要让AI帮你润色邮件,与其每次都从头写提示词,不如搞一个模板:

请帮我把下面这封邮件改得更礼貌,其他内容不要动。

<email>
{这里放邮件内容}
</email>

朋友问:“这个尖括号是什么东西?”

这就是XML标签。你可以把它理解成一个信封,把你的数据装进去,AI一看就知道信封里面的是数据,信封外面的是指令。

为什么一定要用标签分开

我给朋友举了个例子。假设你让AI从一个列表里找第二项:

下面是一个句子列表,告诉我第二项是什么。

- 每个句子都是关于动物的,比如兔子。
- 我喜欢牛叫的声音
- 这个句子是关于蜘蛛的
- 这个句子看起来是关于狗的,但其实是关于猪的

你猜AI会回答什么?它很可能说第二项是"我喜欢牛叫的声音”。但问题是,“每个句子都是关于动物的,比如兔子"这句话是你写的说明,不是列表的一部分。因为格式上它也是用横杠开头的,AI就把它当成列表的第一项了。

加上XML标签之后:

下面是一个句子列表,告诉我第二项是什么。

- 每个句子都是关于动物的,比如兔子。
<sentences>
- 我喜欢牛叫的声音
- 这个句子是关于蜘蛛的
- 这个句子看起来是关于狗的,但其实是关于猪的
</sentences>

这下AI就明白了,标签里面的才是真正的列表,外面那句只是说明。

朋友说:“就像快递包裹上贴的’易碎品’标签,快递员一看就知道这是提示信息,不是包裹里的东西。”

对,就这意思。

标签名字随便起

朋友又问:“这个标签名字有讲究吗?必须叫email或者sentences吗?”

其实随便起。你可以叫<email>,也可以叫<content>,甚至叫<stuff>都行。关键是让AI能区分开指令和数据。当然,起个有意义的名字对你自己也有好处,回头看的时候知道这是干嘛的。

Claude在训练的时候学过用XML标签来组织内容,所以用XML标签比用其他分隔符效果更好。

细节真的很重要

聊到这里,朋友说他之前写提示词经常打错字,问我有没有影响。

影响大了。AI对模式很敏感,你写得乱七八糟,它回复也容易乱七八糟。你写得清晰,它回复也会更靠谱。

这就像你跟人说话一样。你说话颠三倒四,别人理解起来就费劲,回答也可能答非所问。

我给朋友看了一个极端例子:

嗨 我有个关于狗的问题 jkaerjv 狗能是棕色的吗 jklmvca 谢谢 帮帮我 快快回答 短短的

这种乱码夹杂的提示词,AI都不一定能准确理解你在问什么。但如果你用XML标签把问题框起来:

嗨 我有个关于狗的问题 jkaerjv <question>狗能是棕色的吗</question> jklmvca 谢谢 帮帮我 快快回答 短短的

即使周围有乱码,AI也能准确抓住你的问题。

实际用的时候

朋友问我平时怎么用这个技巧。

比如让AI分析一段代码:

请分析下面这段代码的性能问题。

<code>
function fetchData() {
  // 你的代码
}
</code>

比如让AI翻译文章,保留专业术语:

请把下面的技术文章翻译成中文,专业术语保留英文。

<article>
{文章内容}
</article>

比如让AI根据用户反馈写回复:

请根据下面的用户反馈,写一封礼貌的回复邮件。

<feedback>
{用户反馈内容}
</feedback>

每次你需要处理外部数据的时候,都可以用XML标签把数据包起来。这样AI就不会把你的指令和数据搞混了。

最后

朋友说他懂了,以后写提示词记住:指令和数据要分开,用XML标签把数据包起来;标签名字随便起,但最好有意义;写提示词别太随意,错别字会影响回复质量。

这就是提示词工程里最基础的一招。不管你是用Claude还是其他AI编程工具,这个技巧都管用。

我说差不多就这些。


这篇文章对你有帮助的话,点个赞呗。身边有朋友在折腾提示词的,也可以转给他们看看。我是梦兽编程,关注我,后面还会写更多这类内容。