add tools.py

This commit is contained in:
2026-05-28 07:33:04 +00:00
parent fcd621f85e
commit c43bbd68d2
+54
View File
@@ -0,0 +1,54 @@
"""
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"]