让LLM听懂人话——如何写出高质量Prompt

376 阅读10分钟

简介

在自然语言处理(NLP)和大语言模型(LLM)中,提示(prompt)通常是指用户输入的文本或问题。通过仔细设计和选择提示,可以指导模型的生成过程,使其更符合用户的需求。

是的,很官方的解释,用人话讲其实就是教一个什么都不会的小孩子完成你的需求。但是为什么说是什么都不会的小孩呢,明明大家在平时使用大模型时,感觉它是无所不能的,什么问题都能回答个一二三四出来。 但是别忘记了目前市面上的LLMs都是概率模型,说得不好听它们只会算概率,只会算出一个最合乎语义或者关键词的答案给你,而且有时亦会胡说八道,官方叫模型幻觉,这个是不可避免的,因为我们都知道没有100%概率的事情。而接下来的Prompt构建、RAG的实践等一系列介绍都是为了尽可能的减少幻觉的产生。

提示词工程(Prompt engineering) 是指设计和优化提示的过程,以使人工智能模型能够更好地理解用户的意图和要求,并生成更准确、有用的响应。Prompt Engineering 的主要目标是:

  • 了解如何格式化和设计提示使模型效果最佳。
  • 探索不同 prompt 对模型输出的影响。
  • 创造出能优化模型输出的提示。

一般业务优化的过程,主要包括三个环节,prompt 设计、prompt 优化和 prompt 评测,如下我们分别分三个部分来进行介绍。说是三部分,其实简述而言亦像一个粗糙的开始,一个精心的优化,一个严格的打分。

Prompt 设计

目标:选择适合的格式与语言,清晰明确的表达用户意图 过程:使用Pormpt前,明确目的,简单说就是你想让模型干什么,然后构造Prompt,主要包括以下关键点:

使用更详细的Query

当然亦可以使用简单的Query,在需要创意表达上,简短的Prompt可能更有爆发力。 但是如果像需要完成准确性优先的任务,详细的Query是一项减少LLM误解的不错选择,这样也是一种帮大模型减负的方法,官方说法叫剪枝。就像你并不想老板叫你修改方案时只说客户不满意而不告诉你哪里不满意。

简易Q详细Q
写一篇关于环保主题的文章,500字以上请撰写一篇500字的文章,讨论城市绿化对空气质量改善的影响。文章应包括以下方面的内容:城市绿化的定义,如树木和公园的增加,它们如何减少空气中的污染物,以及在城市规划中推广城市绿化的可行性措施。请提供相关数据和案例研究以支持你的论点。

引导结构与要求

在这个过程中,可以为任务提供明确的结构和组织要求。指明任务的各个部分应该包括什么内容,有助于模型组织思维和材料,其实就是更详细的描述需求。

请撰写一篇500字的文章,讨论城市绿化对空气质量改善的影响。文章应包括以下方面的内容:

  1. 引言:介绍城市绿化和其重要性。
  2. 影响空气质量的机制:解释树木和公园如何减少空气中的污染物。
  3. 可行性措施:讨论在城市规划中推广城市绿化的方法和挑战。
  4. 数据和案例研究:提供相关数据和至少两个城市绿化成功案例,以支持你的论点。
  5. 结论:总结城市绿化对空气质量的积极影响

Prompt 优化

个人认为优化的方向应该选择结构化提示词。 最直观的感受就是 结构化 , 将各种想要的, 不想要的, 都清晰明确地 表述在设计好的框架结构中:

  • 语法

    这个结构支持 Markdown 语法, 也支持 YAML 语法, 甚至纯文本手动敲空格和回车都可以. 我个人习惯使用 Markdown 语法, 一方面便于集成在各种笔记软件中进行展示, 另一方面 考虑到各类LLM的训练语料库中该类型的材料更多一些.

  • 结构

    结构中的信息, 可以根据自己需要进行增减, 从中总结的常用模块包括:

    • ## Role:  指定角色会让 LLM 聚焦在对应领域进行信息输出
    • ## Profile author/version/description :  Credit 和 迭代版本记录
    • ## Goals:  一句话描述 Prompt 目标, 让 LLM Attention 聚焦起来
    • ## Constrains:  描述限制条件, 其实是在帮 LLM 进行剪枝, 减少不必要分支的计算
    • ## Skills:  描述技能项, 强化对应领域的信息权重
    • ## Workflow:  重点中的重点, 你希望 Prompt 按什么方式来对话和输出
    • ## Examples: 给予LLm一些标准供其参考
    • ## Initialization:  冷启动时的对白, 也是一个强调需注意重点的机会

下面通过例子介绍一些结构中的重点

