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
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.
- Na początku zresetuj tool_attempted. Przygotuj wynik i funkcję kończącą finish, która ustawia status, zapisuje pamięć i zwraca wynik.
- Sprawdź wejście i dozwolony selektor. Puste lub zbyt długie pytanie zakończ jako rejected.
- 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.
- Rozwiń dopowiedzenie z historii. Jeśli resolver prosi o doprecyzowanie, zakończ turę przed wyborem narzędzia.
- Pobierz propozycję z reguł albo modelu. Zachowaj ślad selektora. Odróżnij błąd selektora od decyzji o doprecyzowaniu.
- Dla answer_from_documents zaakceptuj tylko puste argumenty selektora i sam dopisz question=standalone_question.
- 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ł.
- Zakończ każdą ścieżkę przez finish, aby pamięć i numeracja tur pozostały spójne.
| Status końcowy | Jak go interpretować |
|---|---|
| answered | Powstał wynik: odpowiedź, metadane albo lista źródeł. Jakość treści nadal wymaga oceny. |
| clarification_needed | Potrzebna dodatkowa informacja od użytkownika. |
| rejected | Wejście lub działanie nie spełnia kontraktu. |
| insufficient_context | RAG nie wybrał żadnego fragmentu do kontekstu. |
| error | Błą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 -vMateriał uzupełniający do modułów 1–6 · wersja 1.0 · 30.09.2026