Szablony komunikatów

Modele językowe przyjmują tekst jako wejście, które zwykle nazywa się "komunikatem". Podczas tworzenia, komunikaty często nie są bezpośrednio wprowadzone jako stałe teksty, ponieważ utrudnia to zarządzanie nimi. Zamiast tego używane są szablony komunikatów do przechowywania komunikatów, podobnie jak w przypadku szablonów treści SMS-ów czy e-maili.

Co to jest szablon komunikatu?

Szablon komunikatu nie różni się zasadniczo od powszechnie stosowanych szablonów e-maili czy SMS-ów. Jest to szablon ciągu znaków, który może zawierać zestaw parametrów szablonu. Wartości parametrów szablonu można użyć do zastąpienia odpowiednich parametrów w szablonie.

Szablon komunikatu może zawierać następujące treści:

  • Instrukcje wysyłane do dużego modelu językowego (LLM).
  • Zestaw przykładowych pytań i odpowiedzi, aby przypomnieć SI o oczekiwanym formacie zwracanych żądań.
  • Pytania wysyłane do modelu językowego.

Tworzenie szablonu komunikatu

Możesz użyć klasy PromptTemplate do stworzenia prostego szablonu. Szablony komunikatów mogą zawierać dowolną liczbę parametrów szablonu, a następnie sformatować treść szablonu za pomocą wartości parametrów.

from langchain.prompts import PromptTemplate

prompt_template = PromptTemplate.from_template(
    "Powiedz mi {przymiotnik} dowcip o {zawartość}."
)

prompt_template.format(przymiotnik="śmieszny", zawartość="kurczakach")

Rezultat wyjścia szablonu:

'Powiedz mi śmieszny dowcip o kurczakach.'

Szablony komunikatów w formie wiadomości czatu

Modele czatowe przyjmują listę wiadomości czatu jako wejście, a treść tych wiadomości czatu można również zarządzać za pomocą szablonów komunikatów. Te wiadomości czatu różnią się od surowych ciągów znaków, ponieważ każda wiadomość jest powiązana z "rolą".

Na przykład w Interfejsie API uzupełnień czatu OpenAI, model czatu OpenAI definiuje trzy rodzaje ról dla różnych wiadomości czatu: asystent, człowiek lub system:

  • Wiadomości asystenta odnoszą się do odpowiedzi SI.
  • Wiadomości człowieka odnoszą się do wiadomości wysyłanych przez użytkownika do SI.
  • Wiadomości systemowe są zwykle używane do opisu tożsamości SI.

Przykład stworzenia szablonu wiadomości czatu:

from langchain_core.prompts import ChatPromptTemplate

chat_template = ChatPromptTemplate.from_messages(
    [
        ("system", "Jesteś pomocnym botem SI. Masz na imię {imię}."),
        ("człowiek", "Cześć, jak się masz?"),
        ("SI", "Dzięki, dobrze się czuję!"),
        ("człowiek", "{wejście_użytkownika}"),
    ]
)

wiadomości = chat_template.format_messages(imię="Bob", wejście_użytkownika="Jak masz na imię?")

Inny przykład formatowania wiadomości:

from langchain.prompts import HumanMessagePromptTemplate
from langchain_core.messages import SystemMessage
from langchain_openai import ChatOpenAI

chat_template = ChatPromptTemplate.from_messages(
    [
        SystemMessage(
            content=(
                "Jesteś pomocnym asystentem, który przerabia tekst użytkownika, "
                "aby zabrzmiał bardziej radośnie."
            )
        ),
        HumanMessagePromptTemplate.from_template("{tekst}"),
    ]
)

wiadomości = chat_template.format_messages(tekst="Nie lubię jeść smacznych rzeczy")
print(wiadomości)

Zwykle nie używamy bezpośrednio funkcji format_messages do formatowania treści szablonu komunikatu, ale pozwalamy ramie Langchain automatycznie sobie z tym poradzić.