BlogRAG

Jak asystent powinien odpowiadać na pytania zależne od tabel i arkuszy

Najpierw posortuj pytania. Na pytanie o jedną wartość w jednym wierszu można odpowiedzieć, pobierając ten wiersz jako tekst, o ile wiersz niesie ze sobą nazwy kolumn. Pytanie, które sumuje, filtruje, zlicza albo porównuje wiele wierszy, wymaga zapytania do danych, bo wyszukiwanie zwraca kilka chunków, a odpowiedź zależy od wszystkich wierszy. Przy każdej wyliczonej odpowiedzi pokazuj zapytanie i datę danych.

Zaktualizowano

Trzy rodzaje pytań o tabele

  • Wyszukanie: jedna wartość z kontekstem, na przykład okres wypowiedzenia u jednego dostawcy albo cena jednej części
  • Obliczenie: sumy, średnie, rankingi, zliczenia albo filtry na wielu wierszach
  • Wyjaśnienie: co oznacza kolumna, dlaczego zmieniła się liczba albo jaka reguła dała wartość, co zwykle jest w dokumencie obok tabeli

Większość asystentów dostaje wszystkie trzy wymieszane. Pytanie projektowe brzmi: jak rozpoznać każdy rodzaj i skierować go na ścieżkę, która potrafi na niego odpowiedzieć.

Dlaczego wyszukiwanie top-k nie zsumuje kolumny

Wyszukiwanie wybiera kilka chunków najbardziej podobnych do pytania. Suma z trzech tysięcy pozycji zamówień wymaga ich wszystkich, a żaden ranking podobieństwa nie zwróci dokładnie tych wierszy, które zwróciłby filtr. Model sumuje to, co dostał, i pewnie przedstawia wynik. Brakujące wiersze wyglądają jak mniejsza liczba, a nie jak błąd.

Wklejenie całego arkusza do promptu omija problem wyboru przy małych tabelach, ale liczenie na wielu liczbach w tekście nadal jest zawodne. Baza danych albo dataframe robi to dokładnie.

Jak przygotować wiersze do wyszukiwania

Na potrzeby wyszukiwania pojedynczych wartości indeksuj każdy wiersz jako osobny dokument. Azure AI Search oferuje na przykład tryb parsowania delimitedText, który zamienia każdą linię pliku CSV w osobny dokument; bez niego cały plik staje się jednym dokumentem. Indekser SQL mapuje pojedynczą tabelę albo widok wiersz po wierszu i zostawia wartości dziesiętne i pieniężne jako tekst, bo konwersja na liczby zmiennoprzecinkowe straciłaby precyzję.

Zapisz każdy wiersz jako tekst, który człowiek mógłby przeczytać samodzielnie: nazwy kolumn obok wartości, jednostki i waluta wypisane wprost, nazwa arkusza albo tabeli i data eksportu. Wiersz zawierający tylko 48213, 3, 0.15, PL jest nie do znalezienia po znaczeniu i niejednoznaczny dla modelu.

Ścieżka zapytań do obliczeń

Do obliczeń pozwól modelowi wygenerować zapytanie do znanego schematu, uruchom je w bazie i odpowiadaj na podstawie wyniku. LlamaIndex dokumentuje ten wzorzec text-to-SQL i radzi wskazywać tabele do odpytania, bo ładowanie wszystkich schematów może przepełnić kontekst; przy wielu tabelach najpierw pobiera właściwy schemat. Ten sam przewodnik ostrzega, że wykonywanie dowolnego SQL jest ryzykowne, i zaleca ograniczone role, bazy tylko do odczytu i sandboxing.

W praktyce dodajemy kolejne ograniczenia: rolę bazodanową widzącą tylko zatwierdzone widoki, filtry wierszy dla osoby pytającej, limity czasu i liczby wierszy. Dla pytań zadawanych co tydzień predefiniowane, sparametryzowane zapytania udostępnione jako narzędzia łatwiej przetestować niż dowolny SQL. Tak czy inaczej odpowiedź powinna pokazywać użyte zapytanie albo raport, wynik, liczbę wierszy i datę danych, żeby dało się ją sprawdzić.

Jeden eksport, pytanie po pytaniu

Poniższy przykład jest zmyślony. Jeden eksport sprzedaży zasila obie ścieżki: wiersze są indeksowane do wyszukiwania i ładowane do tabeli do zapytań.

Tabela kierowania pytań dla jednego źródła danych (hipotetyczna)
Source: monthly sales export, one row per order line (hypothetical)

Question                                           Route        Why
Discount on line 3 of order 48213?                 retrieval    one line row, found by
                                                                order ID + line number
Which region had the highest revenue in Q2?        query        aggregates every Q2 row
How many Polish orders totalled over 10,000 EUR?   query        sum line amounts per order,
                                                                then count distinct orders
                                                                above the threshold
Why is the Q2 figure lower than in the board pack? explain      needs the definitions note,
                                                                then a query to reconcile
Answer contract for "query":
  show the query or named report used, the result,
  the data timestamp and the row count it covered

Testuj router równie starannie jak obie ścieżki. Pytanie obliczeniowe skierowane do wyszukiwania zwraca wiarygodnie wyglądającą błędną liczbę, a taką trudniej zauważyć niż komunikat o błędzie.

Arkusze, które zachowują się jak dokumenty

Wiele arkuszy biznesowych nie jest tabelami. Mają scalone nagłówki, kilka tabel na jednym arkuszu, notatki wpisane w komórki i liczby, które istnieją dopiero po przeliczeniu formuł. Kilka kopii krąży mailem. Zanim podłączysz taki plik, ustal, która kopia jest obowiązująca i czy dane nie powinny najpierw trafić do prawdziwej tabeli ze zdefiniowanymi kolumnami. Takie uporządkowanie jest często warte więcej niż sam asystent.

Pytania

Czy model może sam liczyć?

Przy kilku liczbach często liczy dobrze, ale nie wiesz, kiedy się myli. Dokładne wyniki powinny pochodzić z bazy danych, dataframe albo narzędzia obliczeniowego, a model wybiera operację i objaśnia wynik.

Czy text-to-SQL można udostępnić wszystkim w firmie?

Tylko z tymi samymi regułami dostępu, które ludzie już mają. Uruchamiaj zapytania w roli ograniczonej do zatwierdzonych widoków tylko do odczytu, stosuj filtry wierszy dla użytkownika i loguj każde zapytanie. Jeśli tych kontroli nie ma, zacznij od predefiniowanych zapytań.

A co z tabelami w plikach PDF i Word?

Wyodrębniaj je jako tabele, a nie ciągły tekst. Analiza układu strony potrafi odtworzyć wiersze i nagłówki, a długie tabele rozciągnięte na kilka stron wymagają powtórzenia nagłówka w każdym chunku. Jeśli liczby służą też do obliczeń, załaduj je dodatkowo do magazynu strukturalnego, a dokument zachowaj jako dowód przy wyszukiwaniu wartości.

Porozmawiaj z inżynierem

Przyjdź z jednym zadaniem, które chcesz usprawnić. Rozmowa trwa 30 minut i nie wymaga dostępu do twoich systemów ani danych.

Rezerwacja odbywa się w Kalendarzu Google.

Wolisz najpierw napisać? Zostaw adres e-mail i kilka zdań, a odpowiemy, proponując terminy.

Przycisk przygotowuje e-mail w twoim własnym programie pocztowym, a wysyłasz go samodzielnie. Polityka prywatności (wersja robocza)