From fe57d862632d36cab57ecc7abc75e46229b6f8bb Mon Sep 17 00:00:00 2001 From: lonpatovaadelina Date: Wed, 3 Jun 2026 09:04:29 +0000 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B0:=201.=20=D0=92=20vectorstore.py=20=D0=B7=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B8=D1=82=D1=8C=20=D0=B8=D0=BC=D0=BF=D0=BE?= =?UTF-8?q?=D1=80=D1=82=20Ollama=20=D0=BD=D0=B0=20from=20langchain?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tools.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 tools.py diff --git a/tools.py b/tools.py new file mode 100644 index 0000000..b32b757 --- /dev/null +++ b/tools.py @@ -0,0 +1,22 @@ +from langchain.tools import tool +from langchain_community.vectorstores import Chroma +from langchain_ollama import OllamaEmbeddings +from langchain_tavily import TavilySearchResults +import os + +@tool +def search_local_kb(query: str, top_k: int = 3) -> str: + """Поиск в локальной базе знаний (ChromaDB) по запросу.""" + persist_directory = "./chroma_db" + embeddings = OllamaEmbeddings(model="nomic-embed-text") + vectorstore = Chroma(persist_directory=persist_directory, embedding_function=embeddings) + retriever = vectorstore.as_retriever(search_kwargs={"k": top_k}) + docs = retriever.get_relevant_documents(query) + return "\n\n".join([doc.page_content for doc in docs]) + +@tool +def web_search(query: str) -> str: + """Поиск в интернете через Tavily.""" + search = TavilySearchResults() + results = search.run(query) + return "\n\n".join([result.get("content", "") for result in results]) \ No newline at end of file