Files
2026-05-28 07:33:04 +00:00

55 lines
1.9 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Utility tools for the LangChain agent.
Two tools are exposed:
* ``search_knowledge_base`` semantic search in a Qdrant collection.
* ``add_to_knowledge_base`` add a document to the same collection.
Both use the :mod:`qdrant_store` module defined in this repository.
"""
from __future__ import annotations
import json
from typing import List, Dict
from langchain.tools import tool
from langchain_core.documents import Document
# Import the singleton store instance from qdrant_store.py
from .qdrant_store import store
# ---------------------------------------------------------------------------
@tool
def search_knowledge_base(query: str, max_results: int = 5) -> str:
"""Return a formatted string with the top *max_results* documents.
The function performs a semantic similarity search using Qdrant and returns
a humanreadable list. If no results are found an explanatory message is
returned.
"""
docs: List[Document] = store.similarity_search(query, k=max_results)
if not docs:
return "No relevant documents found."
lines: List[str] = []
for i, doc in enumerate(docs, start=1):
title = doc.metadata.get("title", f"doc{i}")
lines.append(f"{i}. {title}:\n{doc.page_content[:200]}{'...' if len(doc.page_content)>200 else ''}")
return "\n\n".join(lines)
# ---------------------------------------------------------------------------
@tool
def add_to_knowledge_base(content: str, title: str = "document") -> str:
"""Add a document to the knowledge base.
The function creates a :class:`langchain_core.documents.Document` with the
supplied ``content`` and optional ``title`` metadata. It then delegates to
:func:`qdrant_store.store.add_documents`.
"""
doc = Document(page_content=content, metadata={"title": title})
store.add_documents([doc])
return f"Added '{title}' to the knowledge base."
__all__ = ["search_knowledge_base", "add_to_knowledge_base"]