摘要
本文聚焦于 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
-