Chatbot dla inżyniera
Pojedyncze zapytania już znasz. Teraz zrobimy z nich pełnoprawną rozmowę. Dodamy historię wiadomości, ustawimy system prompt i napiszemy finalny skrypt exp_chatbot.py. Po drodze zobaczysz, co dokładnie wysyłamy do modelu i jak wygląda cała komunikacja.
Nasz pierwszy użyteczny program
Korzystając z asystentów AI, pewnie nieraz miałeś problem, że model traktował Cię jak amatora — a Ty przecież jesteś profesjonalistą i nie prosisz go o pomoc, tylko o opinię. Albo piszesz program i chcesz zintegrować go z modelem tak, aby dostał on pewną informację, zanim odpowie na Twoje pytanie.
W poprzednim pokoju model odpowiadał na nasze pytania, ale co jeśli chcemy, żeby trzymał się określonego tonu albo przestrzegał konkretnych wytycznych? Możemy oczywiście przypominać mu o tym przy każdej wiadomości, ale szybko staje się to męczące. Pewnie zauważyłeś też, że model ma pamięć złotej rybki — po kolejnej wiadomości nie pamięta, o czym rozmawialiśmy wcześniej. Nie jest to przypadek. Model nie przechowuje historii rozmowy za nas, dlatego musimy sami dostarczyć mu potrzebny kontekst.
W tej części zajmiemy się dwiema rzeczami, które pozwolą nam zbudować własnego chatbota:
- historia wiadomości — chcemy, by każda kolejna wiadomość mogła odnosić się do poprzednich;
- dodatkowy kontekst (system prompt) — informacja, którą model otrzyma, zanim udzieli nam odpowiedzi.
Dla niektórych może to brzmieć skomplikowanie, ale w praktyce jest bardzo proste i intuicyjne. Pamiętamy kod z poprzedniego pokoju:
from dotenv import load_dotenv
from anthropic import Anthropic
load_dotenv()
client = Anthropic()
model = "claude-haiku-4-5"
messages = [{"role": "user", "content": "Hi"}]
output = client.messages.create(
model=model,
max_tokens=100,
messages=messages,
)
print(output.content[0].text)
Pora go rozszerzyć o dwie funkcje:
def add_user_message(messages, message):
user_message = {
"role": "user",
"content": message
}
messages.append(user_message)
def add_assistant_message(messages, output):
assistant_message = {
"role": "assistant",
"content": output
}
messages.append(assistant_message)
Dwie małe funkcje zamiast ręcznego sklejania słowników.
Dodawanie za każdym razem ręcznie słownika role/content dodaje nam pracy, dlatego
opakowujemy to w funkcje. Przypomnienie — model nie ma pamięci między wywołaniami. Dlatego musimy sami dostarczyć mu historię:
co my napisaliśmy i co on odpowiedział. Doklejamy więc do tablicy kolejne słowniki, na przemian z rolami
user i assistant, i wygląda to mniej więcej tak:
[
{"role": "user", "content": "nasze zapytanie"},
{"role": "assistant", "content": "odpowiedź modelu"},
# ... i tak dalej
]
Nie przejmuj się tym, że w add_assistant_message nie wyciągamy tekstu
z TextBlock — do treści wiadomości asystenta API przyjmuje z powrotem tę samą listę bloków,
którą samo zwróciło (output.content), więc możemy podać ją bezpośrednio. Nie musimy też
wyjmować pojedynczego bloku z tej listy, bo mogą się w niej znaleźć również inne elementy (o nich
wkrótce).
Zaloguj się, aby czytać dalej
To tylko początek modułu. Załóż darmowe konto lub zaloguj się, aby mieć dostęp do bezpłatnych modułów.
