Prompt Engineering基础实践:角色设定/约束条件等技巧

前言

之前学习了一些模型API调用,以及一些文本分类和内容生成的一些基础技巧和案例,接下来实操一下 Prompt Engineering 相关技巧

Prompt Engineering

Prompt Engineering(提示词工程)是设计和优化用于与AI语言模型交互的输入提示的过程,目的是引导模型产生更准确、相关和有用的输出

这个常用AI工具都知道,平时和AI对话的内容就是提示词,根据不同场景使用不同的对话方式和提问技巧,AI模型才会根据不同提示词回答不同的结果

基本原则

  1. 明确性:清晰表达需求
  2. 具体性:提供详细信息
  3. 上下文:给出必要背景
  4. 示例:提供参考样例
  5. 约束:设定输出限制

这方面就不多说了,瞎给AI说,让AI去猜的话,Ta的回答也是瞎掰,这些都是基本使用技巧,我们主要还是看代码中是如何使用的

基础实践

零样本提示

零样本提示(Zero-shot Prompting)是指在没有任何示例的情况下,直接给模型一个任务描述,让模型根据描述完成任务

例如直接问豆包,"判断以下文本的情感:今天的天气真糟糕,一切都不顺利!",模型会根据描述直接回答

如果是问豆包"今天北京的天气怎么样?",这个回答是查了相关天气API然后回答的

下面看代码的情况

python 复制代码
import os 
from dotenv import load_dotenv 
from openai import OpenAI 

# 加载环境变量 
load_dotenv() 

# 初始化客户端 
client = OpenAI(api_key=os.getenv("OPENAI_API_KEY")) 

from openai import OpenAI
client = OpenAI()

response = client.chat.completions.create(
    model="gpt-5-nano",
    messages=[
        {"role": "user", "content": "判断以下文本的情感:今天的天气真糟糕,一切都不顺利!"}
    ]
)

print(f"情感判断结果: {response.choices[0].message.content}")

输出情感结果:负面,并说明了理由

和文本分类,文本生成代码用法一样,只是 content 参数中的内容变了

少样本提示

少样本提示(Few-shot Prompting),就是提供少量示例引导模型的回答

看下面这个例子

python 复制代码
response = client.chat.completions.create(
    model="gpt-5-nano",
    messages=[
        {"role": "user", "content": "将以下文本分类为积极、消极或中性:\n1. 这部电影太棒了!→ 积极\n2. 今天下雨了。→ 中性\n3. 我讨厌排队。→ 消极\n4. 这家餐厅的食物很美味。→"}
    ]
)

print(response.choices[0].message.content)

提供了三种类型的分类示例,让模型分析提供的句子属于哪种分类结果

思维链提示

思维链提示(Chain-of-Thought Prompting),就是在提示中包含一系列中间步骤,引导模型逐步思考和解决问题

在一些需要多步骤操作推理的场景中,例如在编码中也常见,例如要实现一个复杂的函数功能,提示中可以包含函数的实现步骤,引导模型逐步编写代码

不过现在的AI模型似乎已经能够把很多需求自己分析理解直接干活了,很多时候直接在 Antigravity,Trae CN,等AI编辑器中直接描述需要的结果的就行(工程师彻底化身需求描述师)

好了,看个日常行程规划的例子,里面涉及到因果推理

python 复制代码
response = client.chat.completions.create(
    model="gpt-5-nano",
    messages=[
        {"role": "user", "content": "问题:小红要在周日完成以下事情:①洗衣服(30 分钟)、②做饭(40 分钟)、③打扫房间(25 分钟)、④看电影(1 小时)。请帮她规划最省时的顺序,并说明原因。请分步分析哪些事情可以同时做,再计算总耗时"}
    ]
)

print(response.choices[0].message.content)

模型分析的很好,给出回答的同时,还考虑了实际场景中的时间冲突问题,例如在做饭时要高度专注等,会降低并行程度

角色设定

角色设定(Role-playing Prompting),就是在提示中指定模型的角色和行为

例如,让它扮演专业客服,回答用户问题时要专业、友好;扮演一名专业老师,根据用户问题,用专业的语言回答

日常我们在AI编辑器中用的最多的就是角色设定,前提都是让模型扮演专业的资深工程师,然后根据问题回答对应的编码问题

下面看一个简单的代码例子

python 复制代码
response = client.chat.completions.create(
    model="gpt-5-nano",
    messages=[
        {"role": "system", "content": "你是一位专业的英语教师,请用简单易懂的方式解释语法。"},
        {"role": "user", "content": "请解释现在完成时的用法。"}
    ]
)

print(response.choices[0].message.content)

