PROMPT2024-09-06

一些关于如何编写 prompt 的官方指导

OpenAI prompt engineering

  • 编写清晰的说明
    • 在问题中包含详细信息
    • 要求模型扮演一个角色
    • 使用分隔符标明不同的部分
    • 指定完成任务的步骤
    • 举例说明
    • 指定输出长度
  • 提供参考文本
    • 指导模型使用参考文本作答
    • 指导模型引用参考文本中的范例作答
  • 将复杂任务拆分为更简单的子任务
    • 使用意图分类来确定与用户查询最相关的指令
    • 对于很长的对话, 可总结或过滤之前的对话
    • 对长文档进行分块摘要, 并递归构建完整摘要
  • 给模型思考时间
    • 在得出匆忙结论之前指示模型自己找出解决方案
    • 使用内心独白或一系列查询来隐藏模型的推理过程
    • 询问模型前几次是否有遗漏
  • 使用外部工具
    • 利用嵌入式搜索实现高效知识检索
    • 使用代码来执行更精确的计算或调用外部应用程序接口
    • 让模型获得特定功能
  • 系统地测试变化
    • 参考标准答案评估模型输出结果

Claude prompt engineering

  • 保持清晰, 直接和详细

    • 提供上下文信息
    • 具体说明希望模型做什么
    • 以连续步骤提供指示
  • 使用示例

    • 示例可以减少对指令的误解, 可以强制执行统一的结构和风格, 并可以提升模型处理复杂任务的能力
    • 编写有效示例, 确保示例是相关的, 包含边缘情况和潜在挑战, 并且变化足够大, 是多样化的, 示例用 <example> 包裹
  • 让模型思考

    • 逐步解决问题可以减少错误, 提高准确性, 连贯性, 同时查看模型的思考过程有助于找出提示不合理的地方
    • 在提示中包含 "逐步思考", 或说明模型在思考过程中要遵循的具体步骤, 以及使用 <thinking><answer> 标签使模型获得思考能力
  • 使用标签构建提示

    • 标签可以清晰地分隔不同的部分, 确保提示结构良好, 可以灵活修改, 并减少模型误解, 让模型在输出中使用标签可以更容易提取响应的特定部分
    • 保持标签一致性, 对于层次结构, 应该嵌套标签
  • 赋予角色

    • 提高准确性, 调整沟通风格, 提高专注度
    • 可以使用 API 的 system 参数设置角色
  • 预填充模型的回复

    • Assistant 的消息中包含所需的文本
  • 链式复杂提示

    • 识别子任务, 使用 XML 结构以清晰交接, 每个子任务都有一个单一明确的目标, 根据模型表现改进子任务以迭代

    • 链式工作流程示例:

      1. 多步骤分析
      2. 内容创作流程 (研究 -> 大纲 -> 草稿 -> 编辑 -> 格式化)
      3. 数据处理 (提取 -> 转换 -> 分析 -> 可视化)
      4. 决策 (收集信息 -> 列出选项 -> 分析每个选项 -> 推荐)
      5. 验证循环 (生成内容 -> 审查 -> 改进 -> 重新审查)
    • 示例

      你的任务是对一篇研究论文摘要提供反馈。这是一篇医学研究论文的摘要:
      <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 更好地理解和执行机器人任务。