From ab84281a50faa291d6ea83103a5eea2e0657686e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=90=D0=B4=D0=B5=D0=BB=D0=B8=D0=BD=D0=B0=20=D0=A1=D0=B0?= =?UTF-8?q?=D1=82=D1=82=D0=B0=D1=80=D0=BE=D0=B2=D0=B0?= Date: Mon, 1 Jun 2026 16:47:45 +0000 Subject: [PATCH] add tools --- tools.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 tools.py diff --git a/tools.py b/tools.py new file mode 100644 index 0000000..4a61cb3 --- /dev/null +++ b/tools.py @@ -0,0 +1,20 @@ +from langchain.tools import tool +from langchain.embeddings.ollama import OllamaEmbeddings +from langchain.vectorstores import Chroma +import os + +@tool("search_local_kb") +def search_local_kb(query: str, top_k: int = 3) -> str: + """Semantic search in local ChromaDB.""" + persist_dir = os.getenv("CHROMA_DB_DIR", "./chroma_db") + embeddings = OllamaEmbeddings(model="nomic-embed-text") + db = Chroma(embedding_function=embeddings, persist_directory=persist_dir) + docs = db.similarity_search(query, k=top_k) + return "\n".join([d.page_content for d in docs]) + f"\n[Source: chromadb]" + +@tool("web_search") +def web_search(query: str) -> str: + from tavily import TavilyClient + client = TavilyClient(api_key=os.getenv("TAVILY_API_KEY")) + result = client.search(query, max_results=3) + return "\n".join([r['content'] for r in result]) + f"\n[Source: tavily]"