提示词工程-反思模式

提示词工程-反思模式

什么是 Reflexion?

Reflexion 是一种先进的 AI Agent 架构,其核心思想是让 Agent 具备自我反思和自我修正的能力。它不仅仅是简单地执行任务(像传统的 ReAct – Reason and Act 模式),而是在遇到失败或障碍时,能够停下来“复盘”自己的行为轨迹,从中吸取教训,并形成指导性的“经验”,用于下一次的尝试。

简单来说,Reflexion 赋予了 Agent 一种从失败中学习的机制,模拟了人类在解决复杂问题时的试错和总结过程。

这项技术主要源于康奈尔大学等机构在 2023 年发表的论文《Reflexion: Language Agents with Verbal Reinforcement Learning》。

Reflexion 与传统方法的区别

特性传统 ReAct AgentReflexion Agent
核心循环思考 -> 行动 -> 观察 (Thought -> Act -> Observation)尝试 -> 评估 -> 反思 -> 再次尝试 (Trial -> Evaluate -> Reflect -> Retry)
失败处理可能会在当前步骤卡住,或进行无效的重复尝试。将整个失败的“轨迹”作为学习材料,进行深入分析。
记忆通常是短期的“暂存器”(Scratchpad),记录当前任务的步骤。拥有一个长期、不断累积的“反思记忆库”(Reflexion Memory)。
学习方式主要依赖于 In-context Learning,受限于单次提示的长度和内容。通过“语言强化学习”,将反思(Verbal Feedback)作为内部奖励信号来指导后续行为。

Reflexion 的核心组件

一个完整的 Reflexion 流程包含三个关键角色,它们都可以由同一个大型语言模型(LLM)通过不同的 Prompt 来扮演:

  1. 行动者 (Actor):

    • 职责: 根据任务目标和当前的“反思记忆”,生成思考和具体行动指令。
    • 工作方式: 这是 Agent 的“手和脚”,负责与外部环境(如代码解释器、搜索引擎)交互。在后续的尝试中,Actor 的 Prompt 会包含之前失败后总结的反思,从而避免重蹈覆辙。
  2. 评估者 (Evaluator):

    • 职责: 判断行动者的输出结果是成功、失败还是部分成功。
    • 工作方式: 评估者检查 Actor 的行动轨迹(Trajectory)和最终结果。评估可以是简单的基于规则的检查(例如,代码是否成功运行),也可以是复杂的、基于 LLM 的语义判断(例如,生成的文章是否回答了问题)。
  3. 自我反思者 (Self-Reflector):

    • 职责: 这是 Reflexion 的核心。当评估者给出“失败”信号时,反思者被激活。它会分析整个失败的行动轨迹,并生成一段简洁、高度概括、具有指导意义的反思文本 (Reflection Text)
    • 工作方式: 反思者会被要求回答“为什么之前的尝试会失败?”以及“下一次应该如何做才能避免这个错误?”。生成的反思文本会被存储到“反思记忆库”中。

工作流程图

下面是 Reflexion Agent 的典型工作流程:


如何使用 Reflexion Prompt 开发 Agent

开发一个 Reflexion Agent 的本质,就是设计一套精巧的 Prompt 链,来分别驱动 Actor, Evaluator 和 Reflector 这三个角色,并管理好“反思记忆库”。

第1步:定义 Agent 的核心组件

你需要准备三个主要的 LLM 调用函数,或者说三个核心 Prompt。

1. Actor Prompt (行动者提示)

这是 Agent 执行任务的基础。与 ReAct 不同的是,你需要为它注入“反思记忆”。

  • 基础结构:

    你是一个{Agent角色,如AI程序员}。你需要解决以下任务。
    
    # 任务
    {task_description}
    
    # 思考过程
    你需要一步步思考,然后选择一个工具/行动。可用的工具有: {tool_list}。
    
    # 反思 (如果记忆库不为空)
    在之前的尝试中,你犯了一些错误。请参考以下从失败中总结的经验教训,避免重蹈覆覆:
    {reflection_memory}
    
    # 行动轨迹 (Scratchpad)
    {scratchpad}
  • {reflection_memory}: 这是一个变量,用于动态插入所有过去的反思文本。在第一次尝试时,这里是空的。
  • {scratchpad}: 用于记录当前尝试中的“Thought, Action, Observation”序列。

