LangChain框架-PromptTemplate 詳解

摘要

        本文聚焦于 LangChain 框架中PromptTemplate提示詞模板模塊的深度解析,主要參考langchain_core.prompts源碼模塊與官方文檔。系統梳理 LangChain 對提示詞模板的封裝邏輯與設計思路,旨在幫助讀者構建全面、深入的知識體系,為高效運用LangChain 框架的提示詞模板開發應用奠定堅實基礎。

PromptTemplete 模塊靜態類圖

BasePromptTemplate 繼承樹

BaseMessagePromptTemplate 繼承樹

        上面的類圖展示了 LangChain 中 Prompt Template 相關類的繼承體系 。主要分為BasePromptTemplate 繼承樹和BaseMessagePromptTemplate 繼承樹。

BasePromptTemplate

        BasePromptTemplate作為根類,定義了提示模板的基本屬性和方法,它還提供了格式化提示、異步格式化提示、部分填充等方法。

相關子類

  • PipelinePromptTemplate:允許將多個提示模板組合在一起,構建復雜的提示。不過,該類已被棄用,從 0.3.22 版本開始不推薦使用,計劃在 1.0 版本移除。

  • StringPromptTemplate:用于處理字符串類型的提示模板,它繼承了 BasePromptTemplate 的基本功能,并提供了同步和異步格式化提示的方法,支持使用不同的字符串格式化語法,如 f - 字符串、Jinja2、Mustache 等。

StringPromptTemplate 的子類

  • PromptTemplate:最常用的提示模板類,它接受一個字符串模板和一組輸入變量,通過格式化方法生成最終的提示字符串。支持 f - 字符串、Jinja2 和 Mustache 三種模板格式,但使用 Jinja2 時需要注意安全問題。

  • FewShotPromptTemplate:用于基于少量示例生成提示,通常用于需要提供示例來引導模型生成結果的場景。

  • FewShotPromptWithTemplates:與 FewShotPromptTemplate 類似,但支持使用模板來格式化示例。

BaseChatPromptTemplate

        聊天提示模板的基類,派生出多個具體的聊天提示模板類。

  • AutoGPTPrompt:用于 AutoGPT 場景的特定提示模板。

  • FewShotChatMessagePromptTemplate:基于少樣本學習的聊天提示模板類

  • ChatPromptTemplate:通用的聊天提示模板類,可用于構建多輪對話的提示。

    • AgentScratchPadChatPromptTemplate:用于代理 scratch pad 場景的聊天提示模板。

BaseMessagePromptTemplate

        消息提示模板的基類,定義了格式化消息的抽象方法。

  • MessagesPlaceholder:用于占位符的消息提示模板。

  • BaseStringMessagePromptTemplate:使用字符串提示模板的消息提示模板基類。

  • ChatMessagePromptTemplate:通用的聊天消息提示模板。

  • HumanMessagePromptTemplate:用于人類消息的提示模板。

  • AIMessagePromptTemplate:用于 AI 消息的提示模板。

  • SystemMessagePromptTemplate:用于系統消息的提示模板。

專用模板/工具
  • ImagePromptTemplate:專門用于處理圖片,適配多模態大模型的Prompt。

  • load_prompt:從文件中讀取模板

  • DictPromptTemplate:將模板組裝成dict ,方便后續的取用

重點Template介紹

BasePromptTemplate

簡介

        BasePromptTemplate 是 LangChain 中用于所有提示模板的基類,它定義了提示模板的基本結構和行為,為創建和格式化提示提供了統一的接口。

主要屬性
  • input_variables:一個字符串列表,包含了提示模板所需輸入變量的名稱。這些變量的值是格式化提示所必需的。

  • optional_variables:一個字符串列表,包含了可選的變量名稱,用于占位符或 MessagePlaceholder。這些變量會自動從提示中推斷出來,用戶不需要提供。

  • input_types:一個字典,指定了提示模板期望的變量類型。如果未提供,則所有變量都被假定為字符串類型。

  • output_parser:一個可選的 BaseOutputParser 對象,用于解析調用大語言模型(LLM)對格式化提示的輸出。

  • partial_variables:一個字典,包含了提示模板攜帶的部分變量。這些部分變量會填充模板,使得用戶在每次調用提示時不需要傳遞它們。

  • metadata:一個可選的字典,用于追蹤提示的元數據。

  • tags:一個可選的字符串列表,用于追蹤提示的標簽。

 主要方法
  • 驗證方法

    • validate_variable_names:驗證變量名不包含受限名稱,如 "stop",并檢查輸入變量和部分變量是否有重疊。

  • 命名空間與序列化方法

    • get_lc_namespace:返回 LangChain 對象的命名空間,即 ["langchain", "schema", "prompt_template"]

    • is_lc_serializable:返回該類是否可序列化,返回值為 True

  • 輸入模式方法

    • get_input_schema:獲取提示的輸入模式,根據輸入變量和可選變量創建一個 BaseModel 類型的輸入模式。

  • 輸入驗證與格式化方法

    • _validate_input:驗證輸入是否為字典類型,并檢查是否缺少必需的輸入變量。

    • _format_prompt_with_error_ha

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

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

