编写清晰指令的技巧:定角色、用分隔符、给示例

核心知识点讲解

为什么清晰的指令如此重要?

在构建AI智能体时,清晰的指令是成功的关键。LLM(大语言模型)虽然强大,但它们不会读心术。如果你的指令模糊不清,模型很可能会产生偏离预期的输出。

清晰指令的好处:

  • 提高输出的相关性和准确性
  • 减少模型的幻觉(hallucination)
  • 节省反复调整的时间
  • 使智能体行为更加可预测

技巧一:设定明确的角色

为AI智能体设定一个明确的角色,就像给它穿上一件专业的“制服”,让它知道自己应该如何思考和回应。

角色设定的重要性

  • 帮助模型调整语气和专业度
  • 明确模型的知识边界和职责范围
  • 提供上下文框架,使回答更符合场景

示例

# 不设定角色
prompt = "解释什么是量子计算"

# 设定角色
prompt = "你是一位专业的量子物理学家,擅长用通俗易懂的语言解释复杂概念。请解释什么是量子计算,包括其基本原理和潜在应用。"

技巧二:使用分隔符组织信息

分隔符是提示词工程中的“语法糖”,它们帮助模型更好地理解输入的不同部分。

常用的分隔符

  • 三引号:"""'''
  • 三重反引号:```
  • XML标签:<input><context><output>
  • 其他符号:=====------>>>>>

分隔符的作用

  • 明确区分指令、上下文和输入
  • 防止提示词注入攻击
  • 提高模型对边界的识别能力

示例

# 使用三引号分隔上下文
prompt = """你是一位专业的影评人。请基于以下电影简介,撰写一篇500字左右的影评。

电影简介:
"""在未来的2154年,人类开始在潘多拉星球开采一种名为“unobtanium”的珍贵矿物。为了与当地的纳美人沟通,人类创造了基因工程人类-纳美人混合体,称为“阿凡达”。前海军陆战队员杰克·萨利被派往潘多拉,他的任务是说服纳美人离开他们的家园。但在与纳美人的接触中,杰克逐渐爱上了这个星球和它的人民,最终站在了纳美人一边,与人类军队对抗。"""

请从剧情、视觉效果、主题思想三个方面进行评价,并给出你对这部电影的总体评分(1-10分)。"""

# 使用XML标签
prompt = "<role>专业的产品经理</role>
<task>基于以下用户需求,生成一份产品需求文档</task>
<user_requirement>
我需要一个能够帮助学生管理学习时间的应用,包括任务提醒、番茄钟功能、学习数据分析等。
</user_requirement>
<output_format>
产品需求文档应包含:产品概述、核心功能、用户流程、界面设计建议四个部分。
</output_format>"

技巧三:提供示例(少样本学习)

为模型提供示例是一种强大的技术,称为“少样本学习”(Few-Shot Learning)。通过展示输入和期望输出的配对,你可以引导模型理解任务的具体要求。

示例的类型

  • 输入-输出对:展示完整的任务示例
  • 格式示例:仅展示期望的输出格式
  • 部分示例:展示任务的开始部分

示例的最佳实践

  • 使用2-3个高质量示例
  • 示例应覆盖不同的情况
  • 示例应与目标任务高度相关
  • 保持示例的一致性和简洁性

示例

# 少样本学习示例:情感分析
prompt = """请分析以下电影评论的情感倾向,判断是积极还是消极。

示例1:
评论:这部电影太精彩了!演员的表演非常出色,剧情跌宕起伏,特效也很震撼。我已经看了三遍了,每次都有新的发现。
情感:积极

示例2:
评论:这部电影让我非常失望。剧情混乱,角色塑造单薄,两个小时的观影体验简直是煎熬。我不建议任何人浪费时间看这部电影。
情感:消极

现在请分析以下评论:
评论:这部电影的特效做得不错,但剧情发展有点缓慢,演员的表演中规中矩。整体来说,是一部可以一看的电影,但没有什么特别出彩的地方。
情感:"""

技巧四:明确输出格式要求

告诉模型你期望的输出格式,就像给它一个“模板”,让它按照你的要求组织信息。

常见的输出格式

  • 段落文本
  • 列表(有序/无序)
  • 表格
  • JSON
  • 代码
  • 特定结构(如问答、摘要等)

示例

# 要求输出为JSON格式
prompt = """请将以下产品信息转换为JSON格式,包含id、name、price、category四个字段。

产品信息:
名称:智能手表
价格:1299元
类别:可穿戴设备
产品ID:PROD-2024-001
"""

# 要求输出为表格格式
prompt = """请将以下学生成绩转换为Markdown表格格式,包含姓名、数学、语文、英语、总分五列。

学生成绩:
张三:数学95,语文88,英语92
李四:数学87,语文91,英语85
王五:数学92,语文89,英语94
"""

技巧五:控制输出长度

明确指定输出的长度范围,避免模型输出过长或过短的内容。

长度控制的方法

  • 指定具体的字数或句数
  • 使用相对描述(简短、详细、中等长度)
  • 提供长度的上下限

示例

# 指定具体字数
prompt = "请用不超过100字的篇幅,简要介绍人工智能的发展历程。"

# 使用相对描述
prompt = "请详细解释什么是机器学习,包括其基本原理、主要算法类型和应用场景。"

# 提供长度范围
prompt = "请为以下产品撰写一条30-50字的营销文案:智能恒温杯,支持APP远程控制温度,内置锂电池可续航8小时。"

实用案例分析

案例一:构建专业的客户服务智能体

场景描述
你需要构建一个客户服务智能体,用于回答用户关于产品的问题。智能体需要保持专业、友好的语气,并提供准确的信息。

提示词设计

prompt_template = """你是[公司名称]的专业客户服务代表,你的名字叫[智能体名称]。你非常熟悉公司的所有产品和服务,并且善于用友好、专业的语气回答客户的问题。