2. Evaluator Prompt (评估者提示)

评估可以是简单的代码检查,也可以是复杂的 LLM 判断。对于需要语义理解的评估,可以使用如下 Prompt:

  • 基础结构:

    # 角色
    你是一个严谨的评估机器人。
    
    # 原始任务
    {task_description}
    
    # Agent 的行动轨迹
    {agent_trajectory}
    
    # 评估标准
    请根据以下标准判断 Agent 是否成功完成了任务:
    1.  {criterion_1}
    2.  {criterion_2}
    
    # 你的判断
    请严格回答 "Success" 或 "Failure"。
  • {agent_trajectory}: 传入 Actor 在一次完整尝试中的所有记录。

3. Self-Reflector Prompt (自我反思提示)

这是整个 Reflexion 机制的灵魂。当 Evaluator 返回 "Failure" 时,调用此 Prompt。

  • 基础结构:

    # 角色
    你是一个善于反思和总结的 AI 导师。
    
    # 失败的尝试
    一个 Agent 在尝试解决以下任务时失败了。
    任务: {task_description}
    
    这是它失败的完整行动轨迹:
    {failed_trajectory}
    
    # 你的任务
    请仔细分析上述轨迹,找出导致失败的关键原因。然后,生成一条或几条简洁、通用、具有指导意义的反思。这条反思应该像一个警句或策略,帮助 Agent 在未来的尝试中避免同样的错误。
    
    # 输出要求
    - 直接输出反思文本。
    - 语言要精炼,不超过 50 个字。
    - 专注于策略层面,而不是具体的代码细节。
    
    # 你的反思:
  • 示例输出 (反思文本):
    • "如果一个库的某个函数不存在,应该先检查库的版本或者查阅官方文档,而不是猜测函数名。"
    • "在进行文件写入前,必须先确认目标目录是否存在,如果不存在则需要创建它。"
    • "当网页爬取不到预期内容时,应检查请求头(Headers)是否模拟了真实浏览器,以防被屏蔽。"

第2步:搭建 Agent 的主循环

有了这三个核心 Prompt,你就可以编写 Agent 的主控制逻辑了。

伪代码示例:

def run_reflexion_agent(task, max_trials=3):
    # 初始化反思记忆库
    reflection_memory = []

    for i in range(max_trials):
        print(f"--- 开始第 {i+1} 次尝试 ---")

        # 1. 执行一次完整的尝试 (Actor)
        # Actor 的 prompt 中会包含 reflection_memory
        current_trajectory = execute_trial(task, reflection_memory)

        # 2. 评估结果 (Evaluator)
        is_successful = evaluate_trial(task, current_trajectory)

        if is_successful:
            print("任务成功!")
            return current_trajectory
        else:
            print("尝试失败,开始反思...")
            # 3. 如果失败,进行反思 (Self-Reflector)
            new_reflection = generate_reflection(current_trajectory)
            print(f"新的反思: {new_reflection}")

            # 4. 更新记忆库
            reflection_memory.append(new_reflection)

    print("已达到最大尝试次数,任务失败。")
    return None

# --- Helper Functions ---
def execute_trial(task, reflections):
    # 调用 LLM (Actor Prompt) 来生成一系列的 thought-action-observation
    # ... 实现细节 ...
    return trajectory

def evaluate_trial(task, trajectory):
    # 调用 LLM (Evaluator Prompt) 或其他规则来判断成功与否
    # ... 实现细节 ...
    return True_or_False

def generate_reflection(failed_trajectory):
    # 调用 LLM (Self-Reflector Prompt) 来生成反思文本
    # ... 实现细节 ...
    return reflection_text

