提示詞Prompts(1)

摘要: 本文介紹了langchain.prompts中基礎的提示詞模板的用法,包括基礎的文本模板、對話模板、小樣本模板、以及主要兩種樣本選擇器的用法。

文章目錄

    • 1. prompts介紹?
    • 2. 提示詞模板體系 Prompt Templates
      • 2.1 基礎文本模板 PromptTemplate
      • 2.2 對話模板 ChatPromptTemplate
      • 2.3 小樣本提示模板Few-shot
      • 2.4 示例選擇器Example Selector
        • 2.4.1 按長度選擇 LengthBasedExampleSelector
        • 2.4.2 按相似度選擇 LengthBasedExampleSelector

1. prompts介紹?

  • 提示詞:就是輸入給LLM的內容。包括我們和LLM對話的內容,

  • LangChain的Prompts模塊是構建對話系統的核心組件,它通過結構化模板實現精準的提示工程管理。該模塊將自然語言指令轉化為大模型可解析的標準化輸入,顯著提升AI交互質量。

2. 提示詞模板體系 Prompt Templates

LangChain 提供了 PromptTemplates,可以讓用戶根據輸入動態地修改提示;提示詞模板是一種預定義的文本結構,其中包含變量和固定文本部分,用于引導語言模型生成特定類型的輸出。這些模板可以幫助模型更準確地理解上下文,并生成符合預期的響應。
? ?提示詞模板(Prompt Template)在自然語言處理和生成任務中,是設計和優化模型輸入的一種方法。提示詞模板可以幫助大型語言模型(LLM)更好地理解和生成目標內容。以下是提示詞模板的介紹及其
在不同場景中的應用。

通常提示詞模板包含兩部分:

  • 靜態部分:用于提供上下文,背景或引導語等用于控制LLM的大的方向。
  • 動態部分:根據具體輸入替換,在模板中用占位符表示變量。

2.1 基礎文本模板 PromptTemplate

from langchain_core.prompts import PromptTemplate# 定義含變量的模板
template = "請為{product}寫廣告語,突出{feature}特點"
prompt = PromptTemplate(input_variables=["product", "feature"],template=template
)# 填充變量生成最終提示
filled_prompt = prompt.format(product="智能手表", feature="健康監測")# 輸出:請為智能手表寫廣告語,突出健康監測特點
print(filled_prompt)

輸出:

請為智能手表寫廣告語,突出健康監測特點

使用partial_variables提前固定部分參數:

# 預設置部分變量
partial_prompt = prompt.partial(product="電動汽車")
print(partial_prompt.format(feature="續航能力"))
# 輸出:請為電動汽車寫廣告語,突出續航能力特點

2.2 對話模板 ChatPromptTemplate

用于對結構化的聊天消息管理,支持區分角色區分。

from langchain.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_messages([("system", "你是一位{role}"),("human", "請分析:{question}") 
])
filled_chat = chat_template.format_messages(role="金融顧問", question="當前股市走勢"
)print(filled_chat)
[SystemMessage(content='你是一位金融顧問', additional_kwargs={}, response_metadata={}), HumanMessage(content='請分析:當前股市走勢', additional_kwargs={}, response_metadata={})]

我們可以看到它返回一個BaseMessage類型,可以直接傳給聊天模型

response = model.invoke(prompt)

2.3 小樣本提示模板Few-shot

Few-shot examples 是一組可幫助語言模型生成更好響應的示例。要生成具有 few-shot examples 的 prompt,可以使用 FewShotPromptTemplate。該類接受一個 PromptTemplate 和一組 few-shot examples。然后,它使用這些 few-shot examples 格式化成 prompt 模板。

示例:輸入一個情緒的詞,要返回對應情緒的表現;我們根據提示詞,告訴模型,什么是“情緒的表現”。

