# 🔄 Исправление проблемы с инструментами ИИ ## Проблема ИИ (Qwen Code / Opencode / GigaChat) **не хотел использовать инструменты** бота, потому что: 1. **Не считал их своими** — пытался работать только через свои встроенные инструменты 2. **Говорил что инструменты недоступны** — хотя AI-агент их вызывал 3. **Пытался вызвать инструменты напрямую** — хотя технически не мог это сделать ## Причина **Архитектурная проблема:** - **AI-агент бота** (`bot/ai_agent.py`) — принимает решение об использовании инструментов и вызывает их - **ИИ (Qwen/другие)** — генерирует текст, но **не имел доступа к результатам инструментов** ИИ видел в системном промпте описание инструментов, но **не получал результаты их выполнения** — поэтому думал что они недоступны. ## Решение ### 1. Обновлён системный промпт (`system_prompt.md`) Добавлены явные указания: ```markdown ## 🧠 АРХИТЕКТУРА: КТО ВЫЗЫВАЕТ ИНСТРУМЕНТЫ? **ВАЖНОЕ РАЗДЕЛЕНИЕ ОТВЕТСТВЕННОСТИ:** 1. **AI-агент бота** (внешняя система) — **принимает решение** об использовании инструментов и **вызывает их** 2. **ТЫ (Qwen/ИИ)** — **получаешь результаты инструментов в контексте** и **анализируешь их** **ТЫ НЕ ВЫЗЫВАЕШЬ ИНСТРУМЕНТЫ НАПРЯМУЮ!** ``` ### 2. Обновлена логика `bot.py` **До:** ```python if tool_result.success: # СРАЗУ формируем ответ из результатов tool_result_formatted = await format_tool_result(...) await send_long_message_html(update, tool_result_formatted) return # Qwen НЕ получает результаты! ``` **После:** ```python # Сохраняем результат для передачи в Qwen tool_result_for_context = { 'tool_name': agent_decision.tool_name, 'result': tool_result, 'args': agent_decision.tool_args } # Формируем блок с результатами инструментов if tool_result_for_context: tool_result_block = f"=== РЕЗУЛЬТАТЫ ИНСТРУМЕНТА ===\n{result.data}" # Добавляем в полный промпт для Qwen full_task = f"{system_prompt}\n\n{tool_result_block}\n\n=== ЗАПРОС ===\n{text}" ``` ### 3. Поддержка всех провайдеров Обновлены все AI-провайдеры: - ✅ **Qwen Code** — получает результаты в `full_task` - ✅ **GigaChat** — получает результаты в `context_messages` - ✅ **Opencode** — получает результаты в `context_messages` ## Что изменилось | Было | Стало | |------|-------| | ИИ не видел результаты инструментов | ИИ получает результаты в контексте | | ИИ пытался вызвать инструменты сам | ИИ знает что не может вызывать инструменты | | Прямой ответ из инструментов | ИИ анализирует результаты и формирует ответ | | Путаница с доступностью | Явное разделение ответственности | ## Тестирование Проверьте работу с разными инструментами: ```bash # Поиск в интернете "Найди информацию про Python asyncio" # RSS новости "Почитай новости Linux" # SSH команды "Проверь нагрузку на сервере" # Cron задачи "Напомни каждый день делать бэкап" # Файловая система "Покажи содержимое /home/mirivlad/git" ``` **Ожидаемое поведение:** 1. AI-агент распознаёт запрос и решает использовать инструмент 2. Инструмент выполняется 3. Результаты передаются в ИИ 4. ИИ анализирует результаты и формирует понятный ответ 5. ИИ **не пытается** вызвать инструмент повторно ## Файлы изменены - `system_prompt.md` — добавлено явное разделение ответственности - `bot.py` — передача результатов инструментов в ИИ - `handle_ai_task()` — сохранение результатов в `tool_result_for_context` - Формирование `tool_result_block` для разных провайдеров - GigaChat и Opencode — поддержка результатов инструментов ## Следующие шаги Если проблема сохранится: 1. **Проверить логи** — посмотреть что видит ИИ в контексте 2. **Добавить больше примеров** в системный промпт 3. **Настроить temperature** — возможно ИИ слишком "креативный" 4. **Добавить few-shot примеры** — показать как правильно отвечать --- **Дата исправления:** 2026-03-09 **Версия бота:** 0.9.0