# Zbuduj bazę wiedzy chatbota poprzez scrapowanie strony: Crawlowanie, dzielenie, cytowanie

Bot wsparcia jest tak dobry, jak to, czym go zasilisz. Skieruj go na swoją stronę — dokumentację, FAQ, centrum pomocy — poprzez crawlowanie do czystego markdown i dzielenie na fragmenty do odzyskiwania. Oto pipeline, który utrzymuje odpowiedzi ugruntowane i cytowane.

Chatbot wsparcia jest tak dobry, jak to, czym go zasilisz, a najlepszym źródłem jest zazwyczaj Twoja własna strona — dokumentacja, FAQ i artykuły z centrum pomocy, które już utrzymujesz. Problem polega na tym, że bot nie czyta strony tak jak człowiek; potrzebuje czystego, podzielonego, możliwego do odzyskania tekstu z dołączonym źródłem do każdego fragmentu. Ten przewodnik to pełny pipeline: crawl strony do markdown, dzielenie, osadzanie w magazynie wektorów i odzyskiwanie cytowanego kontekstu w momencie zapytania — ugruntowana baza wiedzy, która pozostaje dokładna w miarę zmian na Twojej stronie.

## Dlaczego RAG, a nie fine-tune

Możesz dostroić model do swojej treści, ale dla bota wsparcia to niewłaściwe narzędzie: ponowne trenowanie jest powolne, kosztowne i przestaje być aktualne w momencie edycji dokumentu. Retrieval-augmented generation (RAG) utrzymuje wiedzę poza modelem — dziel swoją treść, osadzaj ją, a w momencie pytania odzyskuj najbardziej istotne fragmenty i przekazuj je modelowi jako kontekst. Zaktualizuj dokument, ponownie crawl, a wiedza bota aktualizuje się wraz z nim. Zapotrzebowanie jest realne: rynek chatbotów ma rosnąć w tempie 23,3% CAGR do 2030 roku, badanie KPMG wykazało, że 69% ludzi już używa chatbotów, a badanie Stanford i MIT na 5,179 agentach wsparcia wykazało średni wzrost produktywności o 14% dzięki generatywnej pomocy AI — 35% dla nowych agentów.

## Krok 1: crawl strony do czystego markdown

