Budowa chatbota CLI
3. Pierwszy chatbot bez dokumentów
Lokalne chatboty, agenci i systemy RAG z własną bazą wiedzy
Instrukcja krok po kroku · materiał uzupełniający
Budujemy chatbota w konsoli
Działający czat konsolowy
Zbuduj pierwszą pętlę: wczytaj wiadomość, wywołaj model, pokaż odpowiedź i poczekaj na kolejną wiadomość.
Utwórz czat_llm.py
Zapisz poniższy kod w pliku czat_llm.py, obok lokalny.py. Nazwa po import odpowiada plikowi bez rozszerzenia. Wcięcia w Pythonie są częścią programu; kopiuj cały blok.
"""Pierwszy czat: bez dokumentów, z historią maksymalnie trzech par tur."""
from lokalny import CONFIG, chat, require_models
def main():
require_models([CONFIG["chat_model"]])
history = []
system = {"role": "system", "content": "Odpowiadaj krótko po polsku."}
print("Czat bez dokumentów. /clear czyści historię, /exit kończy.")
while True:
try:
question = input("Ty: ").strip()
except (EOFError, KeyboardInterrupt):
print("\nKoniec.")
break
if question.casefold() == "/exit":
break
if question.casefold() == "/clear":
history.clear()
print("Nowa rozmowa.")
continue
if not question or len(question) > CONFIG["question_chars"]:
print("Wpisz pytanie o długości 1–1000 znaków.")
continue
user = {"role": "user", "content": question}
try:
result = chat([system, *history, user])
answer = result["message"]["content"]
except (RuntimeError, ValueError, KeyError) as exc:
print("Błąd:", exc)
continue
print("Bot:", answer)
if result.get("done_reason") == "length":
print("Uwaga: odpowiedź mogła zostać ucięta przez limit generowania.")
history = (history + [user, {"role": "assistant", "content": answer}])[-6:]
if __name__ == "__main__":
main()Uruchom i sprawdź
.\.venv\Scripts\python.exe czat_llm.py- Wpisz:
Wyjaśnij jednym zdaniem, czym jest RAG. - Zadaj pytanie uzupełniające:
Podaj prosty przykład.Tutaj trzy ostatnie pary wiadomości są przekazywane modelowi. - Wpisz
/clear, a potem ponownie pytanie uzupełniające. Porównaj odpowiedzi. - Wpisz
/exit, aby wrócić do terminala.
Co robi pętla
input() zatrzymuje program do czasu wpisania wiadomości. while True powtarza obsługę. break kończy rozmowę. Historia jest listą ról user i assistant; jest przekazywana ponownie przy każdym żądaniu. Sam model nie pamięta między niezależnymi wywołaniami API.
Warto wiedzieć. Limit trzech par wiadomości ogranicza historię liczbą tur, a nie liczbą tokenów. Długie wiadomości nadal mogą przekroczyć okno modelu. W finalnym RAG nie przekazujemy tej historii jako źródła wiedzy.
Punkt kontrolny
- Możesz zadać dwa pytania, wyczyścić historię i zakończyć program.
- Pusta wiadomość nie uruchamia modelu.
- Potrafisz wskazać miejsce, w którym program ogranicza historię.
Instrukcja uczestnika · Python i Ollama · wydanie 29.09.2026