250 lines
11 KiB
Python
250 lines
11 KiB
Python
"""
|
||
===============================================================================
|
||
FILE: modules/web_api/llm/schemas.py
|
||
PROJECT: SCUD Orion AI (Unified Architecture)
|
||
MODULE: web_api / llm
|
||
ROLE: Декларативная схема нативных инструментов (Function Calling) для Ollama.
|
||
|
||
AI-CONTEXT-ANCHORS:
|
||
- ANCHOR[SCHEMA_PROMPT_EDIT]: Схема управления узлами системного промпта.
|
||
- ANCHOR[SCHEMA_TASKS_EDIT]: Консолидированная схема управления задачами.
|
||
- ANCHOR[SCHEMA_SNAPSHOTS]: Схема доступа к логам и срезам СКУД.
|
||
===============================================================================
|
||
"""
|
||
|
||
# ANCHOR[SCHEMA_PROMPT_EDIT]
|
||
TOOLS_SCHEMA = [
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_prompt_node_edit",
|
||
"description": (
|
||
"Управление элементами системного промпта (добавление, изменение, удаление пунктов).\n"
|
||
"Поддерживает как одиночные пункты (section_id, item_id), так и список пунктов для удаления (nodes_list=['1.8', '3.4']).\n"
|
||
"При любом запросе на удаление или добавление пунктов системного промпта ТЫ ОБЯЗАН вызвать этот инструмент."
|
||
),
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"action": {
|
||
"type": "string",
|
||
"enum": ["ADD", "EDIT", "DELETE", "BATCH_DELETE"],
|
||
"description": "Тип действия"
|
||
},
|
||
"section_id": {
|
||
"type": "integer",
|
||
"description": "Номер раздела (например 1)"
|
||
},
|
||
"item_id": {
|
||
"type": "integer",
|
||
"description": "Номер пункта (например 8)"
|
||
},
|
||
"nodes_list": {
|
||
"type": "array",
|
||
"items": {"type": "string"},
|
||
"description": "Список пунктов для удаления/изменения, например ['1.8', '3.4']"
|
||
},
|
||
"content": {
|
||
"type": "string",
|
||
"description": "Текст пункта"
|
||
}
|
||
},
|
||
"required": ["action"]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_system_prompt",
|
||
"description": "Просмотр текущего активного системного промпта ассистента из базы данных.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {}
|
||
}
|
||
}
|
||
},
|
||
# ANCHOR[SCHEMA_TASKS_EDIT]
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_tasks",
|
||
"description": (
|
||
"Просмотр реестра задач и бэклога текущего пользователя.\n"
|
||
"Вызывай этот инструмент ВСЕГДА при любых запросах просмотра задач ('покажи задачи', 'мои задачи', опечатки 'змдачи').\n"
|
||
"Запрещено переспрашивать статус или параметры текстом: просто вызывай функцию с аргументами {}."
|
||
),
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"status": {
|
||
"type": "string",
|
||
"enum": ["ALL", "IN_PROGRESS", "PLANNED", "COMPLETED"],
|
||
"description": "Опциональный фильтр статуса задач (по умолчанию ALL)"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_tasks_edit",
|
||
"description": (
|
||
"Единый инструмент управления задачами: создание (ADD), изменение статуса/срока/названия (UPDATE), удаление (DELETE) и экспорт (EXPORT).\n"
|
||
"СТРОГИЕ ПРАВИЛА ВЫЗОВА:\n"
|
||
"- На любые фразы вида 'удали задачу N', 'удалить N', 'убери задачу N' ТЫ ОБЯЗАН СРАЗУ вызвать инструмент с action='DELETE', task_id='N'.\n"
|
||
"- На фразы 'возьми в работу N' вызывай action='UPDATE', task_id='N', status='IN_PROGRESS'.\n"
|
||
"- На фразы 'заверши N', 'готово N' вызывай action='UPDATE', task_id='N', status='COMPLETED'.\n"
|
||
"- КАТЕГОРИЧЕСКИ ЗАПРЕЩЕНО писать текстовые вопросы или запрашивать подтверждения словами! ТЫ ОБЯЗАН СРАЗУ вызвать инструмент."
|
||
),
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"action": {
|
||
"type": "string",
|
||
"enum": ["ADD", "UPDATE", "DELETE", "EXPORT"],
|
||
"description": "Тип действия: ADD, UPDATE, DELETE или EXPORT"
|
||
},
|
||
"task_id": {
|
||
"type": "string",
|
||
"description": "Номер задачи (например: '37')"
|
||
},
|
||
"title": {
|
||
"type": "string",
|
||
"description": "Описание или текст задачи"
|
||
},
|
||
"status": {
|
||
"type": "string",
|
||
"enum": ["IN_PROGRESS", "COMPLETED", "BACKLOG"],
|
||
"description": "Новый статус задачи: IN_PROGRESS (В работу), COMPLETED (Завершено), BACKLOG (В планы)"
|
||
},
|
||
"priority": {
|
||
"type": "string",
|
||
"enum": ["LOW", "MEDIUM", "HIGH", "CRITICAL"],
|
||
"description": "Приоритет задачи"
|
||
},
|
||
"module": {
|
||
"type": "string",
|
||
"description": "Модуль проекта"
|
||
},
|
||
"due_date": {
|
||
"type": "string",
|
||
"description": "Срок в формате ГГГГ-ММ-ДД"
|
||
},
|
||
"filename": {
|
||
"type": "string",
|
||
"description": "Имя файла для экспорта"
|
||
}
|
||
},
|
||
"required": ["action"]
|
||
}
|
||
}
|
||
},
|
||
# ANCHOR[SCHEMA_SNAPSHOTS]
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_snapshots",
|
||
"description": "Получение списка снапшотов и срезов логов СКУД из базы данных за конкретную дату.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"date_str": {
|
||
"type": "string",
|
||
"description": "Дата в формате ДД.ММ.ГГГГ или относительное слово"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_delete_snapshots",
|
||
"description": "Удаление снапшотов СКУД по идентификатору или дате.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"snapshot_id": {
|
||
"type": "string",
|
||
"description": "Идентификатор конкретного снапшота"
|
||
},
|
||
"day_str": {
|
||
"type": "string",
|
||
"description": "Дата всех снапшотов за день"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_anomalies",
|
||
"description": "Просмотр истории аномалий и расхождений между СКУД и 1С.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"date_str": {
|
||
"type": "string",
|
||
"description": "Опциональная дата в формате ДД.ММ.ГГГГ"
|
||
},
|
||
"limit": {
|
||
"type": "integer",
|
||
"description": "Лимит записей"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_rules",
|
||
"description": "Просмотр базы знаний и правил кадрового арбитража компании.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_stats",
|
||
"description": "Получение статистики количества записей в таблицах базы данных.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_current_server_time",
|
||
"description": "Получение текущего точного времени сервера.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {}
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"type": "function",
|
||
"function": {
|
||
"name": "db_get_reference",
|
||
"description": "Справка о возможностях ассистента и примеры доступных команд.",
|
||
"parameters": {
|
||
"type": "object",
|
||
"properties": {
|
||
"category": {
|
||
"type": "string",
|
||
"description": "Категория справки"
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
] |