一些关于如何编写 prompt 的官方指导
OpenAI prompt engineering
- 编写清晰的说明
- 在问题中包含详细信息
- 要求模型扮演一个角色
- 使用分隔符标明不同的部分
- 指定完成任务的步骤
- 举例说明
- 指定输出长度
- 提供参考文本
- 指导模型使用参考文本作答
- 指导模型引用参考文本中的范例作答
- 将复杂任务拆分为更简单的子任务
- 使用意图分类来确定与用户查询最相关的指令
- 对于很长的对话, 可总结或过滤之前的对话
- 对长文档进行分块摘要, 并递归构建完整摘要
- 给模型思考时间
- 在得出匆忙结论之前指示模型自己找出解决方案
- 使用内心独白或一系列查询来隐藏模型的推理过程
- 询问模型前几次是否有遗漏
- 使用外部工具
- 利用嵌入式搜索实现高效知识检索
- 使用代码来执行更精确的计算或调用外部应用程序接口
- 让模型获得特定功能
- 系统地测试变化
- 参考标准答案评估模型输出结果
Claude prompt engineering
-
保持清晰, 直接和详细
- 提供上下文信息
- 具体说明希望模型做什么
- 以连续步骤提供指示
-
使用示例
- 示例可以减少对指令的误解, 可以强制执行统一的结构和风格, 并可以提升模型处理复杂任务的能力
- 编写有效示例, 确保示例是相关的, 包含边缘情况和潜在挑战, 并且变化足够大, 是多样化的, 示例用
<example>
包裹
-
让模型思考
- 逐步解决问题可以减少错误, 提高准确性, 连贯性, 同时查看模型的思考过程有助于找出提示不合理的地方
- 在提示中包含 "逐步思考", 或说明模型在思考过程中要遵循的具体步骤, 以及使用
<thinking>
和<answer>
标签使模型获得思考能力
-
使用标签构建提示
- 标签可以清晰地分隔不同的部分, 确保提示结构良好, 可以灵活修改, 并减少模型误解, 让模型在输出中使用标签可以更容易提取响应的特定部分
- 保持标签一致性, 对于层次结构, 应该嵌套标签
-
赋予角色
- 提高准确性, 调整沟通风格, 提高专注度
- 可以使用 API 的
system
参数设置角色
-
预填充模型的回复
- 在
Assistant
的消息中包含所需的文本
- 在
-
链式复杂提示
-
识别子任务, 使用 XML 结构以清晰交接, 每个子任务都有一个单一明确的目标, 根据模型表现改进子任务以迭代
-
链式工作流程示例:
- 多步骤分析
- 内容创作流程 (研究 -> 大纲 -> 草稿 -> 编辑 -> 格式化)
- 数据处理 (提取 -> 转换 -> 分析 -> 可视化)
- 决策 (收集信息 -> 列出选项 -> 分析每个选项 -> 推荐)
- 验证循环 (生成内容 -> 审查 -> 改进 -> 重新审查)
-
示例
你的任务是对一篇研究论文摘要提供反馈。这是一篇医学研究论文的摘要: <summary> {{SUMMARY}} </summary> 这是研究论文: <paper> {{RESEARCH_PAPER}} </paper> 以A-F等级评审这个摘要的准确性、清晰度和完整性。
-
-
长上下文技巧
- 将数据放在顶部, 位于指令和示例之上
- 使用 XML 标签构建文档内容和元数据
- 引用相关内容作为回答依据
ChatGPT for Robotics: Design Principles and Model Abilities
一篇关于 ChatGPT 在机器人领域应用的论文, 其中的 prompt engineering 部分值得参考
The following is generated by AI
论文中关于提示工程的具体内容如下:
- 高水平函数库的定义: 论文建议创建一个包含机器人平台实际实现的高水平函数库,使 ChatGPT 能够理解用户的意图并将其转换为逻辑函数调用链。函数名称必须具有描述性,以便 ChatGPT 能够推理 API 之间的功能连接并生成所需的结果。例如,一个名为
detect_object(object_name)
的函数可以内部链接到 OpenCV 函数或计算机视觉模型,而move_to(x, y, z)
可以内部调用运动规划和避障流程,以及无人机的适当低级电机指令。 - 任务细节的清晰描述: 通过在提示中提供清晰且简洁的机器人任务和其上下文的描述,ChatGPT 可以生成更准确的响应。良好的上下文描述应包含机器人 API 之外的以下内容:
- 约束和要求:指定与任务相关的约束或要求。
- 环境:描述机器人任务发生的环境。
- 当前状态:描述机器人系统的当前状态。
- 目标和目标:陈述任务的目标和目标。
- 解决方案示例:展示类似任务如何解决,以指导 LLM 的解决方案策略。
- 特殊参数以偏置答案结构: 可以使用不同的提示方法来迫使模型的输出遵循某些特定模式。例如,用户可能希望自动解析 ChatGPT 的输出,以便将其用于其他脚本的实时执行。如图 3 所示,一种简单的策略是直接要求 ChatGPT 以特定的语言(例如 Python 或 C++)生成代码。通常,接下来是一个自由文本段落,然后是一个代码块。可以要求模型使用 XML 标签来帮助自动解析输出,以生成更结构化的响应。
- 对话式行为纠正: 当 ChatGPT 无法在零样本方式下生成正确的响应时,用户可以发送额外的指令来描述问题,并让 ChatGPT 进行自我纠正。论文通过多个例子展示了用户与 ChatGPT 的交互式对话,例如:
Me: Go to the chair
You: <question> There are three chairs in the world, which one do you want me to go to?
Me: Go to "chair_3"
You: <command> target_location = get_location("chair_3"); move_to_location(target_location); <reason> I found the location of the chair with the get_location function, and moved the robot towards the desired location
总结: 论文强调了提示工程在 ChatGPT 应用于机器人领域的重要性,并提供了多种提示策略的示例,以帮助 ChatGPT 更好地理解和执行机器人任务。