Partial Prompt Templates in LangChain
https://python.langchain.com.cn/docs/modules/model_io/prompts/prompt_templates/partial
Partial Prompt Templates in LangChain
Partial prompt templates (called “partial” for short) are a useful feature in LangChain. Their core purpose is: fill in a subset of the required values first, then create a new prompt template that only needs the remaining values.
LangChain supports two main ways to use partial prompt templates. Below, we’ll explain each method with simple language and the exact code/examples from the original source (no changes or omissions).
Method 1: Partial Formatting with String Values
When to use this?
This is for cases where you get some variables early (e.g., at the start of your code) and other variables later (e.g., from user input). Instead of waiting to pass all variables at once, you can fill in the early variables first.
Example 1: Use the .partial() method
Suppose we have a prompt template that needs two variables: foo and bar. We get foo first, then bar later.
Step 1: Import and create the original prompt template
from langchain.prompts import PromptTemplate# The template needs two variables: {foo} and {bar}
prompt = PromptTemplate(template="{foo}{bar}", input_variables=["foo", "bar"])
Step 2: Fill in the “early” variable (foo) with .partial()
This creates a new partial prompt template that only needs bar now.
partial_prompt = prompt.partial(foo="foo") # Fill in {foo} with the string "foo"
Step 3: Fill in the remaining variable (bar)
Use .format() to pass the remaining variable (bar):
print(partial_prompt.format(bar="baz")) # Pass {bar} with "baz"
Output
foobaz
Example 2: Initialize with partial_variables
You can also fill in the “early” variable when creating the prompt template (instead of using .partial() later).
Code
# input_variables only lists the remaining variable: {bar}
# partial_variables fills in {foo} upfront
prompt = PromptTemplate(template="{foo}{bar}", input_variables=["bar"], # Only need {bar} laterpartial_variables={"foo": "foo"} # Fill {foo} with "foo" now
)# Only pass {bar} to format()
print(prompt.format(bar="baz"))
Output
foobaz
Method 2: Partial Formatting with Functions
When to use this?
This is for cases where a variable needs to be automatically fetched in the same way every time (e.g., current date/time). You don’t want to hardcode it, and you don’t want to pass it manually every time—so you use a function to get its value.
Example: Get current date automatically
Suppose we have a prompt template that needs two variables: adjective (from user input) and date (current date, fetched automatically).
Step 1: Define a function to get the value
First, create a function that returns the current date as a string:
from datetime import datetimedef _get_datetime():now = datetime.now() # Get current timereturn now.strftime("%m/%d/%Y, %H:%M:%S") # Format as "month/day/year, hour:minute:second"
Example 1: Use the .partial() method
Step 1: Create the original prompt template
prompt = PromptTemplate(template="Tell me a {adjective} joke about the day {date}", input_variables=["adjective", "date"] # Needs {adjective} and {date}
)
Step 2: Link the date variable to the function
Use .partial() to set date to the result of _get_datetime() (note: we pass the function itself, not its result—no parentheses () after the function name):
partial_prompt = prompt.partial(date=_get_datetime)
Step 3: Fill in the remaining variable (adjective)
print(partial_prompt.format(adjective="funny"))
Output
Tell me a funny joke about the day 02/27/2023, 22:15:16 # Date matches when you run the code
Example 2: Initialize with partial_variables
This is more common for function-based partialing (since the function runs automatically when needed).
Code
prompt = PromptTemplate(template="Tell me a {adjective} joke about the day {date}", input_variables=["adjective"], # Only need {adjective} laterpartial_variables={"date": _get_datetime} # Link {date} to the function
)# Only pass {adjective} to format()
print(prompt.format(adjective="funny"))
Output
Tell me a funny joke about the day 02/27/2023, 22:15:16 # Date matches when you run the code
