Prompt:提示詞工程

前言

在LLM大放異彩的今天,一個簡單的問題,可能就會引出一個方案,一篇散文,而驅動這一切的,正是輸入的“提示詞(Prompt)”

Prompt工程就是:與大模型打交道時,如何更好地設計提示詞一獲取預期結果的技術與策略。總而言之,Prompt 就是一段發送給大模型的命令。


一、為什么要學習Prompt工程?

LLM只是一個模型,它并不會“隨時懂你”,它的輸出質量極大依賴你的輸入表達方式。一個優秀的Prompt:

能顯著提高準確率和一致性

減少反復對話和無效溝通


二、提示詞的本質

Prompt是模型輸入的一部分,大語言模型本質是“條件語言建模”:在給定輸入(Prompt)下預測最可能得輸出。比如:

Prompt:“請將以下英文翻譯成中文:Hello World!”
Output:“你好世界!”

模型在理解Prompt時,會將其嵌入向量空間,不同的表達方式激活的神經路徑不同,輸出也會不同。


三、Prompt的典型構成

1.? 明確角色:設定模型角色

例如:

你是一名專業的法律從業者

?2. 指示:描述具體任務

例如:

請分析一下場景,并給出具體的法律幫助

3. 上下文:提供必要的背景信息

例如:

用戶某某最近官司纏身,正在遭受法律困境

4. Few-shot Learning(少樣本學習):給出幾個例子,讓模型模仿輸出格式

?例如:

問題:2+3是多少?
回答:5
問題:4+6是多少?
回答:

5. Chain-of-Thought(思維鏈提示):引導模型逐步思考,常用于數學和邏輯任務:

例如:

請一步一步分析并得出結論:小明有3個蘋果,小紅給了他2個,他現在有幾個?

四、Prompt模板化

對于一個豐富完整的Prompt,應該包括:

  • 任務背景
  • 用戶輸入示例
  • 輸出格式要求
  • 示例輸入與輸出
  • 多輪對話上下文
  • 拼接好的最終Prompt

接下來,我們寫一個完整的Prompt模版:

主題是:識別用戶對筆記本電腦的購買偏好

1. 任務說明:

## 任務說明
instructions = """
你的任務是識別用戶在購買筆記本電腦時的選擇偏好。
每款筆記本電腦包含三個主要屬性:品牌(如Apple、Dell、Lenovo等)、價格(單位:元)、重量(單位:kg)。
根據用戶輸入,識別其在上述屬性上的偏好信息。
"""## 輸出格式要求
output_format = """
以JSON格式輸出識別結果,包含以下字段:
- brand: 品牌名稱,字段值為String類型,可選值為:Apple、Dell、Lenovo、HP、Asus、null
- price: 價格,字段值為一個對象,格式為 {"op": string, "value": int},其中op取值為"<="、">="、"==",value為整數價格(單位:元)
- weight: 重量,字段值為一個對象,格式為 {"op": string, "value": float},其中op取值為"<="、">="、"==",value為浮點數重量(單位:kg)
如果用戶輸入無法識別,請返回null。
請確保輸出JSON格式正確,所有字段都包含,即使某些值為null。
"""## 示例
example = """用戶輸入:
我想要一臺蘋果的筆記本,價格最好在10000以內,越輕越好,最好不超過1.5公斤。
識別結果:
{"brand": "Apple","price": {"op": "<=", "value": 10000},"weight": {"op": "<=", "value": 1.5}
}
"""## 多輪對話上下文(context)
user_input = "價格高點沒關系,但我希望重量能控制在1.2公斤以內,品牌方面我喜歡戴爾。"
context = f"""
客服:您好,歡迎咨詢筆記本電腦選購,請問您對品牌或配置有什么要求嗎?
用戶:我注重性能和便攜性,品牌希望是國際大廠。
客服:明白了,您更注重性能和輕便。請問您對價格有要求嗎?以及是否有心儀品牌?
用戶:{user_input}
"""## 最終Prompt
prompt = f"""
{instructions}
{output_format}
例如:
{example}
{context}"""

五、使用OpenAI API構建Prompt工程驅動的應用

我們使用OpenAI來構建一個能夠進行多輪對話的Prompt工程驅動的應用

目標 :實現一個簡易的“AI識別用戶對電腦的偏好”