Podawanie surowego HTML do pipeline RAG zatruwa go nawigacją, banerami cookie i tagami skryptów. Zamiast tego crawl bezpośrednio do markdown — zachowuje nagłówki, listy i tabele, jednocześnie eliminując szum prezentacyjny, co jest dokładnie tym, co LLM najlepiej przyswaja. [Scraper API](https://quantumproxies.io/scraper-api) z trybem crawl przechodzi przez stronę i zwraca każdą stronę jako czysty markdown:

```python
import time
import requests

API = "https://api.quantumproxies.io/v1/scraper/crawl"
HEAD = {"Authorization": "Bearer YOUR_API_KEY"}

# the crawl runs as a background job: start it, then poll until it is done
job = requests.post(
    API,
    json={"url": "https://docs.example.com", "limit": 300, "format": "markdown"},
    headers=HEAD,
    timeout=120,
).json()["payload"]

pages, since = [], 0
while True:
    job = requests.get(f"{API}/{job['id']}", params={"since": since},
                       headers=HEAD, timeout=120).json()["payload"]
    pages += [{"url": p["url"], "markdown": p.get("content", "")} for p in job["pages"]]
    since = job["nextCursor"]
    if job["status"] != "running" and not job["hasMore"]:
        break
    time.sleep(10)
# pages: each {"url": ..., "markdown": ...}
```

Crawlowanie własnej strony jest proste; crawlowanie dokumentów za ograniczeniami geograficznymi lub limitami szybkości to miejsce, gdzie znaczenie ma routing przez odpowiednie IP, aby crawl zakończył się zamiast zatrzymać w połowie. Markdown-first to ta sama zasada, co [zasilanie LLM świeżymi danymi z sieci](https://quantumproxies.io/blog/feeding-llms-fresh-web-data-2026).

## Krok 2: dzielenie według nagłówków, zachowaj źródło

Nie osadzaj całych stron — odzyskiwanie działa najlepiej na skoncentrowanych fragmentach. Podziel każdą stronę według jej nagłówków, aby każdy fragment był jednym spójnym tematem, i dołącz URL źródła do każdego, aby móc go później cytować. To także miejsce, gdzie dobry dokument źródłowy się opłaca: artykuły z wyraźnymi nagłówkami, jedna idea każda, i pytania powtórzone w tekście dzielą się znacznie lepiej niż ściana tekstu (bot nie może wywnioskować kontekstu, który zrozumiałby człowiek):

```python
def chunk_markdown(md, source_url):
    chunks, cur = [], {"heading": "", "text": ""}
    for line in md.splitlines():
        if line.startswith("#"):
            if cur["text"].strip():
                chunks.append({**cur, "source": source_url})
            cur = {"heading": line.lstrip("# ").strip(), "text": ""}
        else:
            cur["text"] += line + "\n"
    if cur["text"].strip():
        chunks.append({**cur, "source": source_url})
    return chunks

all_chunks = [c for p in pages for c in chunk_markdown(p["markdown"], p["url"])]
```

![Pipeline RAG, który zamienia stronę internetową w bota wsparcia: przeszukaj stronę do czystego markdown, podziel każdą podstronę na fragmenty według nagłówków razem z jej źródłowym URL, osadź fragmenty w wektorowej bazie danych, a potem w czasie zapytania pobierz cztery najlepsze i zacytuj je; karta pokazuje, co zawiera każdy fragment: nagłówek, tekst, źródło i datę pobrania.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335216/blog/generated/qp-b9-090-diag1.png)
*Odzyskuj cytowane fragmenty w momencie zapytania zamiast wpychać całą stronę do promptu — ugruntowane i sprawdzalne.*

## Krok 3: osadzanie, przechowywanie i odzyskiwanie z cytatami

Osadź każdy fragment w wektorze i wstaw go do bazy danych wektorów z URL źródła jako metadanymi. W momencie zapytania osadź pytanie użytkownika, wyciągnij kilka najlepszych dopasowań i przekaż ich tekst modelowi jako kontekst — i wyświetl linki źródłowe, aby odpowiedź była sprawdzalna, a nie czarną skrzynką:

```python
# index each chunk with its source as metadata
for c in all_chunks:
    vec = embed(c["heading"] + "\n" + c["text"])
    index.upsert(id=uid(c), values=vec,
                 metadata={"source": c["source"], "text": c["text"]})

# at query time: retrieve, ground, and cite
hits = index.query(embed(user_question), top_k=4)
context = "\n\n".join(h.metadata["text"] for h in hits)
citations = list({h.metadata["source"] for h in hits})
answer = llm(f"Answer using only this context:\n{context}", question=user_question)
```

Ugruntowanie modelu w odzyskanym kontekście — i nakazanie mu odpowiadania tylko z tego kontekstu — to to, co powstrzymuje bota wsparcia przed pewnym wymyślaniem polityki. Cytaty pełnią podwójną rolę: pozwalają użytkownikom weryfikować i pozwalają zauważyć, kiedy bot sięga po niewłaściwy dokument. Dla głębszej mechaniki, nasz przewodnik po [pipeline RAG, które nie są przestarzałe](https://quantumproxies.io/blog/fresh-web-data-rag-pipelines) idzie dalej w dzielenie i odzyskiwanie.

## Krok 4: odświeżanie, inaczej się psuje

Baza wiedzy to żywy organizm. Dokumenty są przepisywane, ceny się zmieniają, pojawiają się nowe artykuły — a bot odpowiadający z zeszłomiesięcznego crawl daje błędne odpowiedzi z pełnym przekonaniem. Zaplanuj ponowne crawlowanie, porównaj każdą stronę z jej ostatnią wersją i ponownie osadź tylko to, co się zmieniło, aby odświeżanie pozostało tanie. Zachowaj datę pobrania na każdym fragmencie, aby zawsze wiedzieć, jak aktualne jest źródło odpowiedzi. Jeśli wolisz korzystać z zarządzanego, zawsze świeżego źródła danych niż samodzielnie prowadzić crawl i odświeżanie, [dane sieciowe zbudowane dla LLM](https://quantumproxies.io/web-data-for-llms) zajmują się stroną zbierania.

![Słupki z badania Stanford i MIT obejmującego 5 179 agentów wsparcia: pomoc generatywnej AI zwiększyła produktywność średnio o 14%, a u najnowszych agentów o 35%; karta pokazuje, że według badania KPMG 69% ludzi już korzysta z chatbotów, a rynek chatbotów ma rosnąć w tempie 23,3% CAGR do 2030 roku.](https://res.cloudinary.com/dmqliab0t/image/upload/f_auto,q_auto,w_1200/v1785335216/blog/generated/qp-b9-090-diag2.png)
*Przesunięcie w kierunku botów wsparcia jest w pełnym toku; ugruntowana, cytowana baza wiedzy to to, co czyni ją godną zaufania.*

[Crawl dowolnej strony do czystego markdown dla swojego bota](https://quantumproxies.io/scraper-api)

## Najczęściej zadawane pytania

### Jak zbudować bazę wiedzy chatbota ze strony?

Crawl strony do czystego markdown, podziel każdą stronę na fragmenty oparte na nagłówkach z dołączonym URL źródła, osadź fragmenty w bazie danych wektorów, a w momencie zapytania odzyskaj najbardziej istotne fragmenty, aby ugruntować odpowiedź modelu. Zaplanuj ponowne crawlowanie, aby utrzymać aktualność. Podejście RAG oznacza, że edytowanie dokumentu aktualizuje wiedzę bota bez potrzeby ponownego trenowania.

### Czy muszę trenować model na swojej treści?

Nie — i dla bota wsparcia nie powinieneś. Fine-tuning jest powolny, kosztowny i przestaje być aktualny, gdy tylko zmienia się Twoja treść. Retrieval-augmented generation utrzymuje wiedzę w magazynie wektorów poza modelem, więc bot zawsze odpowiada z aktualnego crawl. Musisz tylko ponownie crawlować i osadzać, gdy zmienia się treść, co jest znacznie tańsze niż ponowne trenowanie.

### Dlaczego crawl do markdown zamiast HTML?

Surowy HTML niesie nawigację, reklamy, banery cookie i skrypty, które dodają szumu i marnują Twój budżet osadzania. Markdown zachowuje znaczącą strukturę — nagłówki, listy, tabele — jednocześnie eliminując warstwę prezentacyjną, co LLM najlepiej przyswaja. Czystsze dane wejściowe oznaczają bardziej trafne odzyskiwanie i mniej mylących odpowiedzi. Boty także nie mogą czytać obrazów ani wideo, więc kluczowe informacje trzymaj w tekście.

### Jak utrzymać bazę wiedzy aktualną?

Zaplanuj okresowe ponowne crawlowanie, wykryj, które strony się zmieniły, i ponownie osadź tylko te — pełne ponowne crawlowanie marnuje przepustowość i zasoby obliczeniowe. Przechowuj datę pobrania na każdym fragmencie, aby móc określić, jak świeże jest źródło odpowiedzi, i wersjonuj indeks, aby móc cofnąć się, jeśli zły crawl pogorszy odzyskiwanie. Inkrementalne odświeżanie utrzymuje koszty proporcjonalne do rzeczywistych zmian.

Pipeline to tutaj produkt: crawl do markdown, dzielenie według nagłówków, osadzanie ze źródłami, odzyskiwanie i cytowanie, a następnie odświeżanie zgodnie z harmonogramem. Zrób to, a Twój bot wsparcia odpowiada z Twojej rzeczywistej treści, linkuje swoje źródła i pozostaje aktualny w miarę ewolucji Twojej strony — różnica między botem, któremu ludzie ufają, a takim, którego uczą się omijać. Aby dać agentowi AI dostęp na żywo do tych samych danych przez standardowy interfejs, zobacz nasz przewodnik po [QuantumProxies MCP server](https://quantumproxies.io/blog/giving-ai-agents-live-web-access-with-mcp-a-practical-guide-to-the-quantumproxies-io-mcp-server).

[Zasilaj swojego bota zawsze świeżymi danymi z sieci](https://quantumproxies.io/web-data-for-llms)