让模型扮演一个角色 (## Role)

让模型扮演一个具体的角色,模型的输出会更符合人类的表达方式,从而更容易被人类理解;同时输出也会更加一致。例如,在问答系统中,让模型扮演一个特定领域的专家可以使其回答更符合该领域的知识和语言习惯,从而提高回答的一致性。例如,设定其作为一个信息提取专家。

屏幕截图 2025-10-09 195205.png

限制性回答 (##Constrains)

针对模型的输出,可以限制输出的格式,一方面可以提高可读性,使结果更清晰明了;另一方面也可以方便后续的处理,提高稳定性。

就像第一版的AI辅导员中对政策性回答的输出进行格式要求:

[政策来源] 《XX管理办法》第X章(202X修订版/试行)

[核心内容] {严格依据知识库内政策文件原文提炼关键条款,精简至200字内}

[执行要点] 截止时间:XX月XX日(取自政策文件明确时间);材料:XX申请表、身份证复印件等(按政策文件清单列出);地点:XX行政楼X室(政策文件指定地点)

[温馨提示] 若依据修订/试行文件,需添加:“注:本条依据202X修订版/试行办法,具体以学校最新通知为准”;无特殊标识则说明:“注:本条依据学校现行有效政策文件”

[延伸询问] 需要了解:①申请流程 ②常见问题 ③相关注意事项?

按角色点技能树 (##Skills)

将你的需求准确告知LLM,要做什么,做到什么程度,当然这里也存在限制性回复。

image.png

指定完成任务的工作步骤(## Workflow)

完成特定任务,如果有明确的步骤,通过指定完成任务需要的步骤,可帮助模型按照正确的顺序执行,从而更好地生成回复。例如:发票信息识别其中一个专家的工作步骤如下:

image.png

有样学样 (## Examples)

针对特定领域的问题,如果涉及到专业知识,提供相关的参考内容可以帮助模型更好地理解问题的背景和上下文,从而减少幻觉的出现。例如:政策咨询助手的Propmt中对其中一项条例的示例。

image.png

Prompt 评测

系统地测试变更

在完成上面的 prompt 设计和优化之后,prompt 会发生变更,但是如何判断这个变化,是否真的使系统变得更好。一般是先通过看几个例子来确定哪个更好,但是由于样本量小,很难区分是真正的改进还是运气导致,所以需要设计一个好的评估集,在经过若干次迭代之后,用评估集来判定系统是否真正得到了改进。
好的评估集,一般具有如下特征:

  • 多样性:评估集中应该包含足够的多样性,以涵盖不同的领域、话题和语境。
  • 高质量:评估集中的数据应该是高质量的,能准确反映了真实的业务情况。
  • 规模适中:评估集的规模应该足够大,以便能够充分评估 prompt 的性能,但又不能太大以至于导致计算资源的过度消耗。通常,几百到几千个样本是一个合理的范围。

重复和迭代

prompt 的生成过程,实际上是一项实验性很强的过程,在这个过程中,需要不断地尝试和调整不同的方法,以找到最优的 prompt。一个典型的迭代路径是:首先完成 prompt 设计,接着基于设计好的 prompt 获取实验结果,分析 bad cases,解 bad cases,并进一步优化 prompt,通过多次的重复和迭代,直到达到一个最优效果。

最后,进一步的说明则是,让LLM反馈出最佳的输出不仅仅需要在Prompt中下功夫,同时需要照顾用户的反馈和修正,再优化,又接收返回,不断的良性循环才能让模型更顺利的理解与满足用户的需求。

示例

这里用一个文字排版专家以举例

## Role: 文字排版大师

## Profile:

- author: Arthur
- version: 0.5
- language: 中文
- description: 使用 Unicode 符号和 Emoji 表情符号来优化排版已有信息, 提供更好的阅读体验

## Goals:
- 为用户提供更好的阅读体验,让信息更易于理解
- 增强信息可读性,提高用户专注度

## Constrains:
- 不会更改原始信息,只能使用 Unicode 符号和 Emoji 表情符号进行排版
- 排版方式不应该影响信息的本质和准确性
- 使用 Unicode 符号和 Emoji 表情时比较克制, 每行不超过两个

## Skills:
- 熟悉各种 Unicode 符号和 Emoji 表情符号的使用方法
- 熟练掌握排版技巧,能够根据情境使用不同的符号进行排版
- 有非常高超的审美和文艺能力
- 擅长使用横线分隔符优化信息展示 "━━━━━━━━━━━━━━━━━━"

## Workflows:
- 作为文字排版大师,将会在用户输入信息之后,使用 Unicode 符号和 Emoji 表情符号进行排版,提供更好的阅读体验。
  1. 整体信息的第一行为标题行, 对其进行线框包围, 提升阅读体验
  2. 信息 item 前面添加序号 Emoji, 方便用户了解信息编号
  3. 信息 item 前面添加一个 Emoji, 对应该信息的核心观点
  4. 末尾如果有链接, 则将其用线框分隔

## Initialization:
欢迎用户, 并提示用户输入信息

附录

分享一些测试的结果

参数设置

这里举小部分参数介绍一下

  • Temperature : 用于控制模型输出结果的随机性。Temperature 的值越高,输出的随机性就越大,Temperature 的值越低,输出的随机性就越小。
  • Top P :控制生成结果的随机性。数值越小,随机性越弱;数值越大,随机性越强。
  • 回复频率 :用于降低模型重复相同内容的可能性,如果该值为正,那么新 token 会根据其在已有文本中的出现频率受到相应的惩罚。

其实可以看到Temperature和Top p是比较重复的 所以在实践中我们一般设定其中一个即可。而像回复频率就是对输出做限制的参数。

参考配置

一般情况,创意工作 Temperature=0.7 ,Top p=0.9

分类任务,稳定输出 T=0.3 , Top p=0.5