Szacowanie kalorii — dajemy modelowi oczy
Twój chatbot umie już rozmawiać — teraz nauczy się patrzeć. Zbudujemy pełną aplikację, a jej najważniejsze elementy omówimy w tym rozdziale. Może brzmi to jak wymagający projekt, ale szybko zobaczysz, że podstawy są prostsze, niż się wydaje. Najważniejszą zmianą będzie przekazywanie zdjęć do modelu — sam mechanizm komunikacji z AI już znasz. Stworzymy serce aplikacji cal.py, które później będziesz mógł samodzielnie rozwijać.
Dajemy modelowi oczy
Konstrukcję naszej aplikacji zaczniemy od zastanowienia się, czego właściwie potrzebujemy. Chcemy, aby modele za pomocą API analizowały przekazane im zdjęcia. Musimy więc sprawdzić, w jaki sposób twórcy API oczekują, że będą one przesyłane.
W przypadku Anthropic schemat wysyłania przedstawiono na poniższym
diagramie. TextBlock już znamy i używaliśmy go nie raz – służy on do przesyłania wiadomości
tekstowych. Dochodzi nam jednak nowy element – ImageBlock, który jest pojemnikiem na zdjęcie
przesyłane do modelu.
Jak więc teraz wysłać zdjęcie do modelu w takim bloku? Wiesz może, że na dysku zdjęcie jest tylko zbiorem bajtów informacji. API musi więc dostać je w formie, którą będzie w stanie zinterpretować. Mamy tutaj trzy sposoby przekazania obrazu do modelu.
- URL — gdy zdjęcie jest publicznie dostępne, wystarczy podać jego adres;
- Files API — wgranie zdjęcia na serwery Anthropica, skąd model może je pobrać;
- Base64 — wysłanie zdjęcia bezpośrednio z naszego urządzenia. Tym zajmiemy się w tym pokoju.
Wybieramy opcje trzecią, więc musimy najpierw przedstawić je w formie wygodnej do transportu — czyli w Base64. Takie kodowanie przedstawia zdjęcie za pomocą uniwersalnych znaków, nie tracąc przy tym żadnej informacji. Kosztem jest ok. 33% większy rozmiar danych — dlatego przy dużych plikach warto rozważyć Files API.
Poniżej znajduje się skrypt kodujący nasze zdjęcie oraz określający jego typ MIME. Warto zwrócić uwagę na
użyte biblioteki:
base64 oodpowiada za zakodowanie danych binarnych obrazu do formatu tekstowego Base64, który
możemy
przesłać w żądaniu API. mimetypes — nie jest konieczna, ale może być pomocna — pozwala ustalić
typ pliku na podstawie jego
rozszerzenia (jako argument podajemy oczywiście ścieżkę do naszego zdjęcia). Mimo że korzystamy z
ImageBlock, API nie odgadnie za nas formatu — to naszym
zadaniem jest wskazać typ MIME
zgodny z przekazywanym plikiem.
import base64
import mimetypes
path = "img/img.png"
with open(path, "rb") as f:
image_bytes = base64.standard_b64encode(f.read()).decode('utf-8')
kind, _ = mimetypes.guess_type(path)
print(kind, image_bytes)
image/png iVBORw0KGgoAAAANSUhEUgAABYAAAAMACAYAAACdMcPMAABFs2NhQlgAAEWzanVtYgAAAB5qdW1kYzJwYQARA [...]
Sam się przekonaj i odpowiedz jaki
media_type miałby plik z rozszerzeniem.jpg?
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.
