初识提示词工程
什么是提示词工程
提示词工程(Prompt Engineering)是设计和完善提供给 ChatGPT 等语言模型的初始文本或输入(提示)以生成响应的过程。它涉及设计提示,以指导模型生成特定的语气、样式或内容类型。
- 提示工程 vs. 微调
|
|
|
---|---|---|
资源效率 | 需要高端 GPU 和大内存。 | 只需要文本输入。 |
成本效益 | 对于基于云的 AI 服务, 微调会产生巨大的成本。 |
使用基础模型,通常更便宜。 |
维护模型 | 受模型版本限制, 可能需要重新训练模型。 |
更新提示可以在不同版本间 正常工作,通常无需更改。 |
时间效率 | 可能需要数小时甚至数天。 | 几乎能立即提供结果。 |
数据需求 | 需要大量特定任务的标记数据。 | 可以使用少样本甚至零样本学习。 |
灵活性 | 很难实现快速迭代。 | 可以快速尝试各种方法,调整提示, 并立即看到结果。 |
领域适应 | 需要重新训练。 | 通过在提示中提供特定领域的上下文, 可以轻松地使模型适应新领域, 无需重新训练。 |
理解力 | 帮助模型更好地理解和利用外部内容 (如检索文档)。 |
|
保留通用知识 | 存在灾难性遗忘的风险, 即模型可能会失去通用知识。 |
保持了模型的泛化能力。 |
透明度 | 提示是人类可读的, 准确显示模型接收到的信息。 这种透明度有助于理解和调试。 |
- 何时不使用提示工程
- 当您需要 100% 的可靠性时
- 当您无法评估模型输出的准确性时
- 当您需要生成不在模型训练数据中的内容时
如何进行提示工程
下面将从 OpenAI 和 Claude 官方提示工程指南中的建议策略来初步感受如何进行提示工程。
Claude 官方提示工程指南
提示生成器
解决如何有效地编写提示词。引导Claude生成针对您特定任务的高质量提示词模板。
-
使用提示模板将固定和变量部分结合在一起,为动态内容使用占位符。
API调用通常包含两种类型的内容:
- 固定内容: 在多次交互中保持不变的静态指令或上下文
- 变量内容: 随每个请求或对话而变化的动态元素,例如:
- 用户输入
- 用于检索增强生成(RAG)的检索内容
- 对话上下文,如用户账户历史
- 系统生成的数据,如来自其他独立Claude调用的工具使用结果
-
提示改进器通过4个步骤增强您的提示:
- 示例识别:定位并提取提示模板中的示例
- 初始草稿:创建具有清晰部分和XML标签的结构化模板
- 思维链精炼:添加和完善详细的推理说明
- 示例增强:更新示例以展示新的推理过程
% 原始提示
从以下Wikipedia文章标题列表中,识别这个句子来自哪篇文章。
只需回答文章标题,不要添加其他内容。
文章标题:
{
{titles}}
要分类的句子:
{
{sentence}}
% 改进后提示
您是一个专门将句子与Wikipedia文章标题匹配的智能文本分类系统。您的任务是根据提供的文章标题列表,确定给定句子最可能属于哪篇Wikipedia文章。
首先,查看以下Wikipedia文章标题列表:
<article_titles>
{
{titles}}
</article_titles>
现在,考虑需要分类的这个句子:
<sentence_to_classify>
{
{sentence}}
</sentence_to_classify>
您的目标是确定提供的列表中哪个文章标题最匹配给定的句子。请按照以下步骤操作:
1. 列出句子中的关键概念
2. 将每个关键概念与文章标题进行比较
3. 对最相关的前3个标题进行排名并解释其相关性
4. 选择最适合包含或关联句子内容的文章标题
将您的分析包含在<analysis>标签中。包括以下内容:
- 句子中的关键概念列表
- 每个关键概念与文章标题的比较
- 前3个最相关标题的排名及解释
- 您的最终选择和理由
在分析之后,提供您的最终答案:从列表中选择单个最适合的Wikipedia文章标题。
仅输出所选的文章标题,不要添加任何额外的文本或解释。
保持清晰直接
- 给 Claude 提供上下文信息: 就像你在了解更多上下文的情况下可能会更好地完成任务一样,Claude 在有更多上下文信息的情况下也会表现得更好。
- 具体说明你想要 Claude 做什么: 例如,如果你只想要 Claude 输出代码而不要其他内容,就要明确说明。
- 按顺序提供指示: 使用编号列表或项目符号,以更好地确保 Claude 按照你想要的方式执行任务。
角色 |
|
|
---|---|---|
用户 | 分析这份 AcmeCloud 停机报告并总结关键点。 { {REPORT}} |
分析这 |