关键的实现细节与建议

  1. 管理记忆库和上下文窗口: 反思记忆会不断增长。如果记忆过多,可能会超出 LLM 的上下文窗口限制。你需要策略来管理它,例如:

    • 只保留最近的 N 条反思。
    • 对所有反思进行一次更高层次的总结。
    • 使用向量数据库,根据当前失败情境检索最相关的反思。
  2. 反思的质量至关重要: Self-Reflector Prompt 的设计直接决定了 Agent 的学习效率。一个好的反思应该是通用且可操作的,而不是简单地复述错误。

  3. 分层反思 (Hierarchical Reflection): 对于非常复杂的任务,可以设计两层反思。第一层针对短期策略,第二层在多次失败后进行更高层次、更长远的战略总结。

总结

Reflexion 是一种强大但实现起来也更复杂的 Agent 架构。它通过将失败转化为学习机会,极大地提升了 Agent 在需要多步推理、试错和规划的复杂任务上的鲁棒性和成功率。

要成功开发一个 Reflexion Agent,关键在于设计出能够精准驱动 Actor、Evaluator 和 Self-Reflector 这三大核心角色的 Prompt,并实现一个有效的主循环来调度它们和管理反思记忆。这不仅仅是技术实现,更是一门 Prompt Engineering 的艺术。

提示词工程-提示词链(prompt chain)

提示词工程-链式提示词(prompt chain)

罗伯特·C·马丁(Robert C. Martin),一位著名的工程师,曾经说过:“函数应该只做一件
事。它们应该做好这件事。而且只做这件事。” 同样的原则也适用于提示词工程。

提示词应该只做一件事。它们应该做好这件事。而且只做这件事。

如果在同一个提示词中包含了多个任务或者指令时,AI大模型的输出将会不敬人意。这样的
提示词会让AI大模型陷入困境,无法正确理解你的意图。因此,更好的方法是将较大的提示
分解为多个较小的提示,创建动态提示链。每个链式提示词只包含一个任务或者指令。

提示链通过让模型专注于链中每个子任务,实现了对输出的更细粒度控制。

什么是提示词链?

提示词链将一个任务拆解为一系列较小的子任务,每个子任务由独立的提示词处理。

提示词链可以通过多种方式实现,包括结合其他提示工程方法,例如自动链式思维提示
(automatic chain-of-thought prompting)、由易到难提示(least-to-most
prompting)以及自一致性提示(self-consistency prompting)。

例如,在文本摘要任务中,可以通过提示链实现以下步骤:

  1. 创建初步摘要草稿
  2. 对摘要进行批评与改进建议
  3. 检查摘要是否存在事实错误
  4. 根据批评和反馈生成精炼后的摘要

每个步骤都由独立的提示处理,使模型能够完全专注于单个子任务,从而提高整体输出质量。

提示链对于完成复杂任务非常有用,因为这些任务如果使用一个非常详细的单一提示,LLM
可能难以应对。在提示链中,每个链式提示都会对生成的响应进行转换或额外处理,直到最
终达到期望的结果。

除了获得更好的性能,提示链还能提高LLM应用的透明性、可控性和可靠性。这意味着你可
以更轻松地调试模型响应中的问题,并分析和改进需要优化的各个阶段的性能。

提示链在构建基于LLM的对话助手、改善应用的个性化和用户体验方面尤其有用。

提示链的工作原理

下图展示了提示链的基本工作原理。首先使用提示链时,需要将任务拆解为多个子任务,子
任务的粒度足够小,每个子任务都由独立的提示处理。上一个提示词的输出作为下一个提示
词的输入。

提示链的好处

  • 增强专注力:通过将庞大的提示拆解为有针对性的子提示,模型可以将注意力集中在
    每个任务上,一次只处理一个任务。

  • 更高质量的输出:如后续研究所示,提示链的效果明显优于庞大的提示。研究结果表
    明,提示链能够提供更精确和有效的输出。

  • 更易理解:理解复杂的庞大提示非常具有挑战性,这也使得团队协作变得困难,输出
    质量难以提升。通过利用提示链,所使用的提示更加专注,因此更容易理解。

  • 广泛适用:提示链几乎可以提高任何复杂任务的输出质量。无论是摘要、问题解决还
    是创意写作,通过提示链将过程拆解为更小的步骤都能帮助模型提高表现。