'''
創建大模型LLM
'''
from langchain.chat_models import ChatOpenAI
# 定義模型調用API URL
base_url = "https://api.deepseek.com/v1"
# 定義模型調用API KEY(實際應用會放到環境變量中,避免明文暴露)
api_key = "你自己的api key"
# 定義模型名稱(對應DeepSeek-V3)
model='deepseek-chat' 
llm= ChatOpenAI(base_url=base_url,api_key=api_key,model=model)'''
創建小樣本提示詞模板
'''
from langchain import FewShotPromptTemplate# 示例樣本
examples = [{"input": "高興", "output": "笑容滿面"}, {"input": "悲傷", "output": "淚流滿面"}]# 創建提示詞模板
example_template = "輸入:{input}\n輸出:{output}"example_prompt = PromptTemplate.from_template(example_template)# 小樣本提示詞模板
few_shot_prompt = FewShotPromptTemplate(examples=examples,example_prompt=example_prompt,prefix="請給出每個輸入的情感進行分析,給出對應的表現。",suffix="輸入:{text}\n輸出:",input_variables=["text"]
)# 格式化提示詞
prompt_text = few_shot_prompt.format(text="憤怒")'''
調用模型
'''
response = llm.invoke(prompt_text)
print("LLM 輸出:")
print(response.content)

輸出:

LLM 輸出:
怒目圓睜

2.4 示例選擇器Example Selector

在大量示例情況下,因為大量的示例會浪費token,還可能超出token限制。Example Selector可以從大量的示例中,自動選擇最合適的部分示例納入到提示詞中。

主要兩種方式選擇:

  • 按長度: 較長的輸入,選擇較少示例;反之,較短輸入,選擇更多示例。
  • 按相似度: 查找與輸入具有最大余弦相似度的嵌入示例。
2.4.1 按長度選擇 LengthBasedExampleSelector

他可以根據輸入文本長度自動增減示例數量,短輸入時提供更多上下文示例,長輸入時減少示例以避免超出模型上下文窗口限制。通過預設的max_length參數確保提示總長度不超過模型處理上限。


from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_core.example_selectors import LengthBasedExampleSelector# 定義示例集
examples = [{"input": "happy", "output": "sad"},{"input": "tall", "output": "short"},{"input": "fast", "output": "slow"},{"input": "wind", "output": "calm"}
]# 創建示例模板
example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}"
)# 初始化選擇器
selector = LengthBasedExampleSelector(examples=examples,example_prompt=example_prompt,max_length=10  # 假設模型上下文窗口為30字符
)# 構建動態提示
dynamic_prompt = FewShotPromptTemplate(example_selector=selector,example_prompt=example_prompt,prefix="生成反義詞",suffix="Input: {adjective}\nOutput:",input_variables=["adjective"]
)# 測試不同長度輸入
print(dynamic_prompt.format(adjective="big"))      # 顯示全部3個示例
print(dynamic_prompt.format(adjective="extremely and huge and massive"))  # 可能只顯示1個示例
2.4.2 按相似度選擇 LengthBasedExampleSelector

以下是一個根據為輸入,提供一個反義詞的例子,當輸入一個詞時選擇器會根據語義選擇相近的例子;本例中,輸入“red”,選擇器選擇了和顏色相關的示例作為輸出。


from langchain.prompts import FewShotPromptTemplate, PromptTemplate
from langchain_core.example_selectors import SemanticSimilarityExampleSelector
from langchain.embeddings import OllamaEmbeddings
from langchain_community.vectorstores import FAISS# 初始化嵌入模型embedings
model = "nomic-embed-text:latest"  # 模型名稱
base_local_url = "http://localhost:11434" # 本地部署模型
embedings = OllamaEmbeddings(   # ①base_url=base_local_url,model=model
)# 定義示例集
examples = [{"input": "happy", "output": "sad"},{"input": "tall", "output": "short"},{"input": "fast", "output": "slow"},{"input": "wind", "output": "calm"},{"input": "black", "output": "white"},{"input": "Light", "output": "Dark"},{"input": "Bright", "output": "Dull"},{"input": "Rainy", "output": "Dry"},{"input": "Warm", "output": "Cool"},{"input": "Summer", "output": "Winter"}
]# 創建示例模板
example_prompt = PromptTemplate(input_variables=["input", "output"],template="Input: {input}\nOutput: {output}"
)# 初始化選擇器
selector = SemanticSimilarityExampleSelector.from_examples(examples=examples,embeddings=embedings, vectorstore_cls=FAISS, # 使用Faiss作為矢量庫k=3,# 選擇三個相似的示例input_keys=["input"]
)# 構建動態提示
dynamic_prompt = FewShotPromptTemplate(example_selector=selector,example_prompt=example_prompt,prefix="生成反義詞",suffix="Input: {input}\nOutput:",input_variables=["input"]
)# 測試不同長度輸入
print(dynamic_prompt.format(input="red"))     

