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
MessagesPlaceholderun text în loc de o listă de mesaje. Placeholder-ul așteaptă mesaje sau tupluri(rol, text).