提示链在生成长篇输出或处理包含大量上下文的提示时特别有益。

何时使用提示词链

提示链本身其实也是模拟了人类思维的链式思考过程。在人类思维中,我们会将一个大的
任务拆解为多个小的子任务,然后逐个完成。这种思维方式使我们能够更好地处理复杂的问题。

但是当你的任务非常简单或者只包含一个步骤时,使用提示链可能会增加不必要的复杂性。

如果你在决定是创建提示链还是使用单个提示时,可以考虑以下四个问题:

  • 我的任务涉及多个指令吗? 例如,“阅读这篇文章并生成摘要,然后创建一个相关的
    LinkedIn帖子。”

  • 我的任务需要多次转换吗? 比如,如果输出需要以多种方式进行处理或重新格式
    化。

  • 我对单一提示的结果不满意吗? 将任务拆解为子任务,并通过提示链逐个处理,可
    以帮助你找出问题所在,从而更容易修复。

  • 模型是否似乎失去焦点或忘记上下文? 如果是这样,将单个提示转化为提示链可以
    确保每个步骤都能得到模型的全神贯注。

提示链的典型示例

数据分析任务

通常在做数据分析时,我们需要进行数据提取、数据清理、数据分析和数据可视化等多个步骤。
而且每一步都要基于上一步的结果进行。因此这是一种典型的适合使用提示链的场景。

提示1:提取数据
从我们公司的数据库的导出数据 {{ 数据库数据 }} 中提取收入和用户参与数据,重点关注第一季度到第四季度的数据。

提示 2:数据转换
清理提取的数据 {{ 提取的数据 }} ,去除异常值,处理缺失值,并标准化数值字段。

提示 3:数据分析
分析清理后的数据 {{ 转换后的数据 }},以识别收入增长和用户参与度随时间的主要趋势。

提示 4:数据可视化
根据 {{ 数据分析结果 }} 创建可视化图表,突出分析中识别的趋势,重点展示收入增长和参与度激增。

代码编写任务

软件的代码编写是一个相当复杂的过程,通常需要多个步骤,例如需求分析、设计、编码、测试和部署等等。
如何将编写代码的任务交给AI大模型呢?这时候提示链就派上用场了。

如下提示链的示例,将代码编写拆解为:根据需求生成代码-》生成测试用例 -》代码检视 -》解决问题。

提示1:生成代码
请根据用户的 {{ 功能需求 }} 使用 {{ 编程语言 }} 生成相应的代码,保证生成的代码和用户需求一致。
始终使用注释来解释代码片段,如果是函数和类,请添加函数和类的注释,函数的注释包括函数名、参数、
返回值、功能描述。始终保持代码的整洁和可读性。

提示2:生成测试用例
请根据生成的代码 {{ 生成的代码 }} 生成相应的测试用例,保证测试用例能够覆盖生成的代码。

提示3:代码检视
请对 {{ 代码和测试用例 }} 进行检视,找出代码中存在的问题,并给出改进建议。

提示4:解决问题
请根据检视建议对 {{ 生成的代码 }} 和测试用例 {{ 生成的测试用例 }} 进行改进优化,同时保证测试
用例能够通过。

复杂任务拆解

如果你一开始还不太清楚如何将一个任务拆解为多个子任务,那么你也可以提示链技术借助LLM的能力,
将任务拆解为多个子任务。

系统提示词:
你是一个任务拆解专家,请根据用户的需求,将任务拆解为多个子任务。目标是尽可能的将任务拆解为
细粒度的子任务。

提示词1:
这是一个复杂任务 {{ 任务描述 }} ,将任务拆解为多个子任务或者执行步骤。

