提示詞Prompts(2)

摘要: 本文介紹了langchain.prompts中基礎的提示詞模板的高級用法,包括利用PipelinePrompt組合Prompt使用,多模態場景、動態占位符的使用等進行了介紹。

文章目錄

    • 1. 背景
    • 2. PipelinePrompt
      • 2.1 組合兩個Prompt模板
      • 2.2 多模態模板
    • 3. 聊天提示詞模板
    • 4. 占位符MessagesPlaceholder
      • 4.1 基本用法
      • 4.2 多輪對話
      • 4.3 可選占位符配置
      • 4.4 動態示例選擇

1. 背景

在實際應用中提示詞通常并非單一使用,而是多種模板結合起來使用,尤其在大型的Agent中,好的提示詞模板設計,對后續的開發會起到事半功倍的效果。

2. PipelinePrompt

PipelinePrompt是LangChain框架中用于組合多個Prompt模板的核心組件,它通過模塊化設計實現Prompt的復用和靈活組裝。其核心思想類似于軟件開發中的管道模式(Pipeline Pattern),將多個處理步驟串聯成流水線,前序步驟的輸出作為后續步驟的輸入。

2.1 組合兩個Prompt模板

示例:

from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts.prompt import PromptTemplate# 定義子模板1:系統指令
intro_template = PromptTemplate.from_template("你是一個專業翻譯,負責將{input_language}翻譯為{output_language}:"
)
# 定義子模板2:翻譯示例
example_template = PromptTemplate.from_template("示例:'{example_input}' -> '{example_output}'"
)# 組合為完整PipelinePrompt
full_prompt = PipelinePromptTemplate(final_prompt=PromptTemplate.from_template("{intro}\n{example}\n請翻譯:{text}"),pipeline_prompts=[("intro", intro_template),("example", example_template)]
)# 使用示例
print(full_prompt.format(input_language="英文",output_language="中文",example_input="Hello",example_output="你好",text="Good morning"
))

輸出:

你是一個專業翻譯,負責將英文翻譯為中文:
示例:'Hello' -> '你好'
請翻譯:Good morning

2.2 多模態模板

以下是一個結合視覺和文本的多模態PipelinePromptTemplate示例,用于生成圖片描述并回答相關問題。


from langchain.prompts.pipeline import PipelinePromptTemplate
from langchain.prompts import PromptTemplate
import base64
import httpx# 子模板1:圖片描述生成
vision_template = PromptTemplate.from_template("分析這張圖片:{image_base64}\n""請列出圖中3個最顯著的特征(如物體、顏色、動作)"
)# 子模板2:問題回答
qa_template = PromptTemplate.from_template("基于以下圖片特征:{vision_analysis}\n""回答用戶問題:{user_question}\n""要求:包含對圖片特征的引用"
)# 構建多模態流水線
multimodal_prompt = PipelinePromptTemplate(final_prompt=PromptTemplate.from_template("多模態問答系統:\n""{vision_part}\n""{qa_part}"),pipeline_prompts=[("vision_part", vision_template),("qa_part", qa_template)]
)# 使用示例(需替換真實圖片URL)
image_url = "https://example.com/park.jpg"
image_data = base64.b64encode(httpx.get(image_url).content).decode("utf-8")formatted_prompt = multimodal_prompt.format(image_base64=f"<<Image>>{image_data}",user_question="圖中人們在做什么活動?"
)
print(formatted_prompt)

該示例演示了如何分階段處理多模態輸入:先提取視覺特征,再結合特征回答問題。實際運行時需要接入多模態模型來處理圖像數據。

3. 聊天提示詞模板

? ?聊天模型中的四種消息:AIMessage、HumanMessage、SystemMessage、ChatMessage分別對應著4種聊天消息模板:AIMessagePromptTemplate、HumanMessagePromptTemplate、SystemMessagePromptTemplate、ChatMessagePromptTemplate;
? ?可以通過這些模板,構建引導整個會話流程。典型的工作流程:

  • System設定角色和規則
  • Human收集用戶輸入
  • AI按預定格式響應
  • 通過ChatPromptTemplate組合成完整對話鏈:

1. SystemMessagePromptTemplate? 設定AI角色和對話規則:

