Budowa asystenta dokumentów

6. Połączenie elementów w jedną turę

Lokalne chatboty, agenci i systemy RAG z własną bazą wiedzy

Praktyka po kursie · bez GUI

Asystent dokumentów w konsoli

Od działającego RAG do rozmowy i kontrolowanych narzędzi

Orientacyjny czas: 35 min · Tryb pracy: najpierw własna próba, potem przykład

Otwórz asystent.py i uzupełnij krok. To centralna funkcja projektu. Konsola i ewaluacja będą używać dokładnie tej samej funkcji, dzięki czemu testy sprawdzą zachowanie uruchamiane później przez uczestnika.

Kontrakt funkcji krok

Wejście obejmuje wiadomość, stan rozmowy, fragmenty, indeks, katalog dokumentów i nazwę selektora. Funkcja zwraca jeden wynik i aktualizuje przekazany stan. Wynik ma zawierać m.in. conversation_id, turn_id, result_id, original_question, standalone_question, history_used, status, answer, decision, tool, rag, sources i source_origin.

  1. Na początku zresetuj tool_attempted. Przygotuj wynik i funkcję kończącą finish, która ustawia status, zapisuje pamięć i zwraca wynik.
  2. Sprawdź wejście i dozwolony selektor. Puste lub zbyt długie pytanie zakończ jako rejected.
  3. Obsłuż jawne prośby o operacje poza zakresem, brak jednego ID przy metadanych oraz prośbę o źródła bez wcześniejszego RAG. Te kontrole nie wymagają modelu.
  4. Rozwiń dopowiedzenie z historii. Jeśli resolver prosi o doprecyzowanie, zakończ turę przed wyborem narzędzia.
  5. Pobierz propozycję z reguł albo modelu. Zachowaj ślad selektora. Odróżnij błąd selektora od decyzji o doprecyzowaniu.
  6. Dla answer_from_documents zaakceptuj tylko puste argumenty selektora i sam dopisz question=standalone_question.
  7. Wywołaj wykonaj dokładnie raz. Przenieś status, dane i źródła do wyniku. Dla show_last_sources zachowaj pierwotny numer tury źródeł.
  8. Zakończ każdą ścieżkę przez finish, aby pamięć i numeracja tur pozostały spójne.
Status końcowyJak go interpretować
answeredPowstał wynik: odpowiedź, metadane albo lista źródeł. Jakość treści nadal wymaga oceny.
clarification_neededPotrzebna dodatkowa informacja od użytkownika.
rejectedWejście lub działanie nie spełnia kontraktu.
insufficient_contextRAG nie wybrał żadnego fragmentu do kontekstu.
errorBłąd połączenia, generacji, selektora lub wykonania.

Odmowa tekstowa a status: jeśli RAG dostał fragmenty, lecz model odpowiedział „W dokumentach nie ma informacji o TLS”, status może wynosić answered. Oznacza to zakończoną generację, a nie potwierdzenie obecności odpowiedzi w źródłach. insufficient_context oznacza tutaj brak przyjętych fragmentów przed generacją.

python -m unittest sprawdz.Przeplyw -v

Materiał uzupełniający do modułów 1–6 · wersja 1.0 · 30.09.2026