提示词2:
根据 {{ 任务拆解 }} ,列出每个子任务的具体目标和预期结果。

提示词3:
根据 {{ 任务拆解 }} ,列出每个子任务需要完成指定目标所需要使用的方法或者解决方案。

提示词4:
请根据 {{ 任务拆解 }} 和 {{ 子任务目标 }} ,列出每个子任务的执行优先级。

提示词5:
请根据 {{ 任务优先级 }} ,列出每个子任务的执行顺序。

提示词6:
请根据 {{ 任务拆解 }} 列出每个子任务需要依赖的外部资源。

参考文章:

https://www.prompthub.us/blog/prompt-chaining-guide
https://www.ibm.com/topics/prompt-chaining
https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/chain-prompts
https://www.promptingguide.ai/techniques/prompt_chaining

提示词工程-ReAct提示词(反应式)-让智能体像人一样思考和行动

文章会实时同步到我的公众号,有兴趣的童鞋扫码关注我的公众号噢:

提示词工程-ReAct

提示词工程的魅力就在于,让你可以变成现代版的祭师,能够让大模型言听计从,控制大模型做你想做的事情。

我不太确定超级智能会在未来的哪一天出现,但是从AI的快速迭代和进化来看,我们似乎可以预测,这一天不会遥远。一直以来,创造一个能够自主思考,自主学习和进化的智能体应该是AI发展的终极目标,而在这样的发展进程中,提示词工程也许只是这个进程中的一小段旅程,也许有一天,这项技术会成为历史,不过至少现在,它能够让我们对AI大模型有更加深入的了解,并且助力大模型变得更加聪明和务实。

起初,很难相信,生成模型会具有思考的能力,可当研究人员不断的探索出新的提示词技术时,这种怀疑逐渐得到了清晰的答案。

ReAct 提示词

ReAct 是 "Reasoning and Acting" 的缩写,旨在通过结合推理和行动来提高模型在复杂任务中的表现。

起初该框架由Yao 等人于2022年提出。

ReAct提示词实际上是one-shot或者few-shot提示词的一种(对于什么是one-shot,few-shot提示词,请阅读《提示词工程-少样本提示》)。
简单的说,就是给AI大模型一个思考-行动的例子,通过该例子,表明完成一件特殊任务时,思考和行动的基本框架和逻辑。ReAct本身是拟人化的,模拟人类思考和行动的基本方式,这里我可以举一个非常简单的例子,比如肚子饿了,非常想吃蛋糕:

问题:俺肚子饿了,非常想吃蛋糕。
思考:看看家里有没有买了蛋糕啊?
行动:去冰箱里看看,去厨房看看,发现没有。
思考:想吃自己做的蛋糕呢,还是去点外卖呢,哎,最近有点懒,不想动,还是外卖吧!
行动:打开手机APP,搜索蛋糕,得到种类繁多的蛋糕。
思考:我到底想吃哪一种呢,好像提拉米苏更加诱人一些。
行动:下单购买提拉米苏。
......

以上只是一个非常简单的例子,对人类来说,看起来是件非常普通和自然的事情,可是将思考方式分解,用来提示AI大模型时,会出现非常神奇的效果。

与链式思维推理类似,ReAct 是一种提示工程方法,使用少量样本学习来教模型解决问题。CoT 旨在模仿人类思考问题的方式,ReAct 也包含了这种推理元素,但更进一步地允许智能体通过文本操作与其环境进行交互。人类通过语言推理(说话或思考)来帮助制定策略和记忆事物,但我们也可以采取行动来获取更多信息并实现目标。这就是 ReAct 的基础。

ReAct 提示包括包含行动的示例,通过行动获得的观察,以及人类在过程中不同阶段的书面思考(推理策略)。LLM 学会模仿这种交替进行思考与行动的方法,使其成为环境中的智能代理。下方是 ReAct 智能体如何运作的示例,(按“思考 -> 行动 -> 观察 -> 思考”顺序)。

