Szablon: Kolory (Color extraction → BaseLinker)¶
Gotowy scenariusz „Color extraction → BaseLinker" wyciąga kolor zamówionego produktu z wiadomości email i zapisuje go do dodatkowego pola w BaseLinkerze. To podstawowa wersja; w dokumentacji opisujemy też wariant Allegro (TASK-321 — „Allegro color → BL field → remove generic → macro → reply") z dodatkowymi krokami.
Dwa szablony, dwa zastosowania
- Color extraction → BaseLinker (ten dokument) — prosty: email → LLM → BaseLinker.
- Allegro color → BL field → remove generic → macro → reply — pełny obieg dla zamówień z tagiem
ZZ - AI - PodajKolor: znajdź generic line → zapisz kolor → poczekaj na auto-macro → usuń generic line → odpal post-delete macro → odpisz klientowi.
Oba scenariusze są inicjalnie nieaktywne — klonujesz, dostosowujesz, włączasz.
Co dostarcza szablon¶
Klient mailem prosi o konkretny kolor produktu („chciałbym żółtą bluzę husky"). Aktualnie operator musi:
- Otworzyć email.
- Wyłuskać kolor.
- Otworzyć zamówienie w BaseLinkerze.
- Wpisać kolor do dodatkowego pola.
- Odpisać klientowi.
Szablon automatyzuje kroki 2 + 4. Krok 5 (odpowiedź) jest wyłączony domyślnie — w wersji prostej tylko zapisuje fakt do BaseLinkera i zostawia zgłoszenie z statusem resolved.
Graf scenariusza¶
graph TD
src[source<br/><i>email</i>] --> filt[filter_color<br/>Subject zawiera 'color']
filt -->|continue| llm[llm_color<br/>LLM extract: kolor]
filt -.->|skip - dangling| stop1((koniec))
llm -->|ok| bl[bl_write_color<br/>BaseLinker: extra_field_1]
llm -->|low_confidence| esc[escalate_low_conf<br/>Eskalacja: niski confidence]
bl --> done[mark_resolved<br/>Status: resolved]
6 węzłów + 5 krawędzi. Filter, LLM extract, BaseLinker field, Escalate, Update status plus Source (korzeń).
Krok 1 — sklonuj szablon¶
W panelu Obsługa Klienta → Scenariusze:
- Znajdź kartę „Color extraction → BaseLinker" (ma żółte tło i napis Starter C10).
- Kliknij Edytuj (ołówek).
- Zmień nazwę na coś własnego: np. „Kolory — buyspace.pl". To ważne — duplikujesz szablon, nie modyfikujesz go bezpośrednio.
- Zapisz bez włączania flagi Aktywny.
Powstała kopia jest osobnym scenariuszem, niezależnym od oryginalnego szablonu. Aktualizacje (migracje) zespołu ROOTACCESS dotyczą tylko oryginalnego rekordu — Twój klon zostaje nietknięty.
Krok 2 — dostosuj filtry¶
Pasek triggera¶
- Źródło:
Email (Gmail / Mailcow). - Konto: wybierz konkretną skrzynkę (np.
support@aiofactory.pl) lub zostaw „Dowolne konto" jeśli wszystkie skrzynki używają tego samego protokołu. - Gdy nastąpi:
Nowe zgłoszenie(new_issue) — wystarczy reagować na pierwszy mail w wątku.
Węzeł filter_color¶
Kontroluje, na które maile ten scenariusz reaguje. Domyślnie:
- Pole:
subject - Operator:
contains - Wartość:
color - Uwzględniaj wielkość liter:
false
To minimalny próg — łapie wiadomości z „color", „colour", „kolor", „kolory" w temacie. Doprecyzuj zgodnie z Twoją domeną:
- Jeśli klienci piszą po polsku, zmień
valuenakolor. - Jeśli używasz różnych słów kluczowych (
barwa,odcień), zmień operator naregexi wpisz(kolor|barw|odcień). - Jeśli reagujesz na konkretne zamówienia (z dedykowanym tagiem
ZZ - AI - PodajKolor), użyj wariantu Allegro — patrz wyżej.
Nie dawaj zbyt szerokiego filtra
Filtr to brama bezpieczeństwa. Zbyt szeroki = LLM dostaje maile, które nie są o kolorze, próbuje wymyślić odpowiedź, scenariusz wpisuje śmiecie do BaseLinkera. Zacznij wąsko, rozszerzaj punktowo.
Krok 3 — dostosuj prompt LLM¶
Węzeł llm_color ma domyślny prompt:
Extract the product color requested by the customer.
Respond with JSON: {"fields": {"color": "<single english color name>"}, "confidence": 0..1}.
Customer text:
{{issue.subject}}
{{issue.snippet}}
Co warto zmienić:
- Język — domyślnie po angielsku, model zwraca
"red","blue". Jeśli wpisujesz do BaseLinkera po polsku, dopisz:"<single Polish color name in lowercase>"i przykłady ("czerwony","niebieski"). - Lista dozwolonych kolorów — żeby LLM nie wymyślał „beige" gdy chcesz dokładnie jednego z palety. Dodaj na końcu promptu:
- Pełny tekst wątku zamiast snippetu — domyślnie LLM widzi tylko
subject + snippet(pierwsze ~200 znaków). Aby dać mu cały wątek, dodaj{{text}}w promcie (renderuje się jako pełny rendering wątku).
Schema fields¶
Domyślnie extract_schema to:
Możesz dodać pole confidence_reason (string, opcjonalne) — LLM napisze, dlaczego ma takie a nie inne confidence. Pomocne do debugu.
Krok 4 — dostosuj zapis do BaseLinkera¶
Węzeł bl_write_color:
- Field id:
extra_field_1(pierwsze additional field; jeśli używasz innego, zmień naextra_field_2lub konkretne id z BaseLinkera, np.12345). - Wartość:
{{results.llm_color.fields.color}}— placeholder do polacolorz LLM.
Jeśli chcesz dodać prefiks („Kolor: czerwony"), nie rób tego tu (placeholder szuka dokładnego dopasowania całego pola). Zamiast tego użyj BaseLinker call z metodą setOrderFields i wpisz:
Parametry:
order_id: {{results.bl_write_color.bl_response.order_id}}
custom_extra_fields:
"12345": "Kolor: {{results.llm_color.fields.color}}"
Ale to skomplikowanie — w 90% przypadków BaseLinker field z prostą wartością wystarcza.
Krok 5 — eskalacja niskiego confidence¶
Węzeł escalate_low_conf dostaje wartości, gdy LLM zwraca confidence < 0.7. Domyślny tekst:
Dostosuj w polu Powód eskalacji — np.:
LLM nie był pewny koloru z wiadomości #{{issue_id}}. Klient: {{customer_name}} — sprawdź wątek ręcznie.
W polu Assignee możesz wpisać konkretne imię operatora („Anna") lub zostaw puste (wtedy reguły przydziału decydują).
Próg confidence jest zaszyty w kodzie LLM extract
Domyślny próg to 0.7 — wartości poniżej trafiają na uchwyt low_confidence. Próg jest częścią pól confidence_threshold i raise_on_low_confidence węzła LLM extract, ale nie ma ich w domyślnym schemacie palety (pole zostało celowo ukryte, żeby operator nie obniżał progu pod presją). Aby zmienić, edytuj scenariusz przez API lub zgłoś żądanie w Forgejo.
Krok 6 — test pojedynczego węzła¶
Przed aktywacją:
- Otwórz scenariusz w edytorze.
- Kliknij węzeł
llm_color(LLM extract). - Po prawej stronie rozwiń panel „Test węzła".
- Tryb „Z istniejącego zgłoszenia" → wybierz zgłoszenie email zawierające słowo „kolor".
- Uruchom test — zobaczysz wynik:
- (Opcjonalnie) Zaznacz „Do upstream" i wybierz węzeł
bl_write_color— wstaw mock_results, sprawdź czy placeholder podstawia się prawidłowo.
Krok 7 — aktywacja i monitoring¶
- W edytorze: zaznacz checkbox Aktywny i kliknij Zapisz.
- Wyślij sobie email testowy do skrzynki, którą wybrałeś, z tematem zawierającym
kolor. Na pewno użyj prawdziwej wiadomości — np. opisz, że chcesz konkretny kolor. - Otwórz
/marketplace/history/runs— po max. 5 minutach (cron pobiera maile co 5 min, dyspozytor sprawdza co 1 min) zobaczysz wpis przebiegu. - Otwórz wpis: status
success+ lista wykonanych węzłów. - Sprawdź w BaseLinkerze, czy pole
extra_field_1zostało zapisane.
Jeśli failed lub filtered_out w nieoczekiwany sposób:
- Otwórz wpis przebiegu, znajdź węzeł, który się wywalił.
- Spójrz w
cs_dead_letters(/marketplace/history/dlq) — będzie tam wpis z błędem. - Najczęstsze problemy: brak
order_external_idna zgłoszeniu (przykładowy mail nie był powiązany z zamówieniem), prompt LLM zwrócił coś dziwnego, BaseLinker zwrócił 401.
Wariant Allegro — pełny obieg z usuwaniem generic line¶
Drugi szablon — „Allegro color → BL field → remove generic → macro → reply" — robi więcej:
- Filter — tylko
event.type = "new_issue"(pierwszy kontakt na wątku). - BaseLinker find by tag — szuka linii zamówienia z tagiem
ZZ - AI - PodajKolor(generic / „Podaj kolor"). Jeśli brak → kończy cicho (filtered_out). - LLM extract — wyciąga
has_color(boolean) +color(string). - Filter na
has_color = true— jeśli klient nie podał koloru, eskalacja. - BaseLinker field — zapis koloru do
extra_field_1. - Delay — 30s, żeby auto-macro Baselinkera się wykonało.
- BaseLinker call
deleteOrderProduct— usuwa generic line. - BaseLinker call
runOrderMacroTrigger— odpala post-delete macro (np. dodaje produkt z konkretnym SKU koloru). - Send reply — odpowiada klientowi „Dziękujemy, kolor X został zapisany".
To wariant dużo bardziej ryzykowny — pisze do BaseLinkera, usuwa linię zamówienia, wysyła wiadomość. Aktywuj dopiero po pełnym test-run na zamówieniu testowym.
Pełny opis: zerknij do convex/convex/support/seed_templates.ts → funkcja buildAllegroColorWithTagGraph (źródło prawdy).
Cross-linki¶
- „Podaj kolor" — strona dla operatora (lista zamówień oczekujących na kolor) — Automatyzacje → Zgłoszenia #22, #23.
- Reference węzłów — LLM extract, BaseLinker field, BaseLinker find by tag, Escalate.
- Builder — tutorial — pełny przewodnik.
Dane techniczne¶
- Seed:
convex/convex/support/seed_templates.ts:buildColorExtractionGraph(prosty) +buildAllegroColorWithTagGraph(pełny Allegro). - Tabela kolejki:
podaj_kolor_queue(Convex) — synchronizowana cyklicznie z BaseLinkerem dla wariantu Allegro. - Tag „PodajKolor":
ZZ - AI - PodajKolor(case-sensitive).