From b7ab0cbea48cde24ac4dc7e7f929f3f85ebf2a5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=B8=D0=BB=20=D0=92=D0=B8=D0=BA?= =?UTF-8?q?=D1=82=D0=BE=D1=80=D0=BE=D0=B2?= Date: Thu, 2 Jul 2026 09:38:02 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20tools.py=20=E2=80=94=20=D0=AD=D0=BA?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD:=20RAG-=D0=B0=D0=B3=D0=B5=D0=BD?= =?UTF-8?q?=D1=82=20=D1=81=20ChromaDB=20=D0=B8=20=D0=B2=D0=B5=D0=B1-=D0=BF?= =?UTF-8?q?=D0=BE=D0=B8=D1=81=D0=BA=D0=BE=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools.py | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tools.py diff --git a/tools.py b/tools.py new file mode 100644 index 0000000..b33c855 --- /dev/null +++ b/tools.py @@ -0,0 +1,28 @@ +import os +from langchain.tools import tool +from langchain_tavily import TavilySearchResults +from langchain_chroma import Chroma + +@tool +def search_local_kb(query: str, top_k: int = 3) -> str: + """Search the local knowledge base for relevant information.""" + vectorstore = Chroma( + collection_name="knowledge", + persist_directory="./chroma_db", + ) + docs = vectorstore.similarity_search(query, k=top_k) + if not docs: + return "No results found in local knowledge base." + return "\n".join(f\"{i+1}. {doc.page_content[:200]}...\" for i, doc in enumerate(docs)) + +@tool +def web_search(query: str) -> str: + """Search the web for up-to-date information.""" + tavily = TavilySearchResults( + api_key=os.getenv("TAVILY_API_KEY"), + max_results=3, + ) + results = tavily.run(query) + if not results: + return "No results found on the web." + return "\n".join(f\"{i+1}. {res['title']}\\n{res['url']}\\n{res['content'][:200]}...\" for i, res in enumerate(results)) \ No newline at end of file