from langchain.prompts import SystemMessagePromptTemplatesystem_template = "你是一位專業心理咨詢師,用溫暖平和的方式回答用戶問題"
system_prompt = SystemMessagePromptTemplate.from_template(system_template)
# 輸出:SystemMessage(content='你是一位...', additional_kwargs={})

?2. HumanMessagePromptTemplate結構化用戶輸入:

from langchain.prompts import HumanMessagePromptTemplatehuman_template = "我的問題是關于{topic},具體情況:{details}"
human_prompt = HumanMessagePromptTemplate.from_template(human_template)
# 使用:human_prompt.format(topic="失眠", details="連續一周睡不著")

?3. AIMessagePromptTemplate控制AI響應格式:

from langchain.prompts import AIMessagePromptTemplateai_template = """建議方案:
1. {solution1}
2. {solution2}"""
ai_prompt = AIMessagePromptTemplate.from_template(ai_template)
# 輸出帶編號列表的響應

4. ChatPromptTemplate 構建完整對話流程:

from langchain.prompts import ChatPromptTemplatechat_template = ChatPromptTemplate.from_messages([system_prompt,human_prompt,ai_prompt
])chain = chat_template | ChatOpenAI()
chain.invoke({"topic": "焦慮", "details": "考前心慌","solution1": "深呼吸練習","solution2": "制定復習計劃"
})

5.多模態支持:
實際應用中,通常需要支持在單個PromptTemplate中組合文本、圖像URL等數據類型,例如構建包含圖像和文本的多模態消息。


edu_prompt = ChatPromptTemplate.from_messages([SystemMessage(content="你是數學輔導AI,需:\n1. 識別手寫答案\n2. 指出錯誤步驟"),# 保留最近3輪對話MessagesPlaceholder(variable_name="dialogue", optional=True),# 混合輸入HumanMessage(content=[{"type": "text", "text": "問題:{question}"},{"type": "image_url", "image_url": "{handwriting}"},{"type": "audio_url", "audio_url": "{voice_note}"}])
])# 調用示例(無歷史對話時)
prompt = edu_prompt.format_messages(question="求x2+2x+1=0的解",handwriting="https://example.com/student_work.jpg",voice_note="https://example.com/voice_q.mp3"
)

4. 占位符MessagesPlaceholder

? ?MessagesPlaceholder是LangChain中用于動態插入消息列表的占位符組件,屬于BaseMessagePromptTemplate的子類。它允許在構建聊天提示模板時預留位置,后續通過變量注入實際消息內容。

  • 動態消息插入:支持在運行時填充任意數量的消息(如對話歷史)。
  • 多角色兼容:可處理SystemMessage、HumanMessage、AIMessage等混合類型消息。
  • 條件控制:通過optional參數控制占位符是否必填。

4.1 基本用法

from langchain.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain_core.messages import HumanMessage, SystemMessage# 定義包含占位符的模板
chat_prompt = ChatPromptTemplate.from_messages([SystemMessage(content="你是一個助手"),MessagesPlaceholder(variable_name="history"),HumanMessage(content="{input}")
])# 填充實際消息
formatted = chat_prompt.format_messages(history=[HumanMessage(content="你好"),AIMessage(content="有什么可以幫您?")],input="今天天氣如何"
)

4.2 多輪對話

結合ConversationBufferMemory實現上下文保持:

from langchain.memory import ConversationBufferMemorymemory = ConversationBufferMemory(return_messages=True)
memory.save_context({"input": "推薦一本小說"}, {"output": "《三體》值得一讀"}
)# 使用記憶中的歷史對話
prompt_with_history = chat_prompt.format_messages(history=memory.load_memory_variables({})["history"],input="作者是誰?"
)

4.3 可選占位符配置

optional_placeholder = MessagesPlaceholder(variable_name="history", optional=True
)  # 未提供變量時返回空列表:ml-citation{ref="2" data="citationList"}

4.4 動態示例選擇

在Few-shot場景中,通過MessagesPlaceholder動態插入示例對話:

few_shot_prompt = ChatPromptTemplate.from_messages([SystemMessage(content="根據示例回答問題"),MessagesPlaceholder("examples"),HumanMessage(content="{question}")
])

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

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

相關文章

服務器代碼知識點補充