ReAct智能体的任务执行的大致过程:

  • 用户提出问题。
  • 思考,第一步应该做什么,决定执行动作和环境互动。
  • 行动,使用外部工具,从环境中获取需要的信息。
  • 观察,将行动的结果和收集的信息作为下一步思考的输入。
  • 思考,判断是否问题得到解决,基于上一步观察的结果,重新制定下一步需要执行的动作。
  • 重复以上循环,直到问题解决,或者得到了最终的答案,并结束。

ReAct 提示词是一种思考和行动的模版和范式,教AI大模型按照这种思维框架进行学习和解决问题,与其他提示工程不同的是,ReAct需用通过和环境的互动,获取信息,做动态的调整和规划。因此使用ReAct提示词时,同时需要实现智能体,或者智能代理,能够让智能体使用工具和外部环境进行交互。

更多ReAct提示词的例子

以下是一个来自论文的 ReAct 提示示例

你是知识问答机器人,你会帮助用户回答科学,地理等相关科普知识,给用户提供准确的答案,请以以下例子为参考,以思考-行动-观察 迭代的方式,确保你的答案是实时准确的,你可以通过搜索引擎获取外部知识。

问题:科罗拉多造山运动的东部区域延伸到的区域的海拔范围是多少? 
思考 1:我需要搜索“科罗拉多造山运动”,找出其东部区域延伸到的地方,然后找出该区域的海拔范围。 
行动 1:搜索[科罗拉多造山运动] 
观察 1:科罗拉多造山运动是科罗拉多及周边地区发生的造山事件。 
思考 2:资料中没有提到东部区域,因此我需要查找“东部区域”。 
行动 2:查找[东部区域] 
观察 2:(结果 1 / 1)东部区域延伸到大平原,被称为中央平原造山运动。 
思考 3:科罗拉多造山运动的东部区域延伸到大平原。因此,我需要搜索“大平原”的海拔范围。 
行动 3:搜索[大平原] 
观察 3:“大平原”指的是两种不同的土地区域之一。 
思考 4:我需要改为搜索“美国大平原”。 
行动 4:搜索[美国大平原] 
观察 4:大平原是大平原的一个子区域。从东到西,大平原的海拔从约 1,800 英尺(550 米)上升到 7,000 英尺(2,130 米)。 
思考 5:大平原的海拔范围是从约 1,800 英尺到 7,000 英尺,因此答案是 1,800 英尺到 7,000 英尺。 
行动 5:完成[1,800 英尺到 7,000 英尺]

通用ReAct智能体提示词模版

以下提供的提示词模版是对ReAct的抽象和总结,通过以下模版,开发人员可以定义 AI Agent的基本角色和用户场景,以及智能体能够和外界交互的可用工具集。同时指导智能体在执行特定任务时,需遵从“思考-》执行任务-》观察-》思考”的迭代过程。

以下的ReAct通用提示词可以使用在任何任务场景,程序员只要稍加调整和修改就可以应用在自己的工具和用例里。

TOOL_DESC = """{name_for_model}: Call this tool to interact with the {name_for_human} API. What is the {name_for_human} API useful for? {description_for_model} Parameters: {parameters} Format the arguments as a JSON object."""

REACT_PROMPT = """Answer the following questions as best you can. You have access to the following tools:

{tool_descs}

Use the following format:

Question: the input question you must answer
Thought: you should always think about what to do
Action: the action to take, should be one of [{tool_names}]
Action Input: the input to the action
Observation: the result of the action
... (this Thought/Action/Action Input/Observation can be repeated zero or more times)
Thought: I now know the final answer
Final Answer: the final answer to the original input question

Begin!

Question: {query}"""

以下是该提示词模板的中文翻译:

TOOL_DESC = """{name_for_model}:调用此工具以与{name_for_human} API 交互。{name_for_human} API 有什么用途?{description_for_model} 参数:{parameters} 将参数格式化为 JSON 对象。"""