輸出:

生成反義詞Input: Bright
Output: DullInput: black
Output: whiteInput: Light
Output: DarkInput: red
Output:

注:① 本例中使用本地部署一個Ollama框架Embedding模型,Ollama后續文章介紹。

**Embedding Model:**嵌入模型是一種將離散的高維數據(如單詞、句子、圖片等)映射到連續的低維向量空間的技術;嵌入模型的主要目的是捕捉輸入數據中的語義或特征信息,使得相似的輸入在嵌入空間中距離更近。嵌入模型通常計算高效,適合用于大規模數據的相似性搜索和分類任務。
嵌入模型適用場景:

  1. 文本相似度計算:比較兩個文本的嵌入向量,計算相似度。
  2. 信息檢索:通過嵌入向量進行高效的相似性搜索。
  3. 分類和聚類:使用嵌入向量進行文本或圖像的分類和聚類。

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

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

相關文章

如何在 Elementary OS 上安裝最新版本的 VirtualBox

Elementary OS 是一個基于 Ubuntu Linux 的發行版,它易于使用,對初學者友好,并且在用戶中非常受歡迎。如果你是 Elementary OS 的用戶,并且想在上面虛擬運行和探索其他操作系統,那么 Oracle VirtualBox 是一個非常不錯…

uni-app項目loading顯示方案

前情 uni-app是我比較喜歡的跨平臺框架,它能開發小程序/H5/APP(安卓/iOS),重要的是對前端開發友好,自帶的IDE可視化的運行和打包也讓開發體驗也非常棒,公司項目就是主推uni-app,為了用戶體驗對于耗時操作,…

【Android筆記】記一次 CMake 構建 Filament Android 庫的完整排錯過程(安卓交叉編譯、CMake、Ninja)

寫在前面的話,為了保持Sceneform-EQR始終是采用最新的filament,每隔一段時間我都會編譯filament,并根據新增內容完善Sceneform-EQR。 現由于更換電腦,環境需重新配置。簡單記錄下編譯出錯和解決方式。 Sceneform-EQR 是EQ對谷歌“…

ARM 單片機定義變量絕對地址方法

在ARM單片機中,定義變量到絕對地址通常有以下幾種方法(以Keil MDK為例,其他工具鏈原理類似): 方法1:使用指針強制轉換(通用) 直接通過指針訪問指定地址: define REGIS…

為何AI推理正推動云計算從集中式向分布式轉型

作者簡介:Vineeth Varughese是Akamai亞太及日本地區的云產品市場負責人,在云計算、人工智能(AI)及市場進入策略(GTM)領域擁有豐富經驗。 傳統云平臺在利用海量數據訓練AI模型方面表現出色,但隨著…

ar 導航導覽技術如何實現的?室內外融合定位與ar渲染技術深度解析

本文面向:移動開發工程師、AR技術研究者、室內外導航系統產品經理,旨在提供核心問題的參考方案:如何實現室內外無縫切換的精準定位(GPS藍牙Beacon)虛擬導航路徑與實景畫面的實時疊加原理。 如需獲取ar導航導航技術解決…

電路問題處理:SGMII鏈路中的AC耦合電容擺放位置

SGMII鏈路中的AC耦合電容擺放位置 目前是有個板子,其上分別有fpga,fpga的gtx口出sgmii千兆以太網鏈路,通過高速連接器互聯, 通常高速差分鏈路的AC耦合電容放在靠近接收端位置,如果在同一個板內的話沒啥疑惑的直接靠近…

激光雷達 + 視覺相機:高精度位姿測量方案詳解

激光雷達 視覺相機:高精度位姿測量方案詳解 引言 在航天器交會對接、自動駕駛、機器人導航等領域,位姿(位置姿態)測量的精度和魯棒性至關重要。單一的傳感器(如激光雷達或視覺相機)往往難以滿足復雜場景的…

【整數遞增加法拆分】2022-4-11