相關文章

中小企業設備預測性維護三步構建法:從零到精的技術躍遷與中訊燭龍實踐

在工業4.0浪潮中,中小企業常陷入"設備故障頻發"與"數字化成本高企"的雙重困境。本文基于半導體、食品加工等行業實證數據,結合中訊燭龍系統技術突破,為中小企業提供一套零基礎、低門檻、可擴展的預測性維護實施框架&…

C30-函數

一 函數的優點 避免代碼冗長模塊化的設計思路(十分類似組裝電腦)按功能劃分,每個函數代表一個功能 二 函數的三要素 函數要先定義再使用(就像是變量一樣)三要素: 函數名→體現功能參數列表 比如yf(x)→x就是參數又如yf(x,y)→x,y就是參數→參數的個數取決于需求 返回值:比如…

【Spring Boot 多模塊項目】@MapperScan失效、MapperScannerConfigurer 報錯終極解決方案

在使用 Spring Boot 構建多模塊項目,集成 MyBatis-Plus 時,很多開發者會遇到類似如下啟動報錯: Error creating bean with name mapperScannerConfigurer ... Caused by: java.lang.IllegalArgumentException: Property basePackage is requ…

pimpl與unique_ptr的問題

PImpl與std::unique_ptr組合 pimpl(Pointer to Implementation)是C程序開發中非常常用的技巧之一,它的好處有: 節省程序編譯時間保持程序/庫的二進制兼容性隱藏實現細節 舉例一個常見的pimpl的使用示例: // a.h class Impl; //前置聲明 c…

C++類和對象:構造函數、析構函數、拷貝構造函數

引言 介紹:C類和對象:構造函數、析構函數、拷貝構造函數 _涂色_博主主頁 C基礎專欄 一、類的默認成員函數 先認識一下類中的默認成員函數: 默認成員函數就是用戶沒有顯式實現,編譯器會自動生成的成員函數稱為默認成員函數。?個類…

CTF - PWN之ORW記錄

CTF - Pwn之ORW記錄https://mp.weixin.qq.com/s/uiRtqCSopn6U6NqyKJ8I7Q

RabbitMQ 中的六大工作模式介紹與使用

文章目錄 簡單隊列(Simple Queue)模式配置類定義消費者定義發送消息測試消費 工作隊列(Work Queues)模式配置類定義消費者定義發送消息測試消費負載均衡調優 發布/訂閱(Publish/Subscribe)模式配置類定義消…

民宿管理系統6

普通管理員管理&#xff1a; 新增普通管理員&#xff1a; 前端效果&#xff1a; 前端代碼&#xff1a; <body> <div class"layui-fluid"><div class"layui-row"><div class"layui-form"><div class"layui-f…

vue3+ant design vue + Sortable實現多級表格列拖動

1、最近遇到個需求&#xff0c;需使用vue3ant design vue Sortable實現多級表格的表頭允許用戶拖拽移動。即當用戶拖拽一級表頭時&#xff0c;其對應的子級表頭及數據應同步移動&#xff0c;并且只允許一級非固定表頭允許拖拽。 2、代碼 <a-table:data-source"rowDat…

第五十四篇 AI與數據分析

一、AI數據分析就像做菜 想象你在廚房做一道新菜&#xff0c;AI數據分析的流程其實非常相似&#xff1a; 買菜&#xff08;獲取數據&#xff09; 去市場挑選新鮮蔬菜 從Excel/數據庫獲取數據例&#xff1a;pd.read_csv(超市銷售表.csv) 洗菜切菜&#xff08;清洗數據&#x…

差分OPA verilogaA 模型