REACT_PROMPT = """请尽可能准确地回答以下问题。你可以使用以下工具:

{tool_descs}

使用以下格式:

问题:你必须回答的输入问题
思考:你应该始终考虑要做什么
行动:要采取的行动,应为 [{tool_names}] 之一
行动输入:行动的输入
观察:行动的结果
...(此思考/行动/行动输入/观察可以重复零次或多次)
思考:我现在知道最终答案了
最终答案:对原始输入问题的最终答案

开始!

问题:{query}"""

写在最后

由于ReAct需要通过环境来获取信息,因此从环境中获取的信息的准确性会严重影响最终的输出结果。因此开发者需要考虑环境信息的准确和可靠,才能保证ReAct应用的性能和可靠性。

ReAct的推理并不完美,但仍然是一种强大的提示工程方法,它克服了链式推理中的幻觉问题,并使大型语言模型能够成为可以与环境互动的智能体。此外,这是一种非常可解释的方法,因为智能体在行动时会输出其思维过程。

ReAct提示词可以让智能体变的更加聪明,帮助我们解决更加复杂的问题,探索ReAct智能体是一件非常有趣的过程。

我相信你一定好奇,如何使用以上的提示词模版实现一个能够自主思考的智能体,接下来后续的文章我将分析如何通过不同的Agent框架,快速的构建智能体,希望持续关注我的博客文章。

参考文章:

提示词工程-高效提示词的基本结构

提示词工程-高效提示词的基本结构

自从生成式人工智能技术产生已来,提示词工程成为一种新的职业方向。提示词工程(Prompt Engineering)是一种在生成式人工智能(如GPT模型)中创建和优化提示词以获得期望输出的方法。

所谓的提示词,其实就是人和AI交互时的输入,可以是一个问题,一段描述性的指示,生成式AI可以根据你的指示或者问题,输出你期望的内容。

随着各个领域的工程师不断的实践和评估,实践经验发现,有效的机构化的提示词可以控制大模型输出的准确性和有效性,同时可以控制大模型输出的幻觉等。

提示词的基本结构

根据大家的经验,如果在写提示词时遵循如下的结构,可以提升和AI交互的效率:

  • 角色(role):交互时通过给AI大模型设定某种角色,根据经验可以获得意想不到的效果,可以使大模型的输出更加具有个性化,专业化,同时能够增加模型输出的准确性。比如如下的例子,指明AI大模型为一个通信专家,就是给当前交互的AI上下文设定了角色。

假设你是一名通讯专家。起草一封电子邮件给你的客户,告知他/她由于物流问题导致的交货时间延迟。

  • 指示/指令(task/instruction):指示或者指令,是指示AI大模型需要完成的任务,比如通过何种知识及技能,来完成何种任务。以下例子中指示或者指令为现在为一个黑客马拉松设计一个挑战性任务,涉及加密和解密。

假设你是一名软件工程师,正在设计一个涉及加密技术的黑客马拉松任务。任务设计应适合中高级开发者,且应在4小时内完成。请用五个步骤描述设计这个任务的过程,确保任务能够让参与者理解现代加密算法的核心原理。现在为一个黑客马拉松设计一个挑战性任务,涉及加密和解密。

  • 上下文(context):当你给出与任务相关的背景或细节时,可以帮助AI大模型更好的理解任务的具体情况,使得输出更加精确。以上示例中上下文部分为正在设计一个涉及加密技术的黑客马拉松任务
  • 输入或者问题:需要大模型执行具体的任务,或者具体的问题, 有时候如果指令部分描述的是具体的任务时,则指令部分就是输入。以上示例中指令部分就是输入部分:现在为一个黑客马拉松设计一个挑战性任务,涉及加密和解密
  • 约束:有时候需要限制AI大模型的输出范围,设定一些约束条件,可以对输出进行控制。以上示例中通过约束任务设计应适合中高级开发者,且应在4小时内完成来控制马拉松挑战的难度。
  • 输出格式:输出格式,主要给大模型指明,输出特定内容时的格式,比如输出为Json或者Markdown等。以上示例中请用五个步骤描述设计这个任务的过程指明了输出结构。
  • 例子:提供例子可以贡AI大模型进行参考,可以有效的提高输出的准确度,比如 few-shot prompt 就是提供一个或者多个例子,使得大模型的输出更加确定。

