PromptTemplate 入門:寫 prompt 寫到懷疑人生?LangChain 幫你搞定格式化!
在開始玩 LLM 的路上,你一定會遇到一個問題:「我要怎麼把變數放進 prompt 裡?」
手動組字串嗎?那多辛苦!更別說 prompt 一改,還得全手改 code,真的會 prompt 到天荒地老。這時候,你需要的是——PromptTemplate ✨
🧩 PromptTemplate 是什麼?
簡單來說,它就是 LangChain 提供的一種模板工具,幫你把 prompt 跟變數分開處理。
不只是讓 prompt 更乾淨,也讓重複使用變得更簡單、更安全,還能支援
.invoke()跟.format(),彈性使用超方便!
💻 實作範例
直接看範例比較實在,這裡我們先定義一個最基本的 PromptTemplate:
from langchain_core.prompts import PromptTemplate
from rich import print as pprint
# 定義 PromptTemplate,裡面放了一個變數 topic
prompt_template = PromptTemplate(
input_variables=["topic"],
template="告訴我一個關於{topic}的有趣事實。"
)
這樣你就有了一個可以重複使用的 prompt 模板
這時候用 .format() 或.invoke()都可以把變數帶進Template,但兩者帶入資料的的方式以及return略有不同,最大的不同是.format() 回傳的是字串, 而.invoke()回傳的是一個可執行的物件
prompt_format = prompt_template.format(topic="Python programming")
prompt_invoke = prompt_template.invoke({"topic": "Python programming"})
pprint(prompt_format) # returns a formatted string
pprint(prompt_invoke) # returns a runnable object that can be invoked
###print result
告訴我一個關於Python programming的有趣事實。
StringPromptValue(text='告訴我一個關於Python programming的有趣事實。')
🧪 實際呼叫模型看看
pprint(chat_model.invoke(prompt_format).content)
pprint(chat_model.invoke(prompt_invoke).content)
兩個結果其實是一樣的,差別只是在於輸入類型和適用情境
.format() 適用情境:
-
只想得到格式化後的提示字串。
-
不需要進一步執行模型(如 LLM)推論。
.invoke()適用情境:
-
搭配 LLM chain 使用時更實用。
-
若你需要把 prompt 作為一個 chain 的一部分傳遞下去,就要用
.invoke()。
除了直接在PromptTemplate中代入模板參數,也可以使用from_template方法來建立PromptTemplate物件
# 定義 PromptTemplate,裡面放了一個變數 topic
prompt_template = PromptTemplate.from_template("告訴我一個關於{topic}的有趣事實。")
✅ 小結:有了 PromptTemplate,生活就有模板!
這篇我們快速認識了 PromptTemplate 的基本操作,也比較了 .format() 和 .invoke() 的差異。
無論你是要手動控制流程,還是要讓 prompt 自動跑起來,PromptTemplate 都是不可或缺的。
下一篇我們會更進一步,介紹適用於多輪對話場景的 ChatPromptTemplate,
讓 prompt 不只是單一句話,而是整段對話、有角色、有語境的聊天設計。