add tools.py

This commit is contained in:
2026-06-04 16:27:33 +00:00
parent 5e29ed8e20
commit 9dff79279b
+88
View File
@@ -0,0 +1,88 @@
"""Инструменты FAQ‑бота: поиск в ChromaDB + MCPstyle tool метаданных курса."""
import json
from langchain.tools import tool
from vectorstore import similarity_search
@tool
def search_course_docs(query: str, k: int = 3) -> str:
"""Поиск по конспектам курса в локальной базе ChromaDB.
Используй для вопросов о технологиях курса: LangChain, LangGraph, MCP,
агентах, инструментах, концепциях, примерах кода.
Args:
query: поисковый запрос
k: количество результатов (по умолчанию 3)
Returns:
релевантные отрывки из конспектов с указанием источника
"""
docs = similarity_search(query, k=k)
if not docs:
return "[source: chroma] Релевантные документы не найдены."
parts = []
for i, doc in enumerate(docs, 1):
src = doc.metadata.get("source", "unknown")
parts.append(f"{i}. [{src}]\n{doc.page_content}")
return "[source: chroma]\n\n" + "\n\n".join(parts)
@tool
def fetch_course_meta(query: str) -> str:
"""Получить метаданные курса: расписание, дедлайны, контакты, глоссарий.
Имитирует MCPstyle tool call к серверу метаданных курса.
В production‑среде это был бы вызов через MCP tool list/call.
Используй для вопросов о расписании, сроках сдачи, контактах, терминах.
Args:
query: что именно нужно (schedule/deadlines/contacts/glossary)
Returns:
метаданные курса с указанием источника [source: mcp_meta]
"""
COURSE_META = {
"schedule": {
"Понедельник": "10:00-12:00 — LangChain основы",
"Среда": "14:00-16:00 — LangGraph практика",
"Пятница": "10:00-12:00 — Разбор проектов",
},
"deadlines": {
"ДЗ-1 LangChain basics": "2026-06-15 23:59",
"ДЗ-2 LangGraph agents": "2026-06-22 23:59",
"Финальный проект": "2026-07-04 23:00",
},
"contacts": {
"Преподаватель": "professor@brojs.ru",
"Ассистент": "assistant@brojs.ru",
"Платформа": "platform.brojs.ru",
},
"glossary": {
"LangChain": "Фреймворк для LLM-приложений",
"LangGraph": "Граф‑based агентный фреймворк",
"ChromaDB": "Векторная база данных для эмбеддингов",
"MCP": "Model Context Protocol — стандарт интеграции инструментов",
"RAG": "Retrieval-Augmented Generation",
"Embeddings": "Векторные представления текста",
},
}
q = query.lower()
if any(w in q for w in ["расписание", "schedule", "занятия", "когда", "пары"]):
data = COURSE_META["schedule"]
note = "(В проде: MCP tool call к серверу расписания)"
elif any(w in q for w in ["дедлайн", "deadline", "сдать", "срок", "когда сдавать"]):
data = COURSE_META["deadlines"]
note = "(В проде: MCP tool call к трекеру дедлайнов)"
elif any(w in q for w in ["контакт", "почта", "email", "преподаватель", "ассистент"]):
data = COURSE_META["contacts"]
note = "(В проде: MCP tool call к справочнику контактов)"
elif any(w in q for w in ["глоссарий", "glossary", "что значит", "термин", "определение"]):
data = COURSE_META["glossary"]
note = "(В проде: MCP tool call к глоссарию курса)"
else:
data = COURSE_META
note = "(В проде: MCP tool call к серверу метаданных курса)"
return f"[source: mcp_meta] {note}\n{json.dumps(data, ensure_ascii=False, indent=2)}"