Clasa ChatPromptTemplate în LangChain & LangGraph

Fundamente & Limbajul LCEL Nivel: începător

Șablon de conversație care construiește lista de mesaje (system, human, ai) din variabile, gata de trimis unui model de chat.

Sintaxă & invocare Python
from langchain_core.prompts import ChatPromptTemplate

prompt = ChatPromptTemplate.from_messages([
    ("system", "Ești un expert în {domeniu}."),
    ("human", "{intrebare}"),
])

ChatPromptTemplate din langchain_core.prompts construiește o listă de mesaje dintr-un șablon. Fiecare mesaj are un rol: system, human (sau user) și ai (sau assistant). Variabilele se scriu între acolade, {nume}, și se completează la invoke() cu un dicționar.

invoke() întoarce un ChatPromptValue, pe care modelul de chat îl primește direct. De aceea șablonul stă de obicei la începutul unui lanț LCEL: prompt | model. Dacă lipsește o variabilă, șablonul aruncă o eroare care numește variabilele lipsă.

Pentru istoricul conversației, MessagesPlaceholder("history") se înlocuiește cu o listă întreagă de mesaje; tuplul ("placeholder", "{history}") este o prescurtare pentru un placeholder opțional. Formatul implicit al șablonului este f-string, deci acoladele literale se scriu dublate.

Concepte cheie și caracteristici

Concept / Parametru Descriere practică
from_messages([...]) Primește tupluri (rol, text), obiecte mesaj sau MessagesPlaceholder.
from_template("...") Creează un șablon cu un singur mesaj human.
MessagesPlaceholder("history") Loc pentru o listă de mesaje (istoric, rezultate intermediare).
("placeholder", "{history}") Prescurtare pentru un MessagesPlaceholder opțional.
{{ }} Acolade literale într-un șablon f-string, de exemplu într-un exemplu JSON.
invoke({...}) Întoarce un ChatPromptValue; .to_messages() dă lista de mesaje.

Exemple practice și scenarii reale

Exemplul 1: Șablon legat de un model

from langchain_core.prompts import ChatPromptTemplate
from langchain.chat_models import init_chat_model

prompt = ChatPromptTemplate.from_messages([
    ("system", "Ești un expert în {domeniu}. Răspunzi în limba română."),
    ("human", "{intrebare}"),
])
model = init_chat_model("gpt-6-astra")

chain = prompt | model
print(chain.invoke({"domeniu": "nutriție", "intrebare": "Ce este indicele glicemic?"}).text)

Exemplul 2: Șablon cu istoric

from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder

prompt = ChatPromptTemplate.from_messages([
    ("system", "Ești un asistent util."),
    MessagesPlaceholder("history"),
    ("human", "{input}"),
])
valoare = prompt.invoke({
    "history": [("human", "Mă numesc Ana."), ("ai", "Salut, Ana!")],
    "input": "Cum mă cheamă?",
})
print(valoare.to_messages())

Exemplul 3: Acolade literale pentru un exemplu JSON

prompt = ChatPromptTemplate.from_template(
    'Răspunde doar cu JSON de forma {{"oras": "...", "tara": "..."}}. Text: {text}'
)

Greșeli frecvente și capcane

  • Să scrii acolade simple într-un exemplu JSON. Într-un șablon f-string, {cheie} este variabilă; pentru acolade literale scrii {{ și }}.
  • Să uiți o variabilă la invoke(). Șablonul cere toate variabilele declarate (cu excepția placeholder-elor opționale) și aruncă eroare.
  • Să dai lui MessagesPlaceholder un text în loc de o listă de mesaje. Placeholder-ul așteaptă mesaje sau tupluri (rol, text).

Noțiuni și module înrudite