← 文章列表
LLM

PromptTemplate 入門:寫 prompt 寫到懷疑人生?LangChain 幫你搞定格式化!

2025-06-04 · — views

在開始玩 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 不只是單一句話,而是整段對話、有角色、有語境的聊天設計。