Skip to content

AI 使用

3315 个字 157 行代码 预计阅读时间 19 分钟 共被读过

1 如何写一个 Prompt

1.1 Prompt 的基本原则

1.1.1 明确需求

1.1.1.1 什么是清晰的指令?

清晰的指令是指能够准确传达任务意图的描述,避免歧义,让模型理解并生成期望的结果。
它的核心在于具体化需求,通过明确的语言和结构化的描述,让任务目标易于被模型解析。

1.1.1.2 如何表达需求无歧义?
  1. 使用具体的语言
    例如,不要简单说“生成摘要”,而是明确内容形式和要求:
  • ❌ 不清晰:总结一下这篇文章。
  • ✅ 清晰:用通俗易懂的语言将以下文章总结为 3 点,并以 Markdown 列表的形式输出。
  1. 设定清晰的边界和限制
    给出明确的范围,避免模型输出无关信息。
  • ❌ 不清晰:解释 AI
  • ✅ 清晰:请用 2-3 句话向高中生解释什么是 AI,避免使用过于专业的术语。
  1. 使用任务指向性强的词语
    强调任务的核心,例如“详细说明”“以简洁语言总结”“列出具体步骤”等。
1.1.1.3 示例:清晰与模糊指令的对比
模糊指令 清晰指令
总结会议记录。 用一个段落总结会议记录,并列出发言人及其建议的行动项目,以 Markdown 列表格式输出。
解释大数据。 用三句话向中学生解释大数据的定义及作用,并提供一个与日常生活相关的例子。
生成一份旅行计划。 请为北京三日游生成一份详细的旅行计划,包含每天的行程、景点介绍、预算范围和推荐美食。

1.1.2 简洁与精炼

1.1.2.1 避免冗长与无效信息的方法

Prompt 中,冗长的描述会增加模型的理解难度,同时可能引入无关内容。以下技巧可以帮助优化表达:

  1. 删减无用信息:去掉不必要的修饰词或重复内容。
    • ❌ 冗长:在用来写这篇文章的摘要时,你可以参考以下这些文章的内容……
    • ✅ 精炼:为以下文章写摘要。
  2. 直接切入重点:优先描述任务的核心需求,避免背景信息过多干扰任务。
  3. 层级分明:使用结构化格式,避免将多条指令混为一谈。
1.1.2.2 “奥卡姆剃刀”原则的实际应用

奥卡姆剃刀原则强调“如无必要,勿增实体”,在 Prompt 中,表现为尽量减少不必要的约束和附加要求。

  • 示例
    • 不必要的约束:
      请用 500 字左右总结以下文本,不要提到与文本无关的内容,也不要加入个人观点,只需简洁概括主要观点……
    • 优化后:
      请用 500 字总结以下文本的主要观点,语言简洁明了。

1.1.3 语气与风格

1.1.3.1 使用正式、礼貌的语言提高生成准确性

Prompt 中,语气和语言风格会影响模型的生成质量。

  • 正式语言通常更符合大模型的训练数据分布,有助于生成更严谨的内容。
  • 示例:
    • 正式:请用通俗易懂的语言解释以下技术概念。
    • 非正式:帮我把这段话简单说一下。
1.1.3.2 针对不同任务调整语气的案例
  1. 创意任务
    指令应更具感染力,以激发模型生成更具想象力的内容。
  • 示例:
    • 你是一位小红书爆款文案专家,请为年轻人设计一个具有吸引力的青岛旅游攻略。
  1. 教育任务
    语气需要循循善诱,内容结构清晰明了。
  • 示例:
    • 你是一名高中数学老师,请用通俗易懂的方式讲解二次函数的概念。
  1. 专业任务
    语气应严谨,信息需精确,避免主观性表达。
  • 示例:
    • 请从定义、特性和应用三个方面详细说明区块链技术,并提供相关的行业实例。

1.2 高级技巧

1.2.1 提供上下文与示例

1.2.1.1 使用 Few-shot Prompt 提供有效示例