一些范例

以下是基于 角色+指令+上下文+输入问题+约束+例子 格式提供的几个提示词范例:

范例 1: 生成文章

角色: 你是一名资深环境学家。

指令: 我需要撰写一篇关于气候变化影响的文章,你可以作为我的咨询顾问。

上下文: 全球气温正在上升,极端天气事件变得更加频繁。政府和非政府组织正在采取措施应对这一问题。

输入问题: 气候变化如何影响不同地区的生态系统?政府可以采取哪些措施来减轻这些影响?

约束: 文章应包含三个部分:引言、影响分析、建议措施,总字数在500字左右。

例子: 引言可以描述气候变化的现状,然后分析不同地区生态系统的具体变化,最后提出可以采取的政策建议。


范例 2: 生成代码

角色: 你是一名Python开发者。

指令: 编写一个函数来排序学生的成绩。

上下文: 你正在开发一个学生成绩管理系统,需要能够对学生成绩进行排序,以便生成成绩单。

输入问题: 请编写一个Python函数,该函数接受一个包含学生姓名和成绩的字典,并按成绩从高到低排序。

约束: 函数应返回一个排序后的字典,并考虑成绩相同的学生按姓名字母顺序排序。

例子: sort_students({'Alice': 90, 'Bob': 85, 'Charlie': 90}) 应返回 {'Charlie': 90, 'Alice': 90, 'Bob': 85}


范例 3: 生成产品设计思路

角色: 你是一名用户体验设计师。

指令: 根据我的具体问题,帮助我设计一个新的移动应用的用户界面,旨在提高用户的日常习惯养成。

上下文: 现代用户越来越注重健康和效率,他们希望有一个工具可以帮助他们建立和维持良好的习惯。

输入问题: 如何设计一个易于使用且能激励用户的移动应用界面,以帮助他们每天坚持新习惯?

约束: 应用界面应简洁,包含进度追踪功能,且用户在3次点击内能完成主要操作。设计思路应包括界面草图和功能说明。

例子: 设计思路可以包含一个主页,展示用户的日常目标和进度条,点击进度条后弹出完成按钮,点击按钮后弹出激励语。


范例 4: 撰写故事

角色: 你是一名侦探小说作家。

指令: 帮助创作一段紧张的情节,描述侦探发现关键线索的过程。

上下文: 故事发生在一个封闭的庄园内,庄园主神秘失踪,侦探正深入调查此案。

输入问题: 侦探在调查庄园的书房时,意外发现了一个隐藏的密室,里面藏有庄园主失踪前留下的日记。

约束: 描述应突出侦探的推理过程和发现的细节,字数控制在300字以内。

例子: 可以描述侦探如何通过书架上的不寻常痕迹发现密室,并在日记中找到庄园主最后的遗言。


范例 5: 创建商业计划

角色: 你是一名创业顾问。

指令: 帮助制定一份初创企业的商业计划,侧重于市场分析和融资策略。

上下文: 一家专注于环保产品的初创公司希望进入市场并获得第一轮融资。

输入问题: 如何评估目标市场的潜力,并制定有效的融资策略来吸引投资者?

约束: 商业计划应包括市场分析、竞争对手分析、产品定位、融资目标和策略,总字数控制在1500字以内。

例子: 市场分析部分可以包括市场规模、增长率和用户画像,融资策略可以包括股权分配和投资回报预期。


这些范例展示了如何通过角色+指令+上下文+输入问题+约束+例子的结构来创建明确且有效的提示词。每个范例都针对特定的任务和输出需求进行了设计,以确保生成的内容符合预期。

参考文章:

本文系本站原创文章,著作版权属于作者,未经允许不得转载,如需转载或引用请注明出处或者联系作者。