8. Самописный поисковый агент на основе deep agents from scratch: client.py

This commit is contained in:
2026-05-27 15:38:05 +00:00
parent a0f8725d7f
commit f504eeb9a1
@@ -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__":