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