Zadanie
📝 **Pytanie:** **Napisz funkcję** \`retrieval_cost(strategy, total_docs)\`, która zwraca \`(cost_usd, latency_ms)\` dla dwóch strategii, biorąc pod uwagę następujące koszty jednostkowe:
- **BM25/skan wektorowy** — \`0,00001$\` na punktowany dokument, \`1ms\` na dokument
- **Reranking (koder krzyżowy)** — \`0,001 $\` na parę (zapytanie, dokument), \`50ms\` na parę
Dwie strategie:
- \`"Tylko do ponownej rangi"\` — zmień rangę KAŻDEGO dokumentu w korpusie
- \`"dwuetapowy"\` — BM25 skanuje wszystkie dokumenty, a następnie ponownie ocenia **50** najlepszych kandydatów
Zaokrąglij koszt do 4 miejsc po przecinku. Następnie wydrukuj księgę przy 100, 10 tys. i 1 mln dokumentów:
\`\`\`
100 dokumentów | tylko reranking $ 0,1000 5000ms | dwustopniowy 0,0510 $ 2600ms
10000 dokumentów | tylko zmiana rankingu 10,0000 $ 500000ms | dwustopniowy 0,1500 $ 12500ms
1000000 dokumentów | tylko zmiana rankingu 1000,0000 $ 50000000ms | dwustopniowy 10,0500 $ 1002500ms
\`\`\`
Przy 1 milionie dokumentów samo ponowne ustawienie rankingu będzie kosztować **1000 USD** i zajmie **14 godzin** na każde zapytanie. Dwustopniowy koszt wynosi około 10 USD i 17 minut — a wzrost jakości jest porównywalny, ponieważ BM25 już wstępnie przefiltrował oczywiste śmieci. Ta luka jest powodem, dla którego każda wyszukiwarka produkcyjna korzysta z lejka.
📋 Wybierz właściwą odpowiedź.
💡 **Wskazówka:** Jeśli nie jesteś pewien, przeczytaj ponownie powyższą teorię.