注意! 上面的代码明显参数多了内容,``message` 中包含了系统角色和用户角色的内容

虽然问题简单,模型的回答很丰富,还会进行下一步引导提示,完整输出如下

shell 复制代码
(venv) w@GYW:~/AIProjects/ai-agent-project$ python test_openai.py 
下面用简单的方式解释现在完成时(present perfect)。

1) 结构
- 肯定句:主语 + have/has + 过去分词(V3)
  - I have finished. / She has eaten. / They have gone.
- 否定句:主语 + have/has not + 过去分词
  - I have not seen it. / He hasn't finished yet.
- 疑问句:Have/Has + 主语 + 过去分词?
  - Have you visited Paris? / Has she eaten?

小提醒:动词的过去分词要记,规则动词用-ed,不规则动词要记形。

2) 现在完成时的常见用法(要点)
- 用法A:到现在为止的"经历"。不指明具体时间,强调已经做过某事的经验或经历。
  - 例:I have been to Japan. / Have you ever tasted sashimi?
- 用法B:从过去一直持续到现在,可能还在继续。常用 since/for 表示起点或持续时间。
  - 例:She has lived here for five years. / He has worked at the company since 2010.
- 用法C:最近发生,对现在有影响/结果。
  - 例:I have just finished my homework. / They have already left.
  - 常用词:just(刚刚)、recently/recent(最近)、already(已经)
- 用法D:在还没结束的时间段内发生过多次(或仍在发生)。
  - 例:This week I have seen three movies. / I have visited three museums today.(时间段还没结束)
- 用法E:与时间信号词搭配时的用法
  - 信号词:ever, never, just, already, recently, lately, so far, up to now, for, since, this week, today
  - 注意:带具体过去时间的词(yesterday、last year 等)通常用一般过去时,而不是现在完成时。

3) 与一般过去时的区别(要点对比)
- 现在完成时关注"直到现在的影响、经验或结果",不特别说具体哪一天发生了什么。
- 一般过去时讲的是"在过去某一具体时间发生并结束的事"。
  - 例:I lived in Paris for two years.(过去的经历,但已经结束) vs I have lived in Paris for two years.(到现在还可能还住在巴黎,强调持续到现在)
  
4) 常见错误及要点
- 错写过去分词:I have went(错,正确:gone)/ I have eaten(对)
- 不该和具体时间一起用现在完成时:有具体时间点的事用一般过去时,如 Yesterday I came home早;不过如果强调"从那时到现在的影响",也可用现在完成时但较少见。
- "have/has + been" 的用法:与地点、状态相关时常用 be 的过去分词(been)来表示去过某地或经历过某事。
  - I have been to China.(去过,回来) vs I have gone to China.(去中国了,可能还没回)

5) 快速练习(请用现在完成时写出英文句子)
- 你到过日本吗? → Have you ever been to Japan?
- 他从两年前一直住在这里。 → He has lived here for two years.(如果现在不再住这里,用过去时:lived here for two years and moved away)
- 我刚吃完晚饭。 → I have just eaten dinner.
- 我们这一周看过三部电影。 → We have seen three movies this week.

如果你愿意,我可以给你一组练习题和答案,或者根据你的水平给出更多例句练习。需要的话告诉我你的母语、希望重点练习的场景(如旅行、工作、考试等)。

偏专业化的问答时,非常适合这种角色设定模式

约束条件

这个可太常见了,例如让代码生成一段 草帽lufei 的自我介绍,让它限制字数,例如100字以内

python 复制代码
response = client.chat.completions.create(
    model="gpt-5-nano",
    messages=[
        {"role": "user", "content": "请给'草帽lufei'这个公众号博主写一段100字的介绍,他近期专注研究AI Agent相关应用和开发内容。"},
    ]
)

print(response.choices[0].message.content)

日常生活中,提供资料让AI写总结,输出格式为Word,或者代码输出为JSON,或者使用其他语言实现等都是约束条件

小结

提示词工程师充分发挥AI大模型能力的关键,通过精心设计的提示词可以让模型更好的理解我们的需求,并生成符合需求的内容

像一些图片,视频的生成就需要更专业的提示词去调教,才能出一些更符合需求的作品,因为强专业性的门槛,也出现了专门卖提示词的一些平台

总之,提示词工程既然是一个工程,就是一个长期学习测试总结的一个过程,只有不断尝试,才能很好的掌握相关的技巧

欢迎留言交流,如果觉得有帮助,可以点个赞支持一下

公众号:草帽lufei

相关推荐
米小虾2 小时前
AI Agent 安全实战指南:当智能体开始"不听话",开发者该如何应对?
人工智能·安全·agent
Databend6 小时前
2KB histogram 背后:Databend 如何低成本追踪长尾延迟
大数据·数据分析·agent
笃行3506 小时前
用 CodeBuddy “复活“《山海经》:异兽图鉴网站的诞生
agent
AlbertZein7 小时前
Agent任务实测:谁能稳定跑完,谁只是看起来很强?
aigc·openai·ai编程
镜舟科技7 小时前
Databricks 再提 LTAP,AI 时代的数据底座为何重回大一统叙事?
数据库·架构·agent
轻口味7 小时前
别被模型宣传骗了,真实 Agent 任务一跑就知道
agent·ai编程
AlbertZein8 小时前
别被模型宣传骗了,真实 Agent 任务一跑就知道
aigc·openai·ai编程
小星AI8 小时前
Kimi Code CLI 超详细教程,附源码
人工智能·agent
Databend8 小时前
从湖仓升级为 Agent 时代的数据控制面,Snowflake 和 Databricks 有哪些布局
大数据·数据库·agent