緣由整數拆分問題,但是怎么輸出這個數位最多。-編程語言-CSDN問答 void 整數遞增加法拆分() {//緣由https://ask.csdn.net/questions/7687667?spm1005.2025.3001.5141int n 0, c 1, f c, t n;string sc "";cin >> n; t n;while (t){if (t &…

Hashcat使用教程:快速上手密碼恢復工具

在信息安全領域,密碼破解是不可或缺的一環。而 Hashcat,作為當前最強大的密碼恢復工具之一,因其高效的性能與靈活的配置廣受好評。本文將介紹 Hashcat 的基礎用法,幫助新手快速上手,同時遵守合法使用的基本原則。 一、…

萌系盲盒陷維權風暴,Dreams委托David律所已立案,速避雷

美國律所David代理Dreams USA, Inc.發起全新維權案件,維權矛頭指向旗下三大萌系盲盒品牌:Sonny Angel、SMISKI和HIPPERS,跨境賣家需提高警惕。 案件基本情況: 起訴時間:2025-6-9 案件號:2025-cv-06422 …

aflplusplus:開源的模糊測試工具!全參數詳細教程!Kali Linux教程!(三)

使用 afl-cc 這是 afl-fuzz 的輔助應用程序。它可以作為 gcc 和 clang 的直接替代品,讓您使用所需的運行時工具重新編譯第三方代碼。 1. -help 顯示可用選項 afl-cc -help 其他選項同上,這里不再展開敘述。 afl-clang 1. --help 顯示可用選項 a…

安卓開發常用框架與庫詳解

安卓開發常用框架與庫詳解 安卓應用開發過程中,選擇合適的開發框架和第三方庫,可以極大提升開發效率、應用性能和代碼的可維護性。本文對主流的安卓開發框架和庫進行系統梳理,按功能模塊分類,涵蓋UI開發、網絡請求、圖片加載、數…

【項目實訓#09】智能代碼文件助手模式前后端設計與實現

【項目實訓#09】智能代碼文件助手模式前后端設計與實現 文章目錄 【項目實訓#09】智能代碼文件助手模式前后端設計與實現一、背景簡介二、技術方案與架構設計2.1 整體架構2.2 前端技術選型2.3 后端技術選型 三、前端代碼替換服務實現3.1 代碼替換服務設計3.2 處理生成的代碼3.3…

JAVA-springboot 異常處理

SpringBoot從入門到精通-第10章 異常處理 一、異常簡介 傳統的Java程序都是由try-catch語句捕捉異常,而Spring Boot項目采用了全局異常類的概念------所有方法均將異常拋出,并且專門安排一個類統一攔截并處理這些異常。這樣做的好處是可以把異常處理的…

VIC-3D應用指南系列之:DIC數字圖像相關技術與熱成像(VIC-3D IR System助力熱載荷測試)

本篇文章詳細講述了利用VIC-3D 10將數字圖像相關DIC數據與紅外相機熱成像的溫度數據相結合的操作流程。核心步驟包括: 相機選型與系統搭建 測試環境配置 VIC-Snap參數設置 雙系統標定(DIC與紅外) 外部參數計算 測試圖像采集 紅外…

adoc(asciidoc)轉為markdown的方法,把.adoc文件轉換為markdown格式

要將.adoc文件轉換為markdown格式,可以按照以下步驟操作: 安裝必要工具: sudo apt install pandoc asciidoc轉換流程: 先將asciidoc轉換為docbook格式: asciidoc -b docbook foo.adoc然后將docbook轉換為markdown&…

2022mpsPTE崗位筆試題

2022年9月完成了PTE崗位的筆試,并通過了。淺淺的還有一點印象,之前有朋友也想來,就放在這里,供需要的朋友看。 前兩個題是關于C語言的。 語言不限,C也可。 一個是輸出2到100偶數之和,主要就是調用for循環。…

使用Cursor + Devbox + Uniapp 一站式AI編程開發移動端(App、H5、小程序)

文章目錄 前言📖一、工具介紹🛠?1. Cursor:AI驅動的智能代碼編輯器2. Devbox:可復現的開發環境管理3. Uniapp:跨平臺應用開發框架 二、環境配置與集成🔮1. 安裝與配置Devbox2. 配置Cursor連接Devbox環境3.…

[智能客服project] AI提示詞配置 | 主協調器 | 閑魚協議工具

第五章:AI提示詞配置 歡迎回來! 在第四章:意圖路由器中,我們了解了機器人如何通過IntentRouter確定由哪個專家代理(如PriceAgent或TechAgent)處理用戶消息。 但代理被選定后,如何知道該說什么…