diff --git a/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/client.py b/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/client.py index 6fcc81d..6f77200 100644 --- a/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/client.py +++ b/solutions/69de7223f309a98be0007e09_8__Самописный_поисковый_агент_на_основе_/client.py @@ -9,6 +9,12 @@ from langchain_core.documents import Document from langchain_core.prompts import PromptTemplate from langchain.chains import RetrievalQA +# Импортируем rich для красивого вывода +from rich.console import Console +from rich.markdown import Markdown + +console = Console() + # Конфигурация подключения к Qdrant (используем локальный сервер по умолчанию) QDRANT_URL = os.getenv("QDRANT_URL", "http://localhost:6333") COLLECTION_NAME = "documents" @@ -53,7 +59,7 @@ def add_document(text: str) -> None: """ doc = Document(page_content=text) vector_store.add_documents([doc]) - print("Документ добавлен.") + console.print("[green]Документ добавлен.[/green]") def search(query: str) -> None: @@ -63,11 +69,13 @@ def search(query: str) -> None: result = qa_chain({"question": query}) answer = result["answer"] sources = result.get("source_documents", []) - print("\nОтвет:\n" + answer) + console.print("\n[bold]Ответ:[/bold]\n") + console.print(Markdown(answer)) if sources: - print("\nИсточники:") + console.print("\n[bold]Источники:[/bold]") for i, src in enumerate(sources, 1): - print(f"{i}. {src.page_content[:200]}...") + snippet = src.page_content[:200] + console.print(f"{i}. {snippet}...") def print_help() -> None: @@ -81,20 +89,20 @@ def print_help() -> None: /quit - Выйти из программы /help - Показать эту справку """ - print(help_text) + console.print(Markdown(help_text)) def main() -> None: """ Основной цикл CLI. """ - print("=== Самописный поисковый агент ===") + console.print("[bold cyan]=== Самописный поисковый агент ===[/bold cyan]") print_help() while True: try: user_input = input("\n> ").strip() except (EOFError, KeyboardInterrupt): - print("\nВыход.") + console.print("\n[red]Выход.[/red]") break if not user_input: @@ -107,28 +115,28 @@ def main() -> None: if cmd == "/add": if not arg: - print("Ошибка: необходимо указать текст для добавления.") + console.print("[red]Ошибка: необходимо указать текст для добавления.[/red]") else: add_document(arg) elif cmd == "/search": if not arg: - print("Ошибка: необходимо указать поисковый запрос.") + console.print("[red]Ошибка: необходимо указать поисковый запрос.[/red]") else: search(arg) elif cmd == "/quit": - print("Выход.") + console.print("Выход.") break elif cmd == "/help": print_help() else: - print(f"Неизвестная команда '{cmd}'. Введите /help для справки.") + console.print(f"[yellow]Неизвестная команда '{cmd}'. Введите /help для справки.[/yellow]") else: - print("Команды начинаются с '/'. Введите /help для списка команд.") + console.print("[yellow]Команды начинаются с '/'. Введите /help для списка команд.[/yellow]") if __name__ == "__main__":