请记住以下几点:
1. 始终保持礼貌和专业
2. 尽可能提供详细、准确的信息
3. 如果不确定答案,不要猜测,而是告诉客户你会查询相关信息后回复
4. 结束对话时,邀请客户提供反馈

现在,请回答以下客户问题:

客户问题:{customer_question}

回答:"""

应用效果

  • 智能体始终保持专业的客户服务语气
  • 回答内容更加准确和相关
  • 客户体验得到显著提升

案例二:创建高效的内容摘要工具

场景描述
你需要构建一个内容摘要智能体,能够将长文本压缩为简洁的摘要,同时保留核心信息。

提示词设计

prompt_template = """你是一位专业的内容编辑,擅长将长文本提炼为简洁的摘要。请基于以下文本,生成一个不超过200字的摘要,确保包含所有核心信息。

文本:
{long_text}

摘要:"""

应用效果

  • 生成的摘要长度适中,符合要求
  • 核心信息得到有效保留
  • 摘要语言流畅,逻辑清晰

案例三:开发智能的代码解释器

场景描述
你需要构建一个代码解释智能体,能够分析代码并解释其功能、逻辑和潜在问题。

提示词设计

prompt_template = """你是一位资深的软件工程师,擅长分析和解释代码。请分析以下代码,然后提供:
1. 代码的功能和用途
2. 代码的核心逻辑
3. 代码中可能存在的问题或优化空间
4. 代码的执行流程(可选)

代码:
```python
{code}

解释:"""


**应用效果**:
- 代码解释全面、准确
- 能够识别潜在的问题和优化空间
- 解释语言通俗易懂,适合不同层次的开发者

## 代码示例

### 示例1:使用分隔符和角色设定构建提示词

```python
from langchain import PromptTemplate

# 定义提示词模板
prompt_template = PromptTemplate(
    input_variables=["topic", "audience"],
    template="""你是一位专业的{audience}领域专家,擅长用通俗易懂的语言解释复杂概念。

请基于以下主题,撰写一篇500字左右的科普文章,要求结构清晰,内容准确,语言生动。

主题:{topic}

文章应包含:
1. 概念介绍
2. 工作原理
3. 应用场景
4. 未来发展

文章:"""
)

# 生成提示词
prompt = prompt_template.format(
    topic="人工智能中的神经网络",
    audience="计算机科学"
)

print(prompt)

示例2:使用少样本学习进行情感分析

from langchain import LLMChain, PromptTemplate
from langchain_openai import OpenAI

# 初始化LLM
llm = OpenAI(temperature=0)

# 定义情感分析提示词模板
prompt_template = PromptTemplate(
    input_variables=["examples", "review"],
    template="""请分析以下产品评论的情感倾向,判断是积极、消极还是中性。

示例:
{examples}

现在请分析以下评论:
评论:{review}
情感:"""
)

# 准备示例
examples = """
示例1:
评论:这个产品质量非常好,功能齐全,价格也很合理。我非常满意这次购买。
情感:积极

示例2:
评论:这个产品让我非常失望,做工粗糙,功能也不完善。我不会推荐给朋友。
情感:消极

示例3:
评论:这个产品中规中矩,没有特别出彩的地方,也没有明显的缺点。
情感:中性
"""

# 创建LLMChain
chain = LLMChain(llm=llm, prompt=prompt_template)

# 测试评论
reviews = [
    "这款手机的续航能力很强,一天下来还有40%的电量,拍照效果也不错。",
    "这家餐厅的服务态度很差,食物也不新鲜,不会再来了。",
    "这部电影的特效做得不错,但剧情有点老套。"
]

for review in reviews:
    result = chain.run(examples=examples, review=review)
    print(f"评论:{review}")
    print(f"情感:{result}")
    print("---")

总结与思考

关键要点回顾

  1. 角色设定:为智能体设定明确的角色,帮助它调整语气和专业度。
  2. 分隔符使用:使用分隔符组织信息,提高模型对边界的识别能力。
  3. 示例提供:通过少样本学习,引导模型理解任务的具体要求。
  4. 格式要求:明确输出格式,让模型按照你的要求组织信息。
  5. 长度控制:指定输出长度范围,避免模型输出过长或过短的内容。

实践建议

  • 循序渐进:从简单的提示词开始,逐步添加更多技巧。
  • 持续测试:不断测试和调整提示词,找到最适合特定任务的版本。
  • 记录模板:建立提示词模板库,方便后续重复使用和改进。
  • 学习优秀示例:研究他人的优秀提示词,学习其中的技巧和思路。

未来学习方向

  • 思维链(Chain-of-Thought):引导模型进行逐步推理。
  • 思维树(Tree of Thoughts):处理更复杂的问题分解。
  • 提示词优化工具:探索使用工具辅助提示词设计和测试。
  • 多语言提示词:学习如何针对不同语言优化提示词。

通过掌握这些编写清晰指令的技巧,你将能够构建更加智能、可靠的AI智能体,为各种应用场景提供更好的解决方案。在接下来的课程中,我们将深入探讨更多高级提示词工程技术,帮助你进一步提升智能体的性能和能力。

« 上一篇 提示词的基本结构:指令、上下文、输入、输出指示器 下一篇 » 思维链(Chain-of-Thought)引导模型逐步推理