【零基礎學AI】第37講:提示詞工程(Prompt Engineering)

在這里插入圖片描述

本節課你將學到

  • 理解提示詞工程的核心原理
  • 掌握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 服務革命當用戶在暴雨天打開外賣…