做電路設計&#xff0c;需要提前用理想模型如VerilogA模型做驗證。這里分享一個由ahdlib庫里單端opamp改造而來的差分opamp。參考何樂年的《模擬集成電路設計與仿真》10.4節423頁&#xff1b; 描述的小信號模型如上。 VerilogA 用到了SRI/C&#xff0c;GBWgm/C,gaingm*r1等概念…

Solidity語言基礎:區塊鏈智能合約開發入門指南

一、Solidity概述 Solidity是以太坊生態系統中最重要的智能合約編程語言&#xff0c;由Gavin Wood于2014年提出。作為面向合約的高級語言&#xff0c;它結合了JavaScript、Python和C的語法特點&#xff0c;專為在以太坊虛擬機&#xff08;EVM&#xff09;上運行而設計。 核心…

開啟智能Kubernetes管理新時代:kubectl-ai讓操作更簡單!

在如今的科技世界中,Kubernetes 已經成為容器編排領域的標桿,幾乎所有現代應用的基礎設施都離不開它。然而,面對復雜的集群管理和日常運維,許多開發者常常感到無所適從。今天,我們將為大家介紹一款結合了人工智能的強大工具——kubectl-ai。它不僅能幫助開發者更加順暢地與…

2003-2020年高鐵站開通時間數據

2003-2020年高鐵站開通時間數據 1、時間&#xff1a;2003-2020年 2、來源&#xff1a;Chinese High-speed Rail and Airline Database&#xff0c;CRAD 3、指標&#xff1a;高鐵站名稱、開通時間、所在省份、所在城市、所屬線路名稱 4、說明&#xff1a; Hsrwsnm[高鐵站名…

神經網絡—感知器、多層感知器

文章目錄 前言一、生物神經元與感知器的類比二、感知器1、簡單感知器2、多層感知器&#xff08;1&#xff09;多層感知機結構 3、神經網絡結構 總結1、感知器的局限性如何突破感知器的局限性&#xff1f; 2、感知器的應用 前言 感知器&#xff08;Perceptron&#xff09;是神經…

避免數據丟失:在存儲測試數據之前,要做好Redis持久化

Redis提供兩種持久化方法&#xff1a; 一、RDB&#xff08;Redis DataBase&#xff09;&#xff1a; 1、周期性保存內存快照到磁盤&#xff08;生成 dump.rdb 文件&#xff09;。 2、配置save 相關參數。 我本地的配置如下&#xff1a; &#xff08;1&#xff09;配置文件re…

Oracle EBS FORM快捷鍵與觸發器的關系與使用

Oracle EBS FORM快捷鍵與觸發器的引用 1、快捷鍵作用&#xff0c;可以看文檔fmrweb.res 2、文件內容&#xff1a;標識了快捷鍵的作用 9 : 0 : “Tab” : 1 : “Next Field” 9 : 1 : “ShiftTab” : 2 : “Previous Field” 116 : 0 : “F5” : 3 : “Clear Field” 38 : 0 :…

Java 24:重構數字信任邊界 —— 后量子時代的智能安全防御體系構建

引言 在量子計算陰影與 AI 驅動攻擊交織的網絡安全新紀元&#xff0c;Java 平臺正經歷著自誕生以來最深刻的安全架構革新。作為企業級應用的核心基礎設施&#xff0c;Java 24 不僅延續了 “一次編寫&#xff0c;處處運行” 的跨平臺基因&#xff0c;更以后量子密碼學引擎、動態…

【故障定位系列】容器CPU問題引起的故障如何快速排查

原文地址&#xff1a;https://mp.weixin.qq.com/s/0VlIjbeEdPZUbLD389disA 當生產環境中的容器CPU出現異常時&#xff0c;可能會引發上層業務出現一系列問題&#xff0c;比如業務請求緩慢、網頁卡頓甚至崩潰等&#xff0c;如果沒有一個有效的故障定位方法&#xff0c;運維人員很…

DeepSeek 智能客服應用指南:構建、策略與成效升級

目錄 一、引言二、DeepSeek 與智能客服的相遇2.1 DeepSeek 的技術亮點2.2 智能客服&#xff1a;企業不可或缺的 “數字助手”2.3 DeepSeek 如何適配智能客服需求 三、基于 DeepSeek 搭建智能客服系統3.1 需求分析3.2 技術選型3.3 系統架構設計3.4 搭建步驟實操 四、基于 DeepSe…