目錄 UdpServer: 觀察者模式: remove_if算法 管道補充: 文件的標準輸出 ,標準輸入,標準錯誤 UdpServer: 數據接收模塊關心Adduser 和Deleuser 兩個模塊 線程池關心Route模塊 將這三個方法注冊進服務器 ,但是有臨界區問題(線程池與數據接受模塊可能同時訪問用戶管理模塊,所…

R語言緩釋制劑QBD解決方案之二

藥物層優化研究 在藥物層工藝中水溶劑蒸發起到重要的作用。濕的環境會使丸子聚集&#xff0c;而干的環境影響藥物與MCC的粘合。輸入變量如氣流量&#xff0c;噴霧速率&#xff0c;霧化壓力&#xff0c;和產品溫度對MCC沉著和包衣溶劑蒸發的平衡有影響。進行了帶3個中心點的24-…

Html實現圖片上傳/裁剪/馬賽克/壓縮/旋轉/縮放

cropper下載 https://download.csdn.net/download/dongyan3595/90970115 前端代碼 <!doctype html> <html lang"en"> <head><base href"/aishop/"><meta name"viewport" content"widthdevice-width, initial…

springboot項目中整合高德地圖

一&#xff1a;高德開放平臺的使用 高德開放平臺 | 高德地圖API 注冊高德地圖賬號 認證填寫個人信息&#xff1a; 認證方式選擇“個人認證開發者”即可&#xff0c;然后完善信息 認證成功之后&#xff0c;再次進入控制臺&#xff0c;創建關于地圖的應用 創建Key&#xff08;y…

鴻蒙開發-視頻學習及實用中的一些小結

1.extend 和 styles extend是在styles基礎上進行了升級 使用的時候extend是全局的。 styles不加function 局部 加了就是全局。 2.builder 中要引用comp組件 需要在外層嵌套布局 3.ability之間的跳轉 want需要加&#xff1b; 4. as 類型斷言 &#xff01;跟在xxx! 表示…

網盤直鏈解析網頁版

不支持百度網盤、阿里網盤。 123&#xff0c;藍奏云&#xff0c;可道云什么的都可以 源碼下載地址&#xff1a;https://www.123865.com/s/X91lVv-3l90v

AXI4-Stream Clock Converter IP

一、參考說明 1.沒有專門對AXI4-Stream Clock Converter IP說明的文檔&#xff1b; 2.可以參考PG085文檔&#xff1b; 3.可以參考PG035文檔&#xff1b; 二、IP的作用 1.用于stream數據流再不同的時鐘域之間的可靠性傳輸&#xff1b; 2.支持跨時鐘域的場景&#xff1b; 3.內部…

NineData 社區版 V4.2.0 發布!新增MySQL與PostgreSQL互相遷移,SQL管理Milvus,安裝更高效

NineData 社區版 V4.2.0 正式發布&#xff01;本次更新通過鏡像輕量化部署、新增 3 條遷移鏈路、新增支持 Milvus 向量數據庫等核心升級&#xff0c;輕松實現數據庫遷移容災、實時數據集成分析、AI 向量數據管理等場景需求。社區版支持本地離線部署&#xff0c;嚴格保障數據隱私…

如何安裝使用qmt腳本跟單聚寬策略

登錄知識星球&#xff0c;下載獲取 解壓后&#xff0c;登錄大qmt&#xff0c;將策略導入其中&#xff0c; 然后修改參數&#xff1a; 點擊免密改參 totalcash&#xff1a;該策略使用資金總量 per&#xff1a;每只股票占比資金額 舉例&#xff0c;當前出信號&#xff0c;每只…

什么是MongoDB

目錄 主要特點 MongoDB概念解析 完整術語列表 MongoDB安裝 MongoDB Shell 安裝MongoDB Shell 數據庫管理 查看數據庫列表 創建數據庫 刪除數據庫 默認數據庫 系統內置數據庫 集合管理 查看集合 創建集合 更新集合名 刪除集合 文檔操作 插入文檔 查詢文檔 …

【Docker基礎】Docker核心概念:容器(Container)與鏡像(Image)的區別與聯系

目錄 引言 1 Docker鏡像&#xff08;Image&#xff09; 1.1 鏡像的定義 1.2 鏡像的特點 1.3 鏡像的創建 1.4 鏡像的結構 1.5 鏡像結構描述 2 Docker容器&#xff08;Container&#xff09; 2.1 容器的定義 2.2 容器的特點 2.3 容器的創建與運行 2.4 容器的生命周期…

從零到一:構建企業級 Vue.js 3 組件庫

前言&#xff1a;為何要構建組件庫&#xff1f; 在現代前端工程化體系中&#xff0c;組件庫已不再是大型團隊的專屬。它是一個團隊設計規范、開發模式和技術沉淀的核心載體。構建一個組件庫&#xff0c;能夠帶來諸多優勢&#xff1a; 提升效率&#xff1a;提供可復用的高質量…

【2025 CVPR-Backbone】Building Vision Models upon Heat Conduction

摘要 利用注意力機制的視覺表示模型在追求大感受野時面臨著巨大的計算開銷。在本研究中&#xff0c;我們通過引入基于物理熱傳導原理的熱傳導算子&#xff08;Heat Conduction Operator, HCO&#xff09;來緩解這一挑戰這么高級咩(⊙o⊙)&#xff01;。HCO將圖像塊視為熱源&am…

Rust編寫Shop管理系統

Rust編寫Shop管理系統 Actix Web 是一個功能強大、實用且速度極快的 Rust Web 框架。編寫Shop管理系統 HelloKeny 首先是先編寫最簡單的例子,類似hello World可以檢查環境 Actix Web 是一個功能強大、實用且速度極快的 Rust Web 框架。 命令 cargo new hellokenycd hell…

安寶特案例丨Vuzix AR智能眼鏡集成專業軟件,助力盧森堡醫院藥房轉型,贏得輝瑞創新獎

在Vuzix M400 AR智能眼鏡的助力下&#xff0c;盧森堡羅伯特舒曼醫院&#xff08;the Robert Schuman Hospitals, HRS&#xff09;憑借在無菌制劑生產流程中引入增強現實技術&#xff08;AR&#xff09;創新項目&#xff0c;榮獲了2024年6月7日由盧森堡醫院藥劑師協會&#xff0…

快速冪算法詳解:從暴力到優雅的數學優化

文章目錄 一、樸素冪運算的問題二、快速冪的數學原理三、快速冪的遞歸實現四、快速冪的迭代實現五、模運算下的快速冪六、快速冪的應用場景七、總結 快速冪是一種高效計算冪運算的算法&#xff0c;能夠將時間復雜度從樸素的 O (n) 降低到 O (log n)。本文將深入探討快速冪的原理…

HTML+CSS 動態菜單和登錄框

摘要 實現了一個現代化的登錄/注冊界面&#xff0c;包含導航欄和彈窗表單。 HTML結構采用了響應式設計&#xff0c;包含Logo、導航鏈接和登錄按鈕。 CSS樣式實現了背景圖片、導航欄懸浮效果和表單美化&#xff0c;使用偽元素實現鏈接下劃線動畫。 JavaScript實現了彈窗切換…

抖音AI數字人對口型軟件LatentSync最新版整合包,音頻驅動口型講話

本次和大家分享一個字節跳動開發的強大的音頻驅動口型數字人視頻制作軟件LatentSync&#xff0c;我以前也分享過不少類似軟件了&#xff0c;比如&#xff1a;EchoMimic、VideoReTalking、hallo。字節的推出的這個效果稍微更好一點&#xff0c;我制作了最新版的一鍵啟動整合包。…

深入理解 PyTorch:從基礎到高級應用

在深度學習的浪潮中&#xff0c;PyTorch 憑借其簡潔易用、動態計算圖等特性&#xff0c;迅速成為眾多開發者和研究人員的首選框架。本文將深入探討 PyTorch 的核心概念、基礎操作以及高級應用&#xff0c;帶你全面了解這一強大的深度學習工具。? 一、PyTorch 簡介? PyTorch…

Java 中的 synchronized 與 Lock:深度對比、使用場景及高級用法

&#x1f4a1; 前言 在多線程并發編程中&#xff0c;線程安全問題始終是開發者需要重點關注的核心內容之一。Java 提供了多種機制來實現同步控制&#xff0c;其中最常用的兩種方式是&#xff1a; 使用 synchronized 關鍵字使用 java.util.concurrent.locks.Lock 接口&#xf…