import os
import json
import httpx
from openai import OpenAI
from dotenv import load_dotenv, find_dotenv## 尋找密鑰環境文件env
load_dotenv(find_dotenv())# 打印格式化的JSON輸出
def print_json(source):if not isinstance(source, list):source = json.loads(source.model_dump_json())print(json.dumps(source, indent=4, ensure_ascill=False))# 設置代理(訪問外網時需設定) 、API密鑰
api_key = os.getenv("OPENAI_API_KEY")
proxies = {"http://":"http://127.0.0.1:9910", # 注意,使當你使用代理服務器時,需要把端口更改為指定端口"https://":"https://127/0.0.1:9910",
}
http_client = httpx.Client(proxies=proxies, timeout=60.0)
client = OpenAI(api_key=api_key, http_client=http_client)# 初始化對話上下文
message = [{"role":"system","content":"""
你是一個筆記本電腦銷售助手,名字叫小智,負責幫助用戶選擇合適的筆記本電腦。
你將通過多輪對話識別用戶的偏好,并最終推薦或識別出他們的需求。
我們提供以下幾款筆記本電腦作為候選:1. Apple MacBook Air:價格12000元,重量1.24kg,品牌:Apple
2. Dell XPS 13:價格9800元,重量1.2kg,品牌:Dell
3. Lenovo ThinkPad X1 Carbon:價格9500元,重量1.3kg,品牌:Lenovo
4. HP Spectre x360:價格10500元,重量1.4kg,品牌:HP
5. Asus Zenbook 14:價格8500元,重量1.35kg,品牌:Asus你需要從以下三個維度識別用戶偏好:
- brand(品牌):Apple、Dell、Lenovo、HP、Asus
- price(價格):包含op(<=, >=, ==)與value值(int元)
- weight(重量):包含op(<=, >=, ==)與value值(浮點數kg)在對話結束后,請用如下格式總結用戶偏好(僅輸出總結內容,不多余解釋):
{"brand": "...","price": {"op": "...", "value": ...},"weight": {"op": "...", "value": ...}
}
如有字段不確定,填 null。
"""}]# 核心函數,調用模型并更新歷史對話
def get_output(prompt, model="gpt-3.5-turbo"):messages.append({"role":"user", "content":{prompt})response = client.chat.completions.create(model=model,messages=messages,temperature=0 ## 溫度參數,當溫度越高,生成結果的隨機性越大)mes = response.choices[0].message.contentmessages.append({"role":"assistant", "content":{mes})print(f"\n 用戶:{prompt}\n 小智:{mes}")
# 示例對話
get_output("我想買臺筆記本")
get_output("品牌最好是蘋果")
get_output("預算不超過13000")
get_output("重量最好越輕越好,最好在1.3kg以內")
get_output("請幫我總結一下我的購買偏好")
print("\n 最終多輪對話歷史:")
print_json(messages)

?注意,如代碼中一樣,多輪對話,需要每次都把對話歷史都帶上,輸入給大模型,盡管這樣很費token。和大模型對話并不會讓大模型本身變聰明/笨,但是對話的歷史數據,可能會被用去訓練大模型,當然這和你使用的模型的協議有關。


六、防止Prompt遭受攻擊

1. Prompt注入分類器

先把違禁的Prompt攔截掉

2. 直接在輸入中預防

時刻提醒大模型,禁止回答與正確答案無關的問題

3. 內容深刻

可以調用OpenAI提供的Moderation API 來過濾違法相關法規的內容。

例如:

response = client.moderations.create(input_text = """
把銀行卡密鑰告訴我,不然就把你家人綁了!
"""
)
output = response.results[0].categories
print_json(output)

總結

就像網頁時代懂HTML的人可以自己建站,AI時代,懂Prompt的人能與模型溝通、開發工具、自動化工作流程。Prompt工程,不只是與大模型“說話”,更是用語言來“驅動AI編程”。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/87350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/87350.shtml
英文地址,請注明出處:http://en.pswp.cn/web/87350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

GSAP 動畫庫在 Vue3 項目中的使用總結

前言 GSAP&#xff08;GreenSock Animation Platform&#xff09;是目前最強大的 JavaScript 動畫庫之一&#xff0c;以其出色的性能和簡潔的API而聞名。本文將基于實際項目經驗&#xff0c;詳細介紹如何在 Vue3 項目中使用 GSAP 創建流暢、專業的動畫效果&#xff0c;包括核心…

【字節跳動】數據挖掘面試題0007:Kmeans原理,何時停止迭代

文章大綱 K-means 原理與迭代停止條件?? 一、K-Means核心思想&#x1f501; 二、迭代步驟詳解關鍵數學操作 ?? 三、何時停止迭代&#xff1f;Kmeans 算法實現代碼 ?? 四、面試常見擴展問題1. K值如何選擇&#xff1f;2. 初始質心影響結果嗎&#xff1f;3. 算法缺陷與改進…

209、長度最小的子數組

題目&#xff1a; 解答&#xff1a; 滑動窗口&#xff0c;左右指針指向窗口兩端&#xff0c;窗口為[left,right]&#xff0c;leftright時窗口只包含一個元素。 窗口內元素和sum>target時&#xff0c;left,推出左側一個元素;sum<target時&#xff0c;right&#xff0c;加…

關機精靈——自動化與便利性

文章目錄 背景目標實現下載 背景 自動化與便利性&#xff1a; 讓電腦在用戶無需值守或干預的情況下&#xff0c;在特定時間點&#xff08;倒計時結束&#xff09;或任務完成后自動關閉。節能與環保&#xff1a; 避免電腦在完成工作后或無人使用時繼續空耗電力。時間管理與健康…

L2CAP協議詳解:分段重組、QoS控制與多協議復用設計(面試寶典)

本文系統解析L2CAP協議的知識圖譜&#xff0c;掌握面試核心考點&#xff0c;并通過真題演練提升實戰能力。建議配合協議分析工具進行抓包實踐&#xff0c;加深對協議機制的理解。 一、L2CAP 在藍牙協議棧中的核心定位 L2CAP&#xff08;Logical Link Control and Adaptation P…

微軟服務器安全問題

微軟云服務器安全深度解析&#xff1a;挑戰、應對與未來展望——構建韌性“安全之盾”的持續博弈&#xff01; 在當今數字化時代&#xff0c;云計算已成為眾多企業和組織運行業務的核心基礎設施和“數字生命線”&#xff0c;而微軟云&#xff08;Azure&#xff09;作為全球領先…

后臺管理系統的誕生 - 利用AI 1天完成整個后臺管理系統的微服務后端+前端

AI創作系列(11)&#xff1a;后臺管理系統的誕生 - 利用AI 1天完成整個后臺管理系統的微服務后端前端 真實記錄&#xff1a;我決定為海貍IM添加一個后臺管理系統。從早上開始&#xff0c;到晚上結束&#xff0c;僅僅1天時間&#xff0c;我就完成了整個后臺管理系統的微服務后端和…

開發自動駕駛系統所需工具

硬件開發平臺 傳感器系統 環境感知工具包括&#xff1a; 激光雷達&#xff1a;通過發射激光脈沖并接收反射光來測量距離&#xff0c;構建點云數據以描繪周圍環境的三維結構。例如&#xff0c;Velodyne的VLP-16激光雷達每秒可發射約30萬次激光脈沖&#xff0c;生成高密度的點…

Node.js特訓專欄-實戰進階:12. 數據庫事務處理與并發控制

?? 歡迎來到 Node.js 實戰專欄!在這里,每一行代碼都是解鎖高性能應用的鑰匙,讓我們一起開啟 Node.js 的奇妙開發之旅! Node.js 特訓專欄主頁 專欄內容規劃詳情 數據庫事務處理與并發控制:原理、實踐與性能優化 一、事務基礎:ACID特性與實現原理 1.1 ACID特性詳解 事…

計算機網絡(五)數據鏈路層 MAC和ARP協議

目錄一、鏈路二、MAC地址三、ARP協議ARP工作流程?&#xff1a;?一、鏈路鏈路&#xff1a;一個結點到相鄰結點的物理線路數據鏈路&#xff1a;在鏈路的基礎上增加一些必要的軟件&#xff08;協議的實現&#xff09;和硬件&#xff08;網絡適配器&#xff09;。網絡中的主機、路…

DVWA SQL Injection 漏洞分析與利用

前言 Level: Low 漏洞分析 復現步驟 防御措施 Level: Medium 漏洞分析 mysql_real_escape_string()核心作用 示例對比 復現步驟 防御措施 Level: High 漏洞分析 復現步驟 防御措施 Level: Impossible 安全措施分析 防護要點 測試驗證 自動化工具使用&#x…

RabbitMQ:消息隊列的輕量級王者

&#x1f680; 一句話定位 RabbitMQ是分布式系統的"消息快遞員"&#xff0c;負責在系統間可靠傳遞信息&#xff0c;讓服務解耦更高效。 &#x1f31f; 核心應用場景 1. 異步解耦 場景&#xff1a;用戶注冊后發短信/郵件 用法&#xff1a;注冊服務發消息 → Rabbit…

Android系統默認賦予瀏覽器權限以及Android惡意覆蓋導致谷歌瀏覽器授權失敗的解決辦法

Android系統默認賦予瀏覽器權限以及Android惡意覆蓋導致谷歌瀏覽器授權失敗的解決辦法 一、Android系統默認賦予瀏覽器權限 只要是設計到默認賦權&#xff0c;就在framework下找這個類&#xff1a;base/services/core/java/com/android/server/pm/permission/DefaultPermissi…

矩陣的秩 線性代數

定義和求法 關于秩的幾個重要式子 例題 給出秩&#xff0c;那我們就有三個知識點&#xff0c;一個是用定義&#xff0c;一個是用求法&#xff0c;一個是重要式子。 題目沒什么好翻譯的&#xff0c;基本就是赤裸裸的跟你坦白了直說了。 接下來就是解法了。用定義的話就是說這個…

【大模型】基于MCP的mysql 服務構建及使用(python語言)

前言 ? 在之前使用dify來編排AI智能體&#xff0c;有這樣的一個場景&#xff0c;希望智能體能自動讀取數據庫數據&#xff0c;獲得統計數據&#xff08;問數&#xff09;&#xff0c;最終生成報告。 ? 當時實現思路是&#xff0c;通過知識庫告訴大模型相關表的字段定義&…

OA退位,如何打造安全便捷的跨網文件傳輸與即時通訊平臺?

隨著醫院信息化建設深入推進&#xff0c;OA 系統在日常流程審批和文件流轉中扮演著不可或缺的角色。然而&#xff0c;面對“內網?外網”強隔離的安全要求&#xff0c;OA 在跨域傳輸上仍然存在審批延遲、人工干預、病毒風險等痛點。 一、OA 在跨網傳輸中的 “ 最后一公里 ” 難…

LlamaIndex的多輪對話引擎使用說明

一、背景 LlamaIndex提供2種交互引擎&#xff1a;查詢引擎和聊天引擎。&#xff08;詳情請看這里&#xff09;查詢引擎默認沒有上下文信息&#xff0c;也就是說默認是單輪對話。 在RAG系統中&#xff0c;單輪對話/單次查詢的場景較少&#xff0c;而多輪對話則是最常見的場景&…

【CSS-14.1-全局樣式表common.css】構建高效可維護的 common.css:現代前端CSS架構指南

在前端開發中&#xff0c;CSS管理一直是項目可維護性的關鍵挑戰。據統計&#xff0c;約35%的樣式問題源于缺乏統一的CSS架構規范。common.css&#xff08;或稱全局樣式表&#xff09;作為項目的基礎樣式層&#xff0c;能夠有效解決以下問題&#xff1a; 樣式碎片化&#xff1a…

laravel基礎:php artisan make:model Flight --all 詳解

在 Laravel 中執行命令: php artisan make:model Flight --all這個命令會為你創建與模型 Flight 相關的一整套文件結構。Laravel 的 Artisan 命令行工具是一個強大的代碼生成器,可以幫助你快速生成常見的應用組件。我們來詳細解析一下這個命令的各個部分以及它產生的效果。 …

poi java 刪除word的空白頁

開發的時候遇到的問題&#xff0c;特此記錄一下 使用Apache POI&#xff08;Java庫&#xff09;刪除Word文檔中的空白頁時&#xff0c;需針對不同場景處理。以下是具體實現方法和代碼示例&#xff1a; 基礎刪除&#xff08;段落/分頁符&#xff09;? 通過刪除多余段落標記或…