在这里插入图片描述

本节课你将学到

  • 理解提示词工程的核心原理
  • 掌握5种实用的Prompt设计模式
  • 学会优化提示词的评估方法
  • 实现一个智能问答系统优化案例

开始之前

环境要求

  • Python 3.8+
  • 安装包:pip install openai tiktoken
  • OpenAI API密钥(免费注册:https://platform.openai.com)

前置知识

  • GPT模型基础(第36讲内容)
  • 基本的API调用概念

核心概念

什么是提示词工程?

提示词工程就像与AI沟通的"魔法语言":

  • 传统编程:写精确的代码指令
  • Prompt工程:用自然语言"引导"AI产生预期输出

Prompt设计的三层结构

1. **角色设定**(30%效果)"你是一位资深机器学习工程师"2. **任务描述**(50%效果)"用通俗易懂的方式解释Transformer架构"3. **输出规范**(20%效果)"分三点说明,每点不超过2句话,使用类比手法"

五大核心技巧(附案例对比)

技巧1:角色设定
# ❌ 普通提示
"解释机器学习"# ✅ 角色设定提示
"""你是一位有10年经验的AI教授,正在给大一新生上课。
用最通俗易懂的方式解释机器学习,要求:
1. 使用生活类比
2. 不超过3句话
3. 最后提一个思考问题"""
技巧2:分步思考
# ❌ 直接提问
"巴黎是浪漫之都吗?"# ✅ 分步推理
"""请按以下步骤分析:
1. 定义'浪漫之都'的标准
2. 列举巴黎符合标准的证据
3. 给出最终结论"""
技巧3:示例示范
# ❌ 单纯指令
"生成产品描述"# ✅ 示例引导
"""按以下格式生成耳机产品描述:
示例1:[产品] 采用[技术],带来[ benefit ]
示例2:...
现在为'无线降噪耳机'生成3个版本"""
技巧4:负面约束
# ❌ 开放生成
"写一篇科技文章"# ✅ 负面约束
"""写一篇关于AI的科普文章,要求:
- 不要使用专业术语
- 不超过300字
- 避免讨论伦理问题"""
技巧5:格式控制
# ❌ 自由输出
"总结这篇文章"# ✅ 格式限定
"""用以下结构总结:
【核心观点】...
【关键数据】3条
【行动建议】..."""

代码实战

1. 基础API调用

import openai
import tiktoken# 配置API密钥
openai.api_key = "你的API密钥"def count_tokens(text):"""计算文本的token数量"""encoder = tiktoken.get_encoding("cl100k_base")return len(encoder.encode(text))def ask_gpt(prompt, model="gpt-3.5-turbo"):"""发送Prompt到OpenAI API"""response = openai.ChatCompletion.create(model=model,messages=[{"role": "user", "content": prompt}],temperature=0.7,max_tokens=500)return response.choices[0].message.content# 测试调用
prompt = "用一句话解释量子计算"
print(ask_gpt(prompt))

2. Prompt优化评估器

def evaluate_prompt(prompt, test_cases):"""评估Prompt效果的量化工具返回平均得分(1-5分)和改进建议"""total_score = 0feedback = []for case in test_cases:response = ask_gpt(prompt + "\n" + case["question"])score = min(5, case["expected"].lower().count(response.lower()))total_score += scorefeedback.append(f"Q: {case['question']}\nA: {response}\nScore: {score}/5")avg_score = total_score / len(test_cases)analysis = f"""评估结果:
平均分:{avg_score:.2f}/5
建议改进方向:
1. {'增加角色设定' if avg_score <3 else '✓'}
2. {'添加示例' if '示例' not in prompt else '✓'}
3. {'明确输出格式' if '格式' not in prompt else '✓'}"""return avg_score, analysis, "\n\n".join(feedback)# 测试案例
test_cases = [{"question": "解释神经网络", "expected": "神经网络就像人脑神经元网络..."},{"question": "Python的lambda是什么","expected": "lambda是匿名函数..."}
]# 评估示例Prompt
sample_prompt = "请回答以下技术问题"
score, analysis, details = evaluate_prompt(sample_prompt, test_cases)
print(f"评估报告:\n{analysis}\n\n详细反馈:\n{details}")

3. 智能问答系统优化

class QASystem:def __init__(self, knowledge_base):self.knowledge = knowledge_baseself.prompt_template = """基于以下知识库回答问题:
{knowledge}
---
问题:{question}
要求:
1. 如果答案在知识库中,直接引用
2. 否则标注"推测答案"
3. 用中文回答
4. 不超过100字"""def answer(self, question):prompt = self.prompt_template.format(knowledge=self.knowledge,question=question)return ask_gpt(prompt)# 初始化知识库
ai_knowledge = """
1. 机器学习分为监督学习、无监督学习、强化学习
2. GPT-3有1750亿参数
3. 过拟合是指模型在训练集表现太好但泛化能力差
"""qa = QASystem(ai_knowledge)# 测试问答
questions = ["什么是过拟合?","GPT-4有多少参数?"  # 知识库中没有的问题
]for q in questions:print(f"Q: {q}\nA: {qa.answer(q)}\n")

完整项目

项目结构

lesson_37_prompt/
├── prompt_engineer.py    # 主程序
├── evaluator.py         # 评估工具
├── qa_system.py         # 问答系统
├── requirements.txt
└── README.md

requirements.txt

openai==0.27.8
tiktoken==0.4.0
python-dotenv==1.0.0  # 用于管理API密钥

prompt_engineer.py 完整代码

import openai
import tiktoken
from dotenv import load_dotenv
import osload_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")class PromptOptimizer:def __init__(self):self.encoder = tiktoken.get_encoding("cl100k_base")def analyze_prompt(self, prompt):"""深度分析Prompt问题"""analysis_prompt = f"""请分析以下Prompt的问题:
{prompt}
---
按以下格式反馈:
1. 清晰度评分(1-5分):
2. 主要问题:
3. 改进建议:"""return openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "user", "content": analysis_prompt}],temperature=0).choices[0].message.contentdef optimize_prompt(self, prompt, iterations=3):"""迭代优化Prompt"""current_prompt = promptfor i in range(iterations):print(f"\n优化迭代 {i+1}/{iterations}")analysis = self.analyze_prompt(current_prompt)print(f"分析结果:\n{analysis}")optimization_prompt = f"""根据以下分析优化Prompt:
分析:
{analysis}
原Prompt:
{current_prompt}
---
请输出:
1. 优化后的Prompt
2. 优化说明"""result = openai.ChatCompletion.create(model="gpt-4",messages=[{"role": "user", "content": optimization_prompt}],temperature=0.7).choices[0].message.contentcurrent_prompt = result.split("\n")[1]  # 提取优化后的Promptprint(f"优化版本:\n{current_prompt}")return current_promptif __name__ == "__main__":optimizer = PromptOptimizer()sample_prompt = "帮我写一篇关于AI的文章"print("原始Prompt:", sample_prompt)optimized = optimizer.optimize_prompt(sample_prompt)print("\n最终优化结果:")print(optimized)

运行效果

优化过程示例

原始Prompt: 帮我写一篇关于AI的文章优化迭代 1/3
分析结果:
1. 清晰度评分(1-5分):2分
2. 主要问题:主题过于宽泛,缺乏具体方向和要求
3. 改进建议:明确文章类型、目标读者、长度和核心要点优化版本:
请写一篇面向科技爱好者的800字科普文章,介绍AI在医疗领域的三大应用,要求:
1. 每部分配示意图描述
2. 包含实际案例
3. 使用通俗语言

问答系统输出

Q: 什么是过拟合?
A: 过拟合是指模型在训练集表现太好但泛化能力差的现象。Q: GPT-4有多少参数?
A: (推测答案)GPT-4的具体参数规模未公开,但预计比GPT-3的1750亿更多。

常见问题

Q1: 如何减少API调用费用?

  • 使用max_tokens限制响应长度
  • 对相似问题做本地缓存
  • 先用小模型(gpt-3.5-turbo)测试Prompt

Q2: 为什么有时响应不符合要求?

  • 检查temperature值是否过高(建议0.3-0.7)
  • 确认Prompt中是否有明确的约束条件
  • 尝试用更高级模型(gpt-4)

Q3: 如何处理超长上下文?

  • tiktoken计算token数
  • 关键信息放在Prompt开头
  • 对长文档采用"分块处理+摘要"策略

课后练习

  • 为你的专业领域设计3个角色Prompt模板
  • 用评估器测试"解释区块链"的5种不同Prompt
  • 扩展问答系统:添加追问功能

扩展阅读

  • OpenAI官方Prompt指南
  • Prompt Engineering课程
  • AI提示词大全

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914269.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914269.shtml
英文地址,请注明出处:http://en.pswp.cn/news/914269.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

莫兰迪色系工作总结汇报PPT模版分享

莫兰迪色工作总结PPT模版&#xff0c;莫兰迪调色板PPT模版&#xff0c;莫兰迪色系高级简约PPT模版&#xff0c;莫兰迪色系工作汇报&#xff0c;莫兰迪总结汇报模版 莫兰迪色系工作总结汇报PPT模版分享&#xff1a;https://pan.quark.cn/s/35bcaa03c837

uniapp的app项目,某个页面长时间无操作,返回首页

最开始想做成一个公共的&#xff0c;完全提取出来的一个组件&#xff0c;组件设置背景透明&#xff0c;到时候哪个页面需要&#xff0c;直接引入组件就可以了&#xff0c;所以最开始做的是一个vue的组件&#xff0c;在组件中&#xff0c;监听页面的touchstart&#xff0c;但是这…

【实证分析】上市公司绿色战略数据集(2000-2023年)

数据简介&#xff1a;绿色战略是指企业根据其所处的外部环境&#xff08;包括“绿色浪潮”等环保趋势&#xff09;和企业自身的经营条件&#xff0c;为实现企业生存与发展质量的持续提升&#xff0c;而对企业生产经营活动进行绿色化改造的总体规划。这包括制定企业绿色可持续发…

【SpringAI】7. 基于 milvus 的向量检索

SpringAI 基于 milvus 的向量检索 向量数据库可以使用 milvus&#xff0c;redis,Elasticsearch 等&#xff0c;本文以 milvus 为例&#xff1a; 1. 启动milvus 为了尽可能快速上手springai的vectordb功能&#xff0c;我们推荐使用云上的milvus&#xff0c;注册就能创建免费的…

如何使用数字化动态水印对教育视频进行加密?

文章目录前言一、什么是数字化动态水印二、使用数字化动态水印对教育视频加密的好处&#xff1f;三、数字化动态水印的实现原理四、如何实现数字化动态水印对教育视频加密总结前言 教育资源数字化蓬勃发展的今天&#xff0c;优质视频课程已成为机构的核心知识资产。然而&#…

解决bash终端的路径名称乱码问题

解决bash终端的路径名称乱码 默认打开了zsh&#xff0c;当我输入bash后&#xff0c;就出现了乱码 (context_rag) [23fanyaohead1]~/mycode-thesis% bash (context_rag) [%n%m]%~%#乱码原因排查 我遇到了终端乱码问题&#xff0c;需要检查当前的终端环境和编码设置&#xff0c;下…

【深度学习】【入门】Sequential的使用和简单神经网络搭建

1.Sequential的概念它是一种按顺序封装神经网络层的容器&#xff0c;能让层按照添加顺序依次执行计算&#xff0c;简化网络搭建流程2.Sequential的作用1.代码简洁化对比不用 Sequential 时手动搭建层的繁琐代码&#xff08;如每层需手动定义并连接&#xff09;&#xff0c;展示…

前端开发中的资源缓存详解

资源缓存用于缓存静态资源,良好的缓存策略可以减少资源重复加载进而提高网页的整体加载速度。 通常浏览器缓存策略分为两种:强缓存和协商缓存,当然还包括 service worker。 浏览器在资源加载时,根据请求头中的 expires 和 cache-control 值来判断是否命中强缓存,命中则直…

零基础入门指南:华为数通认证体系详解

一、华为数通认证的定位与行业价值华为数通认证&#xff08;Datacom&#xff09;是ICT领域核心方向&#xff0c;覆盖路由器、交换机等网络基础设备技术&#xff0c;被誉为“网络行业的骨骼”。2020年升级为Datacom认证体系&#xff0c;新增SDN、VXLAN、网络自动化等前沿技术&am…

超低功耗CC2340R SimpleLink™ 系列 2.4GHz 无线 MCU支持BLE5.3/Zigbee/Thread/专有协议

CC2340R SimpleLink™ 系列 2.4GHz 无线 MCU支持BLE5.3/Zigbee/Thread/专有协议优势简介性能介绍应用场景优势简介 CC2340R SimpleLink™ 系列器件为 2.4GHz 无线微控制器 (MCU)&#xff0c;面向低功耗 Bluetooth5.3、Zigbee、Thread 和专有 2.4GHz 应用。这些器件针对低功耗无…

若依前后端分离Vue3版本接入阿里云OSS

一、引入依赖首先在commom 模块的pom 下面引入 阿里云OSS 的 依赖<!-- 阿里云oss --><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.17.4</version></depende…

2025年微软mos备考攻略-穷鬼版

说实话&#xff0c;微软MOS认证是微软官芳推出的办公软件方面的认证&#xff0c;考试难度真的不大&#xff0c;完全没必要报班&#xff0c;自学完全OK&#xff01;一、25 年报考MOS认证详情报名时间&#xff1a;随时可以在官网或ji构报名&#xff08;ji构报名会送备考资料&…

数据库版本自动管理

FlywayDB 是一款 开源数据库版本管理工具&#xff0c;开发中将表结构的变更或数据初始化脚本维护好&#xff0c;更新到测试环境或线上发版启动服务的时候&#xff0c;会检测版本号自动执行数据库变更&#xff0c;可以减少每次发版到其他环境的人工执行操作。 工作流程初始化阶段…

解决Linux绑定失败地址已使用(端口被占用)的问题

文章目录解决 bind failed: Address already in use 问题一、问题原因1. **端口已经被其他程序占用**2. **端口处于 TIME_WAIT 状态**3. **未正确关闭套接字**二、如何排查和解决问题1. **确认端口是否被占用**2. **查找并杀掉占用端口的进程**3. **等待端口释放&#xff08;TI…

Ragas的Prompt Object

Prompt在Ragas中被用在各种指标、合成数据生成任务中。同时也为提供了替换各种自动以提示词的方式。Ragas提供了如下几种Prompt Objects。 instruction:prompt的基础组成,通过自然语言清晰的描述LLM需要完成的任务。在prompt object中用instruction变量定义。few-shot exampl…

PHP语法高级篇(一):日期时间处理和包含文件

从本篇文章开始&#xff0c;将学习PHP的高级特性内容。本篇文章将记录在PHP中如何进行日期时间处理和包含文件的学习过程。 一、日期和时间 在PHP中&#xff0c;date() 函数用于格式化日期或时间。 说明 date(string $format, ?int $timestamp null): string 使用指定整数…

请求服务端获取broker的机房归属信息异常

该错误表明服务在尝试获取 broker 的 ​机房归属信息​ 时遇到异常。以下是详细分析和解决方案建议&#xff1a;​问题定位与常见原因​​网络问题​客户端无法连接存储机房信息的元数据服务​&#xff08;如配置中心、注册中心&#xff09;。防火墙或安全组阻断了相关端口&…

Android 中的多线程编程全面解析

Android 中的多线程编程全面解析 一、Android 线程模型基础 主线程&#xff08;UI 线程&#xff09;特性 唯一性&#xff1a;每个应用只有一个主线程职责&#xff1a;处理 UI 操作和用户交互限制&#xff1a;禁止在主线程执行耗时操作&#xff08;超过5秒会导致 ANR&#xff09…

golang -gorm 增删改查操作,事务操作

增删改查 1. 插入数据// api func SaveUser(ctx *gin.Context) {result : &common.Result{}user : &dao.User{}err : ctx.ShouldBindJSON(&user)if err ! nil {ctx.JSON(http.StatusOK, result.Fail(400, "请使用json数据格式传值"))return}// 调用验证函…

大数据时代UI前端的智能化服务升级:基于用户情境的主动服务设计

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言&#xff1a;从 “被动响应” 到 “主动预判” 的 UI 服务革命当用户在暴雨天打开外卖…