Few-shot Prompt 是指在提示语中提供示例以引导模型生成类似的内容。这种方法特别适合复杂任务或需求不明确的场景。

  1. 为何使用 Few-shot Prompt
  • 降低模型的自由发挥度:通过提供示例,限制模型的输出风格和结构。
  • 提升任务准确性:通过示例传递明确的标准,减少偏差。
  • 扩展模型的适应能力:帮助模型适应一些训练数据中可能未见过的场景。
  1. 设计 Few-shot Prompt 的关键点
  • 示例数量:通常 2-5 个示例即可,过多可能导致提示过长,增加噪声。
  • 覆盖不同难度的案例:包括简单场景(easy case、复杂场景(hard case)以及边缘情况(corner case
  • 示例质量:确保提供的示例与预期任务高度相关。
  1. 示例
    任务:判断输入是否属于知识问答类问题。

Few-shot Prompt

Text Only
请判断以下问题是否属于知识问答类问题。

问题:世界上最高的山是什么? # easy case,属于客观知识问答
答案:是

问题:为什么水能传导电? # hard case,属于科学原理问答
答案:是

问题:帮我写一篇旅行日记。 # easy case,属于创作类任务
答案:否

问题:什么是嵌套字典? # hard case,属于技术知识问答
答案:是

问题:{输入}
答案:

1.2.1.2 参考文本的使用与引用技巧

参考文本能为模型提供明确的知识基础,尤其在需要可靠性和准确性的任务中效果显著。

  1. 让模型使用参考文本作答
  • 给模型明确指令,只允许依据参考文本生成答案。
  • 示例

    Text Only
    使用以下由三引号分隔的文本回答问题。如果在文本中找不到答案,请回复“信息不足”。
    """
    大熊猫主要分布在中国四川、陕西和甘肃等地。它们以竹子为主食。
    """
    问题:大熊猫的分布范围有哪些?
    
  1. 引用参考文本中的段落
  • 要求模型在回答中标注引用来源,增加答案的可验证性。
  • 示例

    Text Only
    您将获得一段文档和一个问题。仅使用文档回答问题,并标注引用段落。如果答案缺乏信息,请回复“无法回答”。
    文档:
    """
    机器学习是通过数据训练模型的一种方法。深度学习是机器学习的一个分支,以多层神经网络为核心。
    """
    问题:什么是深度学习?
    回答:
    深度学习是机器学习的一个分支,以多层神经网络为核心(引用:第1段)。
    

1.2.2 任务分解

1.2.2.1 将复杂任务拆解为子任务的最佳实践

复杂任务可能涉及多个子目标,将其分解为清晰的步骤可以提高模型的表现。

  1. 为何分解任务?
  • 降低模型理解难度。
  • 更容易对生成结果进行验证。
  • 增强 Prompt 的复用性。
  1. 任务分解方法
  • 明确每一步的目标:逐层剖析问题,将复杂任务分解为简单子任务。
  • 任务依赖管理:确保每一步为下一步提供必要的输入。
  1. 示例

任务:生成会议纪要。

任务分解 Prompt

Text Only
请按照以下步骤完成任务:
1. 阅读以下会议记录文本。
2. 提取发言人及其观点。
3. 用 Markdown 列表格式总结会议的主要结论。
文本:{会议记录}

1.2.2.2 连续生成任务的链式思考(Chain of Thought, CoT)

CoT 是一种逐步思考的提示策略,适用于需要逻辑推理的任务。

  1. 为何使用 CoT
  • 帮助模型将复杂任务分解为一系列易于解决的小任务。
  • 提升逻辑推理能力,尤其适用于数学、推理或复杂问题。
  1. 设计 CoT Prompt 的关键
  • 指导模型逐步完成任务。
  • 强调“思考过程”并输出步骤。
  1. 示例

任务:计算 \((1362+5145)*145-(1517*42+24)\) 的结果。

CoT Prompt

Text Only
请帮我计算以下问题的结果:$(1362+5145)*145-(1517*42+24)$。
展示你的每一步计算过程,并确保计算正确。

模型生成示例

Text Only
第一步:计算 (1362+5145),结果为 6507。
第二步:计算 6507*145,结果为 943515。
第三步:计算 1517*42,结果为 63654。
第四步:计算 63654+24,结果为 63678。
第五步:计算 943515-63678,结果为 879837。
答案:879837。

1.2.2.3 示例:多步骤任务的分解与优化

任务:撰写一份产品设计文档,包括需求、功能列表、设计方案。

多步骤 Prompt

Text Only
请按照以下步骤撰写一份产品设计文档:
1. 总结以下文本的核心需求。
2. 根据需求生成功能列表。
3. 为每个功能设计一个详细的方案。
文本:{输入}

模型输出示例

Text Only
核心需求:用户希望通过应用快速获取附近的餐饮推荐。
功能列表:
- 餐饮推荐系统
- 用户偏好设置
- 地图导航

设计方案:
- 餐饮推荐系统:根据用户位置和偏好实时推荐附近的餐馆。
- 用户偏好设置:允许用户自定义口味、预算和菜系。
- 地图导航:提供餐馆的实时位置和最佳路线。

1.2.3 角色扮演

1.2.3.1 指定模型身份的优势

通过为模型设置角色,可以帮助其以更适合任务的方式生成内容。模型角色的指定类似于设定语境,能够更精准地控制生成内容的语言风格、细节和专业性。

  1. 为什么需要角色扮演?
  • 提高生成准确性:指定角色后,模型的回答会更聚焦于该角色的知识领域。
  • 增强输出风格的一致性:根据角色的设定,输出会符合预期的专业性或创意性。
  1. 示例
  • 任务:撰写旅游攻略。

    Prompt

    Text Only
    你是一位擅长撰写旅游文案的小红书内容创作者,请撰写一份关于青岛三日游的攻略,强调景点推荐、美食分享和摄影技巧。
    
  • 任务:解释编程概念。

    Prompt

    Text Only
    你是一名经验丰富的 Python 开发者,请用通俗易懂的语言解释以下代码的功能,并提供改进建议:
    

    代码示例

    Python
    nested_dict = lambda: defaultdict(nested_dict)
    
  1. 多角色结合
  • 在复杂任务中,多个角色可以分担不同部分的生成任务。
  • 示例

    Text Only
    你是一位数据科学家,请分析以下数据的模式;然后作为一名市场分析师,提出优化方案。
    数据:{数据内容}
    

1.2.4 格式化与结构化输出

1.2.4.1 JSON、表格、清单等输出格式的应用场景

为保证输出的易读性和便于后续处理,可以明确要求模型返回结果的格式化输出。例如,JSON 格式适合数据处理,表格适合总结分析,清单适合任务分解。

  1. 为什么需要结构化输出?
  • 提高可读性:输出易于直接查看和理解。
  • 便于后续处理:尤其在数据处理或编程任务中,结构化数据可直接用于其他工具或代码。
  1. 示例
  • 任务:提取文本中的关键信息并返回 JSON 格式。

    Prompt

    Text Only
    请从以下文本中提取关键信息,包括人名、地名和事件,以 JSON 格式返回:
    文本:{文本内容}
    输出格式:
    {
        "人名": ["人名1", "人名2"],
        "地名": ["地名1", "地名2"],
        "事件": ["事件1", "事件2"]
    }
    
  • 任务:总结会议记录并生成表格。

    Prompt

    Text Only
    请总结以下会议记录,并将发言人及其观点以 Markdown 表格的形式输出。
    

    模型生成示例

    Markdown
    | 发言人   | 观点                  |
    |----------|-----------------------|
    | 张三     | 强调市场扩张的重要性 |
    | 李四     | 提议提高研发预算      |
    
1.2.4.2 使用分隔符(如三引号)明确任务结构

分隔符可以帮助区分任务描述和输入内容,减轻模型的理解负担。

  1. 典型用法
  • 明确输入与输出部分

    Text Only
    使用三引号分隔的文本完成任务:
    """
    {输入内容}
    """
    请为上述内容撰写摘要,摘要需包含主要观点,并以 Markdown 列表形式输出。
    
  1. 减少噪声干扰
  • 将多段输入分块:

    Text Only
    第1部分:
    """
    {第一段内容}
    """
    第2部分:
    """
    {第二段内容}
    """
    请分别总结以上两部分内容,并以 Markdown 列表形式输出。
    
1.2.4.3 示例:从无格式到标准化输出的转变

任务:为一段产品评论生成结构化摘要。

无格式的指令

Text Only
请总结以下产品评论:
{评论内容}

标准化的指令

Text Only
请总结以下产品评论,并以表格形式输出。表格应包含以下字段:优点、缺点、建议。
评论:
"""
{评论内容}
"""

输出示例

Markdown
| 优点            | 缺点           | 建议               |
|-----------------|---------------|--------------------|
| 价格便宜        | 做工一般       | 改善产品外观设计    |
| 功能齐全        | 操作复杂       | 简化用户操作流程    |

1.3 优化与迭代

1.3.1 如何通过 AI 帮助改写或优化 Prompt

1.3.1.1 为什么让 AI 优化 Prompt

AI 擅长从少量输入中提取规律,可以快速调整语言风格和细节,帮助用户优化 Prompt,尤其在任务需求模糊或缺乏清晰指令的情况下。

1.3.1.2 具体方法
  1. 直接请求 AI 改进
  • 提供初始 Prompt,让 AI 提出优化建议。
  • 示例:
    原始 Prompt

    Text Only
    请用简单的语言解释以下数学题的解法。
    

    请求优化

    Text Only
    请帮助优化这段 Prompt,让它更适合小学六年级学生。
    

    优化结果

    Text Only
    你是一位小学数学老师,请用通俗易懂的语言,结合生活中的例子,解释以下数学题的解法。
    
  1. 通过几轮交互微调 Prompt
  • 示例:
    1 轮优化

    Text Only
    这个 Prompt 比较适合初学者,但可以增加一些生活化的例子来提升吸引力。
    
  • 2 轮优化

    Text Only
    结合生活中的实例补充,如“通过买苹果来计算总价”,使得讲解更加生动。
    
  1. 自动化优化工具
  • 使用如 OpenAI 提供的 API,通过动态调整测试多个版本的 Prompt,找到最佳解决方案。

1.3.2 结合外部工具提升效率

1.3.2.1 调用 API 或代码执行实现复杂功能

大模型对计算和实时数据的支持有限,因此结合外部工具,如 API 调用或代码执行,可以提升任务的准确性。

  1. 请求生成代码来执行计算
  • 示例:
    任务:求解多项式的所有实根。
    Prompt

    Text Only
    请用 Python 编写代码来计算以下多项式的所有实根:
    多项式:3x^3 - 5x^2 + 2x - 7
    输出 Python 代码并解释其作用。
    

    输出结果

    Python
    import numpy as np
    coefficients = [3, -5, 2, -7]
    roots = np.roots(coefficients)
    print("实根为:", [r for r in roots if np.isreal(r)])
    

    解释:此代码使用 NumPy roots 函数计算多项式的所有根,并过滤出实根。

  1. 结合外部数据或工具
  • 示例:使用向量数据库查询知识库中的信息,作为生成答案的补充。
1.3.2.2 输出成 Markdown LaTeX 文档的场景与技巧
  1. Markdown 格式化
  • 示例:
    任务:生成会议纪要。
    Prompt

    Text Only
    请将以下会议记录总结为 Markdown 格式,包括发言人、主要观点和后续任务。
    

    输出

    Markdown
    ### 会议纪要
    
    #### 发言人及观点
    - **张三**:建议增加市场营销预算。
    - **李四**:强调优化产品质量的重要性。
    
    #### 后续任务
    - 制定新一季度的营销策略(负责人:张三)。
    - 调查用户对当前产品的满意度(负责人:李四)。
    
  1. LaTeX 格式化
  • 示例:
    任务:生成数学公式。
    Prompt

    Text Only
    请用 LaTeX 格式书写以下公式并解释:$(a+b)^2 = a^2 + 2ab + b^2$。
    

    输出

    TeX
    \[
    (a+b)^2 = a^2 + 2ab + b^2
    \]
    这是一个基本的平方展开公式,常用于多项式的计算。
    

1.3.3 增强 Prompt 的灵活性

1.3.3.1 为开放式任务设置兜底策略

开放式任务(如写故事或推荐方案)容易导致模型“跑题”,通过兜底策略可提高稳定性。

  1. 明确不符合条件时的回复
  • 示例:
    Prompt

    Text Only
    现在你是一个向客户推荐电影的助手。如果客户的信息不足以给出推荐,请回答:“抱歉,我无法根据您的描述推荐电影。”。
    

    输入

    Text Only
    客户:帮我推荐一部电影。
    

    输出

    Text Only
    抱歉,我无法根据您的描述推荐电影。
    
  1. 定义容错机制
  • 示例:当生成结果不符合格式时,要求重新生成。

    Text Only
    如果以下内容的输出格式错误,请重新生成并确保符合要求:
    输出格式:
    - 任务描述
    - 任务要点
    - 任务建议
    
1.3.3.2 添加强调词与符号提升指令权重

使用特殊符号(如加粗)或强调词(如“务必”“严格”)标注关键内容。

  1. 示例

任务:总结文章并强调关键概念。
Prompt

Text Only
 ```text
 请总结以下文章,并**加粗**每个要点中的关键概念,以 Markdown 列表形式输出。
 ```

 **输出**:

 ```markdown
 - **要点一**:机器学习是通过数据训练模型的**方法**。
 - **要点二**:深度学习是机器学习的**分支**,以多层神经网络为核心。
 ```

1.4 实用案例

1.4.1 常见场景与解决方案

1.4.1.1 生成长篇的文章
  1. 逐步生成长文内容
  • 方法:先生成目录,再逐部分扩展内容。
  • 示例:
    Prompt

    Text Only
    请为以下主题生成一份详细的文章目录,然后基于目录逐段扩展内容:
    主题:如何优化个人时间管理
    

    输出目录示例

    Markdown
    - 第一部分:时间管理的重要性
    - 第二部分:常见时间管理误区
    - 第三部分:高效时间管理的方法
      - 1. 设定目标与优先级
      - 2. 使用工具与技术
      - 3. 培养时间管理习惯
    - 第四部分:案例分析与应用
    

    扩展内容 Prompt

    Text Only
    请详细撰写第一部分“时间管理的重要性”的内容,控制在 300 字左右。
    
  1. 在生成时添加引用文献
  • 示例:
    Prompt

    Text Only
    请为以下主题生成一篇 500 字的文章,并在文章末尾附上相关参考文献:
    主题:人工智能如何改变教育行业
    

    输出

    Markdown
    ### 人工智能如何改变教育行业
    (文章内容)
    #### 参考文献
    - 李四,《人工智能与教育》,2023年出版。
    - OpenAI,《AI在教育领域的应用》,2021年。
    

1.4.1.2 解释代码并生成辅助图表
  1. 生成代码解释
  • 示例:
    Prompt

    Text Only
    以下是 Python 代码片段,请解释其作用:
    ```python
    nested_dict = lambda: defaultdict(nested_dict)
    
    Text Only
    **输出**:
    ```text
    此代码定义了一个嵌套字典的递归结构,可以动态创建任意深度的字典层级。
    示例用法:
    data = nested_dict()
    data['level1']['level2'] = "value"
    
  1. 生成辅助图表
  • 示例:
    Prompt

    Text Only
    请根据以下描述生成一段 mermaid 格式的代码,用于展示函数调用关系:
    描述:函数 A 调用函数 B,函数 B 调用函数 C 和 D,函数 D 返回结果。
    

    输出

    Text Only
    graph TD
    A --> B
    B --> C
    B --> D
    D --> Result
    

1.4.2 Prompt 的限制与应对策略

1.4.2.1 设计拒答策略提升可靠性
  1. 避免幻觉现象
  • 提示模型不要回答其无法确定的内容。
    示例

    Text Only
    如果你不知道以下问题的答案,请回复“信息不足”。
    问题:谁是第一个登上月球的机器人?
    

    输出

    Text Only
    信息不足。
    
  1. 多次生成以确认答案一致性
  • Prompt

    Text Only
    请多次生成以下问题的答案,并确保答案一致。如果答案不一致,请回复“无法确定答案”。
    问题:2023 年世界人口总数是多少?
    

1.4.2.2 多个 AI 协作
  1. 框架与内容协作
  • 通过不同模型协作优化内容生成。
    示例流程

    • Prompt 1:让 ChatGPT 提供文章框架。
    Text Only
    请为以下主题生成详细的文章框架:
    主题:如何提升团队合作效率
    
    • Prompt 2:将框架内容交给另一个模型优化表达。
    Text Only
    请根据以下框架撰写详细内容,并调整为更专业的语言。
    
    • Prompt 3:使用另一个工具(如 Grammarly 或其他 AI)校对和优化语言风格。
  1. 代码优化协作
  • Prompt
Text Only
    请优化以下代码,使其运行效率更高,并提供注释说明:
    ```python
        def factorial(n):
            if n == 0:
                return 1
            else:
                return n * factorial(n-1)
    ```

1.5 我曾经用法

  • 输出文档:通过 Markdown LaTeX 生成格式化文档。
  • 生成 README:让 AI 阅读代码并撰写说明。
  • 引用文献写论文:利用 AI 上网查询资料,提高学术内容质量。

2 常用的 Prompt

请参考 常用 prompt 记录 - wnc 的咖啡馆