【第二周】RAG与Agent实战:01提示词工程(Prompt Engineering)核心思想详解

🎯 什么是提示词工程?

提示词工程是指通过精心设计和优化输入给大模型的文本指令(Prompt),以激发模型的最佳性能,使其能够准确、可靠地完成特定任务。

💡 核心理念:不要试图重新训练模型,而是学会如何"沟通"------用模型能理解的方式告诉它你想做什么。


🚀 Zero-shot 思想:零样本学习

定义

Zero-shot Learning(零样本学习) 是指在模型训练阶段从未见过某个特定类别或任务的情况下,仅凭语言描述就能让模型完成该任务的能力。

核心特点

  • 无需示例:不提供任何具体例子
  • 依赖预训练知识:完全依靠模型已有的世界知识和推理能力
  • 语言定义任务:通过自然语言清晰描述任务要求、目标和约束

工作原理图示

实际应用场景

1. 情感分析
python 复制代码
prompt = """
请判断以下用户评论的情感倾向,只输出"正面"或"负面":
"这款代餐鸡胸肉饱腹感很强,吃起来也不柴,很推荐!"
"""
2. 文本分类
python 复制代码
prompt = """
请将以下新闻归类到合适的类别中(科技/体育/娱乐/财经):
"特斯拉发布新款自动驾驶系统,支持城市道路自动导航"
"""
3. 简单问答
python 复制代码
prompt = """
回答下列问题:
Q: 中国的首都是哪里?
A: 
"""

Python 实现示例

python 复制代码
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

def zero_shot_sentiment_analysis(text):
    prompt = f"""
    请判断以下用户评论的情感倾向,只输出"正面"或"负面":
    "{text}"
    """
    
    response = client.chat.completions.create(
        model="qwen-plus",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.0  # 降低随机性,使输出更稳定
    )
    
    return response.choices[0].message.content.strip()

# 测试
review = "这款代餐鸡胸肉饱腹感很强,吃起来也不柴,很推荐!"
result = zero_shot_sentiment_analysis(review)
print(f"情感分析结果:{result}")  # 输出:正面

Few-shot 思想:少样本学习

定义

Few-shot Learning(少样本学习) 是指通过提供少量示例(通常1-5个),让模型快速学习并模仿示例的模式来完成新任务的方法。

核心特点

  • 提供示例:给出几个输入-输出对作为参考
  • 模式匹配:模型通过观察示例学习任务的格式、风格和逻辑
  • 提升精度:特别适用于需要严格格式或复杂逻辑的任务

工作原理图示

实际应用场景

1. 结构化数据抽取
python 复制代码
prompt = """
请抽取产品名称和核心卖点2个字段,格式为Json,我提供2个示例:

示例1: MacBookPro高效节能,性能强大,适合牛马工作使用
输出: {"产品名称": "MacBookPro", "产品卖点": "高效节能,性能强大"}

示例2: 联想笔记本拥有RTX4060独立显卡,畅玩游戏,丝滑流畅
输出: {"产品名称": "联想笔记本", "产品卖点": "畅玩游戏,丝滑流畅"}

请处理: 华为MatepadPro,高清大屏,长效续航,你的好帮手。
"""
2. 风格迁移
python 复制代码
prompt = """
将以下句子改写成莎士比亚风格:

示例1: 我爱你 -> 吾心之所向,唯汝一人耳
示例2: 今天天气很好 -> 今日天朗气清,惠风和畅

请改写:我想吃火锅
"""
3. 复杂推理
python 复制代码
prompt = """
解答下列数学题:

示例1: 如果3个苹果重600克,那么5个苹果重多少克?
解:每个苹果重600÷3=200克,5个苹果重200×5=1000克
答:1000克

示例2: 一辆车每小时行驶80公里,3.5小时行驶多少公里?
解:距离=速度×时间=80×3.5=280公里
答:280公里

请解答:一个水池有进水管和出水管,单独开进水管6小时可注满,单独开出水管9小时可排空。两管同时打开,几小时可注满?
"""

Python 实现示例

python 复制代码
import json
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1"
)

