prompt template
v1.1.0
用於管理LLM提示模板的輕巧,零依賴性Python庫。基於string.Template
的設計原理。模板,但具有專門為LLM及時工程設計的增強功能。
pip install prompt-template
圖書館故意非常易於使用。這個想法是要保持簡單,進行驗證和序列化,並使調試簡單。
from prompt_template import PromptTemplate
# Create a template
template = PromptTemplate ( "Hello ${name}! Welcome to ${location}." )
# Render with values
result = template . to_string ( name = "Alice" , location = "Wonderland" )
print ( result ) # Hello Alice! Welcome to Wonderland.
# Set default values that can be overridden later
template = PromptTemplate ( "Hello ${name}! Your settings are: ${settings}" )
# Set default values - they're safely deep copied
template . set_default (
name = "Guest" ,
settings = { "theme" : "light" , "language" : "en" }
)
# Use with defaults
print ( template . to_string ())
# Hello Guest! Your settings are: {"theme": "light", "language": "en"}
# Override specific values
print ( template . to_string ( name = "Alice" ))
# Hello Alice! Your settings are: {"theme": "light", "language": "en"}
# Override everything
print ( template . to_string (
name = "Bob" ,
settings = { "theme" : "dark" , "language" : "fr" }
))
# Hello Bob! Your settings are: {"theme": "dark", "language": "fr"}
將名稱添加到模板中會通過上下文增強錯誤消息:
template = PromptTemplate (
name = "user_greeting" ,
template = "Hello ${name}! Welcome to ${location}."
)
圖書館優雅地處理嵌套結構:
template = PromptTemplate ( """
{
"user": {
"name": "${username}",
"role": "${role}"
},
"settings": {
"theme": "${theme}",
"notifications": ${notifications},
"preferences": ${preferences}
}
}
""" )
# Values are automatically serialized
result = template . to_string (
username = "john_doe" ,
role = "admin" ,
theme = "dark" ,
notifications = { "email" : True , "push" : False },
preferences = [ "daily_digest" , "weekly_report" ]
)
您可以逐步構建模板,並在此過程中保留默認值:
# Start with a base template
base = PromptTemplate ( """
Query parameters:
Model: ${model}
Temperature: ${temperature}
User: ${user}
Prompt: ${prompt}
""" )
# Set some defaults
base . set_default (
model = "gpt-4" ,
temperature = 0.7
)
# Create a partially populated template
user_template = base . substitute ( user = "alice" )
# Complete the template later
final = user_template . to_string ( prompt = "Tell me a story" )
該庫自動處理各種Python類型:
from uuid import UUID
from decimal import Decimal
from datetime import datetime
template = PromptTemplate ( """
{
"id": "${id}",
"amount": "${amount}",
"binary": "${binary_data}",
"metadata": ${metadata}
}
""" )
result = template . to_string (
id = UUID ( "550e8400-e29b-41d4-a716-446655440000" ),
amount = Decimal ( "45.67" ),
binary_data = b"Hello World" , # Automatically base64 encoded if needed
metadata = {
"timestamp" : datetime . now (), # Serialized via JSON
"values" : [ 1 , 2 , 3 ]
}
)
擴展基類以自定義值序列化:
from typing import Any
from datetime import datetime
from prompt_template import PromptTemplate as BasePromptTemplate
import orjson
class PromptTemplate ( BasePromptTemplate ):
@ staticmethod
def serializer ( value : Any ) -> str :
return orjson . dumps ( value ) # use orjson for faster json serialization etc.
圖書館提供了特定的廣泛錯誤:
from prompt_template import MissingTemplateValuesError
template = PromptTemplate ( "Hello ${name}!" )
try :
template . to_string () # No values provided
except MissingTemplateValuesError as e :
print ( f"Missing values: { e . missing_values } " ) # {'name'}
from prompt_template import InvalidTemplateKeysError
template = PromptTemplate ( "Hello ${name}!" )
try :
template . to_string ( name = "World" , invalid_key = "value" )
except InvalidTemplateKeysError as e :
print ( f"Invalid keys: { e . invalid_keys } " ) # ['invalid_key']
print ( f"Valid keys: { e . valid_keys } " ) # {'name'}
from prompt_template import TemplateSerializationError
template = PromptTemplate ( "Value: ${value}" )
try :
template . to_string ( value = object ()) # Non-serializable object
except TemplateSerializationError as e :
print ( f"Failed to serialize key ' { e . key } ': { e . original_error } " )
麻省理工學院許可證
如果您發現庫有用,請在Github上播放。