def few_shot_product_extraction(product_description):
    prompt = f"""
    请抽取产品名称和核心卖点2个字段,格式为Json,我提供2个示例:

    示例1: MacBookPro高效节能,性能强大,适合牛马工作使用
    输出: {{"产品名称": "MacBookPro", "产品卖点": "高效节能,性能强大"}}

    示例2: 联想笔记本拥有RTX4060独立显卡,畅玩游戏,丝滑流畅
    输出: {{"产品名称": "联想笔记本", "产品卖点": "畅玩游戏,丝滑流畅"}}

    请处理: {product_description}
    """
    
    response = client.chat.completions.create(
        model="qwen-plus",
        messages=[{"role": "user", "content": prompt}],
        temperature=0.1  # 稍微增加一点创造性,但保持稳定性
    )
    
    result_text = response.choices[0].message.content.strip()
    
    # 清理可能的Markdown标记
    if result_text.startswith("```json"):
        result_text = result_text[7:-3]
    elif result_text.startswith("```"):
        result_text = result_text[3:-3]
    
    try:
        return json.loads(result_text)
    except json.JSONDecodeError:
        return {"error": "解析失败", "raw_output": result_text}

# 测试
description = "华为MatepadPro,高清大屏,长效续航,你的好帮手。"
result = few_shot_product_extraction(description)
print(f"抽取结果:{json.dumps(result, ensure_ascii=False, indent=2)}")

⚖️ Zero-shot vs Few-shot 对比选择

特性 Zero-shot Few-shot
所需示例 1-5个
适用场景 简单任务、通用知识 复杂格式、特殊领域、高精度要求
开发成本 中(需准备示例)
效果稳定性 较不稳定 更稳定可控
Token消耗 较少 较多(包含示例)

选择建议:

  • 优先尝试 Zero-shot:对于简单任务,先用零样本测试,往往能达到不错效果
  • 遇到格式问题时用 Few-shot:当需要严格JSON、XML等格式时,少样本几乎必选
  • 领域专业知识不足时用 Few-shot:当模型缺乏特定领域知识时,示例能提供重要线索

🛠️ 高级技巧与实践建议

1. Chain-of-Thought (CoT) 思维链

对于复杂推理任务,可以要求模型展示思考过程:

python 复制代码
prompt = """
请逐步推理并解答:

问题:小明有5个苹果,他给了小红2个,又买了3个,现在有多少个?

解题步骤:
1. 初始数量:5个
2. 给出后剩余:5 - 2 = 3个
3. 购买后总数:3 + 3 = 6个
答案:6个

请用同样方式解答:
问题:一个班级有30名学生,其中男生占60%,女生有多少人?
"""

2. Role-playing 角色扮演

通过设定角色提升回答质量:

python 复制代码
messages = [
    {"role": "system", "content": "你是一位资深Python架构师,擅长编写高性能、可维护的代码。"},
    {"role": "user", "content": "请帮我优化这段数据库查询代码..."}
]

3. Output Formatting 输出格式化

明确指定输出格式减少后期处理:

python 复制代码
prompt = """
请按以下JSON格式返回结果:
{
    "summary": "简短摘要",
    "keywords": ["关键词1", "关键词2"],
    "sentiment": "positive/negative/neutral"
}

文章内容:...
"""

🚀 总结

提示词工程是大模型应用开发的基石技能:

Zero-shot :用语言定义任务,解放模型预训练知识

Few-shot :用示例定义任务,提升回答对齐精度

灵活组合 :根据任务复杂度选择合适的策略

持续迭代:通过实验不断优化提示词设计

🌟 记住:最好的提示词工程师不是写得最多的人,而是最懂得如何与模型"对话"的人!

相关推荐
翱翔的苍鹰3 小时前
LangChain是一个主流的大语言模型(LLM)应用开发框架,核心功能是连接大模型与外部资源/工具。
网络·人工智能·python·深度学习·语言模型
TracyCoder1233 小时前
Prompt Engineer 使用、设计、优化
prompt
智算菩萨3 小时前
ChatGPT等AI工具辅助学术论文写作全流程:从选题、润色到降重的实战指南
论文阅读·gpt·ai·语言模型·ai写作
DamianGao4 小时前
我用 OpenClaw 做了一个 AI 新闻早报,每天自动推送
人工智能·python·语言模型
为你奋斗!5 小时前
Playwright 录屏功能启用离线安装依赖pywin32 pillow
开发语言·chrome·python·语言模型·迁移学习
猫头虎5 小时前
如何解决openclaw安装skills报错command not foud:clawhub问题怎么解决?
langchain·开源·prompt·github·aigc·ai编程·内容运营
xier_ran6 小时前
【第二周】 RAG与Agent实战05:提示词优化案例_金融文本分析
大数据·人工智能·语言模型·金融
xier_ran6 小时前
【第二周】RAG与Agent实战07:提示词优化案例_金融信息抽取
自然语言处理·prompt·agent·rag
-大头.6 小时前
从Prompt到MCP:AI应用开发核心概念完全指南
人工智能·prompt